268 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2 3; 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-DF4; 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-DF25 6define double @FADD_DOUBLE(double %x, double %y) {7; CHECK-DF-LABEL: FADD_DOUBLE:8; CHECK-DF: # %bb.0: # %entry9; CHECK-DF-NEXT: faddd vr0, vr1, vr010; CHECK-DF-NEXT: rts1611;12; CHECK-DF2-LABEL: FADD_DOUBLE:13; CHECK-DF2: # %bb.0: # %entry14; CHECK-DF2-NEXT: fadd.64 vr0, vr1, vr015; CHECK-DF2-NEXT: rts1616entry:17 %fadd = fadd double %y, %x18 ret double %fadd19}20 21define double @FADD_DOUBLE_I(double %x) {22; CHECK-DF-LABEL: FADD_DOUBLE_I:23; CHECK-DF: # %bb.0: # %entry24; CHECK-DF-NEXT: grs32 a0, .LCPI1_025; CHECK-DF-NEXT: fldd vr1, (a0, 0)26; CHECK-DF-NEXT: faddd vr0, vr0, vr127; CHECK-DF-NEXT: rts1628; CHECK-DF-NEXT: .p2align 129; CHECK-DF-NEXT: # %bb.1:30; CHECK-DF-NEXT: .p2align 2, 0x031; CHECK-DF-NEXT: .LCPI1_0:32; CHECK-DF-NEXT: .quad 0xbff0000000000000 # double -133;34; CHECK-DF2-LABEL: FADD_DOUBLE_I:35; CHECK-DF2: # %bb.0: # %entry36; CHECK-DF2-NEXT: flrw.64 vr1, [.LCPI1_0]37; CHECK-DF2-NEXT: fadd.64 vr0, vr0, vr138; CHECK-DF2-NEXT: rts1639; CHECK-DF2-NEXT: .p2align 140; CHECK-DF2-NEXT: # %bb.1:41; CHECK-DF2-NEXT: .p2align 2, 0x042; CHECK-DF2-NEXT: .LCPI1_0:43; CHECK-DF2-NEXT: .quad 0xbff0000000000000 # double -144entry:45 %fadd = fadd double %x, -1.046 ret double %fadd47}48 49define double @FSUB_DOUBLE(double %x, double %y) {50; CHECK-DF-LABEL: FSUB_DOUBLE:51; CHECK-DF: # %bb.0: # %entry52; CHECK-DF-NEXT: fsubd vr0, vr1, vr053; CHECK-DF-NEXT: rts1654;55; CHECK-DF2-LABEL: FSUB_DOUBLE:56; CHECK-DF2: # %bb.0: # %entry57; CHECK-DF2-NEXT: fsub.64 vr0, vr1, vr058; CHECK-DF2-NEXT: rts1659 60entry:61 %fsub = fsub double %y, %x62 ret double %fsub63}64 65define double @FSUB_DOUBLE_I(double %x) {66;67; CHECK-DF-LABEL: FSUB_DOUBLE_I:68; CHECK-DF: # %bb.0: # %entry69; CHECK-DF-NEXT: grs32 a0, .LCPI3_070; CHECK-DF-NEXT: fldd vr1, (a0, 0)71; CHECK-DF-NEXT: faddd vr0, vr0, vr172; CHECK-DF-NEXT: rts1673; CHECK-DF-NEXT: .p2align 174; CHECK-DF-NEXT: # %bb.1:75; CHECK-DF-NEXT: .p2align 2, 0x076; CHECK-DF-NEXT: .LCPI3_0:77; CHECK-DF-NEXT: .quad 0x3ff0000000000000 # double 178;79; CHECK-DF2-LABEL: FSUB_DOUBLE_I:80; CHECK-DF2: # %bb.0: # %entry81; CHECK-DF2-NEXT: flrw.64 vr1, [.LCPI3_0]82; CHECK-DF2-NEXT: fadd.64 vr0, vr0, vr183; CHECK-DF2-NEXT: rts1684; CHECK-DF2-NEXT: .p2align 185; CHECK-DF2-NEXT: # %bb.1:86; CHECK-DF2-NEXT: .p2align 2, 0x087; CHECK-DF2-NEXT: .LCPI3_0:88; CHECK-DF2-NEXT: .quad 0x3ff0000000000000 # double 189 90entry:91 %fsub = fsub double %x, -1.092 ret double %fsub93}94 95define double @FMUL_DOUBLE(double %x, double %y) {96;97; CHECK-DF-LABEL: FMUL_DOUBLE:98; CHECK-DF: # %bb.0: # %entry99; CHECK-DF-NEXT: fmuld vr0, vr1, vr0100; CHECK-DF-NEXT: rts16101;102; CHECK-DF2-LABEL: FMUL_DOUBLE:103; CHECK-DF2: # %bb.0: # %entry104; CHECK-DF2-NEXT: fmul.64 vr0, vr1, vr0105; CHECK-DF2-NEXT: rts16106entry:107 %fmul = fmul double %y, %x108 ret double %fmul109}110 111define double @FNMUL_DOUBLE_a(double %x, double %y) {112;113; CHECK-DF-LABEL: FNMUL_DOUBLE_a:114; CHECK-DF: # %bb.0: # %entry115; CHECK-DF-NEXT: fnmuld vr0, vr1, vr0116; CHECK-DF-NEXT: rts16117;118; CHECK-DF2-LABEL: FNMUL_DOUBLE_a:119; CHECK-DF2: # %bb.0: # %entry120; CHECK-DF2-NEXT: fnmul.64 vr0, vr1, vr0121; CHECK-DF2-NEXT: rts16122entry:123 %z = fneg double %y124 %fnmul = fmul double %z, %x125 ret double %fnmul126}127 128define double @FNMUL_DOUBLE_b(double %x, double %y) {129; CHECK-DF-LABEL: FNMUL_DOUBLE_b:130; CHECK-DF: # %bb.0: # %entry131; CHECK-DF-NEXT: fnmuld vr0, vr0, vr1132; CHECK-DF-NEXT: rts16133;134; CHECK-DF2-LABEL: FNMUL_DOUBLE_b:135; CHECK-DF2: # %bb.0: # %entry136; CHECK-DF2-NEXT: fnmul.64 vr0, vr0, vr1137; CHECK-DF2-NEXT: rts16138entry:139 %z = fneg double %x140 %fnmul = fmul double %y, %z141 ret double %fnmul142}143 144define double @FMUL_DOUBLE_I(double %x) {145;146; CHECK-DF-LABEL: FMUL_DOUBLE_I:147; CHECK-DF: # %bb.0: # %entry148; CHECK-DF-NEXT: grs32 a0, .LCPI7_0149; CHECK-DF-NEXT: fldd vr1, (a0, 0)150; CHECK-DF-NEXT: fmuld vr0, vr0, vr1151; CHECK-DF-NEXT: rts16152; CHECK-DF-NEXT: .p2align 1153; CHECK-DF-NEXT: # %bb.1:154; CHECK-DF-NEXT: .p2align 2, 0x0155; CHECK-DF-NEXT: .LCPI7_0:156; CHECK-DF-NEXT: .quad 0xc01c000000000000 # double -7157;158; CHECK-DF2-LABEL: FMUL_DOUBLE_I:159; CHECK-DF2: # %bb.0: # %entry160; CHECK-DF2-NEXT: flrw.64 vr1, [.LCPI7_0]161; CHECK-DF2-NEXT: fmul.64 vr0, vr0, vr1162; CHECK-DF2-NEXT: rts16163; CHECK-DF2-NEXT: .p2align 1164; CHECK-DF2-NEXT: # %bb.1:165; CHECK-DF2-NEXT: .p2align 2, 0x0166; CHECK-DF2-NEXT: .LCPI7_0:167; CHECK-DF2-NEXT: .quad 0xc01c000000000000 # double -7168entry:169 %fmul = fmul double %x, -7.0170 ret double %fmul171}172 173define double @FDIV_DOUBLE(double %x, double %y) {174;175;176; CHECK-DF-LABEL: FDIV_DOUBLE:177; CHECK-DF: # %bb.0: # %entry178; CHECK-DF-NEXT: fdivd vr0, vr1, vr0179; CHECK-DF-NEXT: rts16180;181; CHECK-DF2-LABEL: FDIV_DOUBLE:182; CHECK-DF2: # %bb.0: # %entry183; CHECK-DF2-NEXT: fdiv.64 vr0, vr1, vr0184; CHECK-DF2-NEXT: rts16185 186entry:187 %fdiv = fdiv double %y, %x188 ret double %fdiv189}190 191define double @FDIV_DOUBLE_I(double %x) {192;193; CHECK-DF-LABEL: FDIV_DOUBLE_I:194; CHECK-DF: # %bb.0: # %entry195; CHECK-DF-NEXT: grs32 a0, .LCPI9_0196; CHECK-DF-NEXT: fldd vr1, (a0, 0)197; CHECK-DF-NEXT: fdivd vr0, vr0, vr1198; CHECK-DF-NEXT: rts16199; CHECK-DF-NEXT: .p2align 1200; CHECK-DF-NEXT: # %bb.1:201; CHECK-DF-NEXT: .p2align 2, 0x0202; CHECK-DF-NEXT: .LCPI9_0:203; CHECK-DF-NEXT: .quad 0xc01c000000000000 # double -7204;205; CHECK-DF2-LABEL: FDIV_DOUBLE_I:206; CHECK-DF2: # %bb.0: # %entry207; CHECK-DF2-NEXT: flrw.64 vr1, [.LCPI9_0]208; CHECK-DF2-NEXT: fdiv.64 vr0, vr0, vr1209; CHECK-DF2-NEXT: rts16210; CHECK-DF2-NEXT: .p2align 1211; CHECK-DF2-NEXT: # %bb.1:212; CHECK-DF2-NEXT: .p2align 2, 0x0213; CHECK-DF2-NEXT: .LCPI9_0:214; CHECK-DF2-NEXT: .quad 0xc01c000000000000 # double -7215entry:216 %fdiv = fdiv double %x, -7.0217 ret double %fdiv218}219 220define double @FNEG_DOUBLE(double %x) {221;222; CHECK-DF-LABEL: FNEG_DOUBLE:223; CHECK-DF: # %bb.0: # %entry224; CHECK-DF-NEXT: fnegd vr0, vr0225; CHECK-DF-NEXT: rts16226;227; CHECK-DF2-LABEL: FNEG_DOUBLE:228; CHECK-DF2: # %bb.0: # %entry229; CHECK-DF2-NEXT: fneg.64 vr0, vr0230; CHECK-DF2-NEXT: rts16231entry:232 %fneg = fneg double %x233 ret double %fneg234}235 236; double --> float237define float @fptruncR_double_0(double %x) {238;239; CHECK-DF-LABEL: fptruncR_double_0:240; CHECK-DF: # %bb.0: # %entry241; CHECK-DF-NEXT: fdtos vr0, vr0242; CHECK-DF-NEXT: rts16243;244; CHECK-DF2-LABEL: fptruncR_double_0:245; CHECK-DF2: # %bb.0: # %entry246; CHECK-DF2-NEXT: fdtos vr0, vr0247; CHECK-DF2-NEXT: rts16248entry:249 %fptrunc = fptrunc double %x to float250 ret float %fptrunc251}252 253define double @fpextR_double_0(float %x) {254;255; CHECK-DF-LABEL: fpextR_double_0:256; CHECK-DF: # %bb.0: # %entry257; CHECK-DF-NEXT: fstod vr0, vr0258; CHECK-DF-NEXT: rts16259;260; CHECK-DF2-LABEL: fpextR_double_0:261; CHECK-DF2: # %bb.0: # %entry262; CHECK-DF2-NEXT: fstod vr0, vr0263; CHECK-DF2-NEXT: rts16264entry:265 %fpext = fpext float %x to double266 ret double %fpext267}268