235 lines
6.4 KiB
LLVM
235 lines
6.4 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
|
|
|
; RUN: llc -verify-machineinstrs -csky-no-aliases < %s -mtriple=csky -float-abi=hard -mattr=+hard-float -mattr=+2e3 -mattr=+fpuv2_sf -mattr=+fpuv2_df | FileCheck %s --check-prefix=CHECK-DF
|
|
; RUN: llc -verify-machineinstrs -csky-no-aliases < %s -mtriple=csky -float-abi=hard -mattr=+hard-float -mattr=+2e3 -mattr=+fpuv3_sf -mattr=+fpuv3_df | FileCheck %s --check-prefix=CHECK-DF2
|
|
|
|
define double @FADD_DOUBLE(double %x, double %y) {
|
|
; CHECK-DF-LABEL: FADD_DOUBLE:
|
|
; CHECK-DF: # %bb.0: # %entry
|
|
; CHECK-DF-NEXT: faddd vr0, vr1, vr0
|
|
; CHECK-DF-NEXT: rts16
|
|
;
|
|
; CHECK-DF2-LABEL: FADD_DOUBLE:
|
|
; CHECK-DF2: # %bb.0: # %entry
|
|
; CHECK-DF2-NEXT: fadd.64 vr0, vr1, vr0
|
|
; CHECK-DF2-NEXT: rts16
|
|
entry:
|
|
%fadd = fadd double %y, %x
|
|
ret double %fadd
|
|
}
|
|
|
|
define double @FADD_DOUBLE_I(double %x) {
|
|
; CHECK-DF-LABEL: FADD_DOUBLE_I:
|
|
; CHECK-DF: # %bb.0: # %entry
|
|
; CHECK-DF-NEXT: grs32 a0, .LCPI1_0
|
|
; CHECK-DF-NEXT: fldd vr1, (a0, 0)
|
|
; CHECK-DF-NEXT: faddd vr0, vr0, vr1
|
|
; CHECK-DF-NEXT: rts16
|
|
; CHECK-DF-NEXT: .p2align 1
|
|
; CHECK-DF-NEXT: # %bb.1:
|
|
; CHECK-DF-NEXT: .p2align 2
|
|
; CHECK-DF-NEXT: .LCPI1_0:
|
|
; CHECK-DF-NEXT: .quad 0xbff0000000000000 # double -1
|
|
;
|
|
; CHECK-DF2-LABEL: FADD_DOUBLE_I:
|
|
; CHECK-DF2: # %bb.0: # %entry
|
|
; CHECK-DF2-NEXT: flrw.64 vr1, [.LCPI1_0]
|
|
; CHECK-DF2-NEXT: fadd.64 vr0, vr0, vr1
|
|
; CHECK-DF2-NEXT: rts16
|
|
; CHECK-DF2-NEXT: .p2align 1
|
|
; CHECK-DF2-NEXT: # %bb.1:
|
|
; CHECK-DF2-NEXT: .p2align 2
|
|
; CHECK-DF2-NEXT: .LCPI1_0:
|
|
; CHECK-DF2-NEXT: .quad 0xbff0000000000000 # double -1
|
|
entry:
|
|
%fadd = fadd double %x, -1.0
|
|
ret double %fadd
|
|
}
|
|
|
|
define double @FSUB_DOUBLE(double %x, double %y) {
|
|
; CHECK-DF-LABEL: FSUB_DOUBLE:
|
|
; CHECK-DF: # %bb.0: # %entry
|
|
; CHECK-DF-NEXT: fsubd vr0, vr1, vr0
|
|
; CHECK-DF-NEXT: rts16
|
|
;
|
|
; CHECK-DF2-LABEL: FSUB_DOUBLE:
|
|
; CHECK-DF2: # %bb.0: # %entry
|
|
; CHECK-DF2-NEXT: fsub.64 vr0, vr1, vr0
|
|
; CHECK-DF2-NEXT: rts16
|
|
|
|
entry:
|
|
%fsub = fsub double %y, %x
|
|
ret double %fsub
|
|
}
|
|
|
|
define double @FSUB_DOUBLE_I(double %x) {
|
|
;
|
|
; CHECK-DF-LABEL: FSUB_DOUBLE_I:
|
|
; CHECK-DF: # %bb.0: # %entry
|
|
; CHECK-DF-NEXT: grs32 a0, .LCPI3_0
|
|
; CHECK-DF-NEXT: fldd vr1, (a0, 0)
|
|
; CHECK-DF-NEXT: faddd vr0, vr0, vr1
|
|
; CHECK-DF-NEXT: rts16
|
|
; CHECK-DF-NEXT: .p2align 1
|
|
; CHECK-DF-NEXT: # %bb.1:
|
|
; CHECK-DF-NEXT: .p2align 2
|
|
; CHECK-DF-NEXT: .LCPI3_0:
|
|
; CHECK-DF-NEXT: .quad 0x3ff0000000000000 # double 1
|
|
;
|
|
; CHECK-DF2-LABEL: FSUB_DOUBLE_I:
|
|
; CHECK-DF2: # %bb.0: # %entry
|
|
; CHECK-DF2-NEXT: flrw.64 vr1, [.LCPI3_0]
|
|
; CHECK-DF2-NEXT: fadd.64 vr0, vr0, vr1
|
|
; CHECK-DF2-NEXT: rts16
|
|
; CHECK-DF2-NEXT: .p2align 1
|
|
; CHECK-DF2-NEXT: # %bb.1:
|
|
; CHECK-DF2-NEXT: .p2align 2
|
|
; CHECK-DF2-NEXT: .LCPI3_0:
|
|
; CHECK-DF2-NEXT: .quad 0x3ff0000000000000 # double 1
|
|
|
|
entry:
|
|
%fsub = fsub double %x, -1.0
|
|
ret double %fsub
|
|
}
|
|
|
|
define double @FMUL_DOUBLE(double %x, double %y) {
|
|
;
|
|
; CHECK-DF-LABEL: FMUL_DOUBLE:
|
|
; CHECK-DF: # %bb.0: # %entry
|
|
; CHECK-DF-NEXT: fmuld vr0, vr1, vr0
|
|
; CHECK-DF-NEXT: rts16
|
|
;
|
|
; CHECK-DF2-LABEL: FMUL_DOUBLE:
|
|
; CHECK-DF2: # %bb.0: # %entry
|
|
; CHECK-DF2-NEXT: fmul.64 vr0, vr1, vr0
|
|
; CHECK-DF2-NEXT: rts16
|
|
entry:
|
|
%fmul = fmul double %y, %x
|
|
ret double %fmul
|
|
}
|
|
|
|
define double @FMUL_DOUBLE_I(double %x) {
|
|
;
|
|
; CHECK-DF-LABEL: FMUL_DOUBLE_I:
|
|
; CHECK-DF: # %bb.0: # %entry
|
|
; CHECK-DF-NEXT: grs32 a0, .LCPI5_0
|
|
; CHECK-DF-NEXT: fldd vr1, (a0, 0)
|
|
; CHECK-DF-NEXT: fmuld vr0, vr0, vr1
|
|
; CHECK-DF-NEXT: rts16
|
|
; CHECK-DF-NEXT: .p2align 1
|
|
; CHECK-DF-NEXT: # %bb.1:
|
|
; CHECK-DF-NEXT: .p2align 2
|
|
; CHECK-DF-NEXT: .LCPI5_0:
|
|
; CHECK-DF-NEXT: .quad 0xc01c000000000000 # double -7
|
|
;
|
|
; CHECK-DF2-LABEL: FMUL_DOUBLE_I:
|
|
; CHECK-DF2: # %bb.0: # %entry
|
|
; CHECK-DF2-NEXT: flrw.64 vr1, [.LCPI5_0]
|
|
; CHECK-DF2-NEXT: fmul.64 vr0, vr0, vr1
|
|
; CHECK-DF2-NEXT: rts16
|
|
; CHECK-DF2-NEXT: .p2align 1
|
|
; CHECK-DF2-NEXT: # %bb.1:
|
|
; CHECK-DF2-NEXT: .p2align 2
|
|
; CHECK-DF2-NEXT: .LCPI5_0:
|
|
; CHECK-DF2-NEXT: .quad 0xc01c000000000000 # double -7
|
|
entry:
|
|
%fmul = fmul double %x, -7.0
|
|
ret double %fmul
|
|
}
|
|
|
|
define double @FDIV_DOUBLE(double %x, double %y) {
|
|
;
|
|
;
|
|
; CHECK-DF-LABEL: FDIV_DOUBLE:
|
|
; CHECK-DF: # %bb.0: # %entry
|
|
; CHECK-DF-NEXT: fdivd vr0, vr1, vr0
|
|
; CHECK-DF-NEXT: rts16
|
|
;
|
|
; CHECK-DF2-LABEL: FDIV_DOUBLE:
|
|
; CHECK-DF2: # %bb.0: # %entry
|
|
; CHECK-DF2-NEXT: fdiv.64 vr0, vr1, vr0
|
|
; CHECK-DF2-NEXT: rts16
|
|
|
|
entry:
|
|
%fdiv = fdiv double %y, %x
|
|
ret double %fdiv
|
|
}
|
|
|
|
define double @FDIV_DOUBLE_I(double %x) {
|
|
;
|
|
; CHECK-DF-LABEL: FDIV_DOUBLE_I:
|
|
; CHECK-DF: # %bb.0: # %entry
|
|
; CHECK-DF-NEXT: grs32 a0, .LCPI7_0
|
|
; CHECK-DF-NEXT: fldd vr1, (a0, 0)
|
|
; CHECK-DF-NEXT: fdivd vr0, vr0, vr1
|
|
; CHECK-DF-NEXT: rts16
|
|
; CHECK-DF-NEXT: .p2align 1
|
|
; CHECK-DF-NEXT: # %bb.1:
|
|
; CHECK-DF-NEXT: .p2align 2
|
|
; CHECK-DF-NEXT: .LCPI7_0:
|
|
; CHECK-DF-NEXT: .quad 0xc01c000000000000 # double -7
|
|
;
|
|
; CHECK-DF2-LABEL: FDIV_DOUBLE_I:
|
|
; CHECK-DF2: # %bb.0: # %entry
|
|
; CHECK-DF2-NEXT: flrw.64 vr1, [.LCPI7_0]
|
|
; CHECK-DF2-NEXT: fdiv.64 vr0, vr0, vr1
|
|
; CHECK-DF2-NEXT: rts16
|
|
; CHECK-DF2-NEXT: .p2align 1
|
|
; CHECK-DF2-NEXT: # %bb.1:
|
|
; CHECK-DF2-NEXT: .p2align 2
|
|
; CHECK-DF2-NEXT: .LCPI7_0:
|
|
; CHECK-DF2-NEXT: .quad 0xc01c000000000000 # double -7
|
|
entry:
|
|
%fdiv = fdiv double %x, -7.0
|
|
ret double %fdiv
|
|
}
|
|
|
|
define double @FNEG_DOUBLE(double %x) {
|
|
;
|
|
; CHECK-DF-LABEL: FNEG_DOUBLE:
|
|
; CHECK-DF: # %bb.0: # %entry
|
|
; CHECK-DF-NEXT: fnegd vr0, vr0
|
|
; CHECK-DF-NEXT: rts16
|
|
;
|
|
; CHECK-DF2-LABEL: FNEG_DOUBLE:
|
|
; CHECK-DF2: # %bb.0: # %entry
|
|
; CHECK-DF2-NEXT: fneg.64 vr0, vr0
|
|
; CHECK-DF2-NEXT: rts16
|
|
entry:
|
|
%fneg = fneg double %x
|
|
ret double %fneg
|
|
}
|
|
|
|
; double --> float
|
|
define float @fptruncR_double_0(double %x) {
|
|
;
|
|
; CHECK-DF-LABEL: fptruncR_double_0:
|
|
; CHECK-DF: # %bb.0: # %entry
|
|
; CHECK-DF-NEXT: fdtos vr0, vr0
|
|
; CHECK-DF-NEXT: rts16
|
|
;
|
|
; CHECK-DF2-LABEL: fptruncR_double_0:
|
|
; CHECK-DF2: # %bb.0: # %entry
|
|
; CHECK-DF2-NEXT: fdtos vr0, vr0
|
|
; CHECK-DF2-NEXT: rts16
|
|
entry:
|
|
%fptrunc = fptrunc double %x to float
|
|
ret float %fptrunc
|
|
}
|
|
|
|
define double @fpextR_double_0(float %x) {
|
|
;
|
|
; CHECK-DF-LABEL: fpextR_double_0:
|
|
; CHECK-DF: # %bb.0: # %entry
|
|
; CHECK-DF-NEXT: fstod vr0, vr0
|
|
; CHECK-DF-NEXT: rts16
|
|
;
|
|
; CHECK-DF2-LABEL: fpextR_double_0:
|
|
; CHECK-DF2: # %bb.0: # %entry
|
|
; CHECK-DF2-NEXT: fstod vr0, vr0
|
|
; CHECK-DF2-NEXT: rts16
|
|
entry:
|
|
%fpext = fpext float %x to double
|
|
ret double %fpext
|
|
}
|