brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.8 KiB · 456f85a Raw
337 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -enable-no-signed-zeros-fp-math \3; RUN:       < %s | FileCheck -check-prefix=CHECK-FAST %s4; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -enable-no-signed-zeros-fp-math \5; RUN:      -mattr=-vsx < %s | FileCheck -check-prefix=CHECK-FAST-NOVSX %s6; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s7 8define dso_local double @fma_combine1(double %a, double %b, double %c) {9; CHECK-FAST-LABEL: fma_combine1:10; CHECK-FAST:       # %bb.0: # %entry11; CHECK-FAST-NEXT:    xsnmaddadp 1, 3, 212; CHECK-FAST-NEXT:    blr13;14; CHECK-FAST-NOVSX-LABEL: fma_combine1:15; CHECK-FAST-NOVSX:       # %bb.0: # %entry16; CHECK-FAST-NOVSX-NEXT:    fnmadd 1, 3, 2, 117; CHECK-FAST-NOVSX-NEXT:    blr18;19; CHECK-LABEL: fma_combine1:20; CHECK:       # %bb.0: # %entry21; CHECK-NEXT:    xsnegdp 0, 322; CHECK-NEXT:    xsmsubadp 1, 0, 223; CHECK-NEXT:    blr24entry:25  %fneg1 = fneg double %c26  %mul = fmul contract double %fneg1, %b27  %add = fsub contract double %mul, %a28  ret double %add29}30 31define dso_local double @fma_combine2(double %a, double %b, double %c) {32; CHECK-FAST-LABEL: fma_combine2:33; CHECK-FAST:       # %bb.0: # %entry34; CHECK-FAST-NEXT:    xsnmaddadp 1, 2, 335; CHECK-FAST-NEXT:    blr36;37; CHECK-FAST-NOVSX-LABEL: fma_combine2:38; CHECK-FAST-NOVSX:       # %bb.0: # %entry39; CHECK-FAST-NOVSX-NEXT:    fnmadd 1, 2, 3, 140; CHECK-FAST-NOVSX-NEXT:    blr41;42; CHECK-LABEL: fma_combine2:43; CHECK:       # %bb.0: # %entry44; CHECK-NEXT:    xsnegdp 0, 345; CHECK-NEXT:    xsmsubadp 1, 2, 046; CHECK-NEXT:    blr47entry:48  %fneg1 = fneg double %c49  %mul = fmul contract double %b, %fneg150  %add = fsub contract double %mul, %a51  ret double %add52}53 54@v = common dso_local local_unnamed_addr global double 0.000000e+00, align 855@z = common dso_local local_unnamed_addr global double 0.000000e+00, align 856define dso_local double @fma_combine_two_uses(double %a, double %b, double %c) {57; CHECK-FAST-LABEL: fma_combine_two_uses:58; CHECK-FAST:       # %bb.0: # %entry59; CHECK-FAST-NEXT:    xsnegdp 0, 160; CHECK-FAST-NEXT:    addis 3, 2, v@toc@ha61; CHECK-FAST-NEXT:    xsnmaddadp 1, 3, 262; CHECK-FAST-NEXT:    stfd 0, v@toc@l(3)63; CHECK-FAST-NEXT:    xsnegdp 0, 364; CHECK-FAST-NEXT:    addis 3, 2, z@toc@ha65; CHECK-FAST-NEXT:    stfd 0, z@toc@l(3)66; CHECK-FAST-NEXT:    blr67;68; CHECK-FAST-NOVSX-LABEL: fma_combine_two_uses:69; CHECK-FAST-NOVSX:       # %bb.0: # %entry70; CHECK-FAST-NOVSX-NEXT:    fneg 0, 171; CHECK-FAST-NOVSX-NEXT:    addis 3, 2, v@toc@ha72; CHECK-FAST-NOVSX-NEXT:    fnmadd 1, 3, 2, 173; CHECK-FAST-NOVSX-NEXT:    stfd 0, v@toc@l(3)74; CHECK-FAST-NOVSX-NEXT:    fneg 0, 375; CHECK-FAST-NOVSX-NEXT:    addis 3, 2, z@toc@ha76; CHECK-FAST-NOVSX-NEXT:    stfd 0, z@toc@l(3)77; CHECK-FAST-NOVSX-NEXT:    blr78;79; CHECK-LABEL: fma_combine_two_uses:80; CHECK:       # %bb.0: # %entry81; CHECK-NEXT:    xsnegdp 0, 182; CHECK-NEXT:    addis 3, 2, v@toc@ha83; CHECK-NEXT:    stfd 0, v@toc@l(3)84; CHECK-NEXT:    xsnegdp 0, 385; CHECK-NEXT:    addis 3, 2, z@toc@ha86; CHECK-NEXT:    xsmsubadp 1, 0, 287; CHECK-NEXT:    stfd 0, z@toc@l(3)88; CHECK-NEXT:    blr89entry:90  %fneg = fneg double %a91  store double %fneg, ptr @v, align 892  %fneg1 = fneg double %c93  store double %fneg1, ptr @z, align 894  %mul = fmul contract double %fneg1, %b95  %add = fsub contract double %mul, %a96  ret double %add97}98 99define dso_local double @fma_combine_one_use(double %a, double %b, double %c) {100; CHECK-FAST-LABEL: fma_combine_one_use:101; CHECK-FAST:       # %bb.0: # %entry102; CHECK-FAST-NEXT:    xsnegdp 0, 1103; CHECK-FAST-NEXT:    xsnmaddadp 1, 3, 2104; CHECK-FAST-NEXT:    addis 3, 2, v@toc@ha105; CHECK-FAST-NEXT:    stfd 0, v@toc@l(3)106; CHECK-FAST-NEXT:    blr107;108; CHECK-FAST-NOVSX-LABEL: fma_combine_one_use:109; CHECK-FAST-NOVSX:       # %bb.0: # %entry110; CHECK-FAST-NOVSX-NEXT:    fneg 0, 1111; CHECK-FAST-NOVSX-NEXT:    fnmadd 1, 3, 2, 1112; CHECK-FAST-NOVSX-NEXT:    addis 3, 2, v@toc@ha113; CHECK-FAST-NOVSX-NEXT:    stfd 0, v@toc@l(3)114; CHECK-FAST-NOVSX-NEXT:    blr115;116; CHECK-LABEL: fma_combine_one_use:117; CHECK:       # %bb.0: # %entry118; CHECK-NEXT:    xsnegdp 0, 1119; CHECK-NEXT:    addis 3, 2, v@toc@ha120; CHECK-NEXT:    stfd 0, v@toc@l(3)121; CHECK-NEXT:    xsnegdp 0, 3122; CHECK-NEXT:    xsmsubadp 1, 0, 2123; CHECK-NEXT:    blr124entry:125  %fneg = fneg double %a126  store double %fneg, ptr @v, align 8127  %fneg1 = fneg double %c128  %mul = fmul contract double %fneg1, %b129  %add = fsub contract double %mul, %a130  ret double %add131}132 133define dso_local float @fma_combine_no_ice() {134; CHECK-FAST-LABEL: fma_combine_no_ice:135; CHECK-FAST:       # %bb.0:136; CHECK-FAST-NEXT:    vspltisw 2, 1137; CHECK-FAST-NEXT:    addis 3, 2, .LCPI4_0@toc@ha138; CHECK-FAST-NEXT:    xvcvsxwdp 3, 34139; CHECK-FAST-NEXT:    lfs 0, .LCPI4_0@toc@l(3)140; CHECK-FAST-NEXT:    lfs 2, 0(3)141; CHECK-FAST-NEXT:    addis 3, 2, .LCPI4_1@toc@ha142; CHECK-FAST-NEXT:    lfs 1, .LCPI4_1@toc@l(3)143; CHECK-FAST-NEXT:    xsmaddasp 3, 2, 0144; CHECK-FAST-NEXT:    xsmaddasp 1, 2, 3145; CHECK-FAST-NEXT:    xsnmsubasp 1, 3, 2146; CHECK-FAST-NEXT:    blr147;148; CHECK-FAST-NOVSX-LABEL: fma_combine_no_ice:149; CHECK-FAST-NOVSX:       # %bb.0:150; CHECK-FAST-NOVSX-NEXT:    lfs 0, 0(3)151; CHECK-FAST-NOVSX-NEXT:    addis 3, 2, .LCPI4_0@toc@ha152; CHECK-FAST-NOVSX-NEXT:    lfs 1, .LCPI4_0@toc@l(3)153; CHECK-FAST-NOVSX-NEXT:    addis 3, 2, .LCPI4_1@toc@ha154; CHECK-FAST-NOVSX-NEXT:    lfs 2, .LCPI4_1@toc@l(3)155; CHECK-FAST-NOVSX-NEXT:    addis 3, 2, .LCPI4_2@toc@ha156; CHECK-FAST-NOVSX-NEXT:    fmadds 1, 0, 2, 1157; CHECK-FAST-NOVSX-NEXT:    lfs 2, .LCPI4_2@toc@l(3)158; CHECK-FAST-NOVSX-NEXT:    fmadds 2, 0, 1, 2159; CHECK-FAST-NOVSX-NEXT:    fnmsubs 1, 1, 0, 2160; CHECK-FAST-NOVSX-NEXT:    blr161;162; CHECK-LABEL: fma_combine_no_ice:163; CHECK:       # %bb.0:164; CHECK-NEXT:    vspltisw 2, 1165; CHECK-NEXT:    addis 3, 2, .LCPI4_0@toc@ha166; CHECK-NEXT:    xvcvsxwdp 3, 34167; CHECK-NEXT:    lfs 0, .LCPI4_0@toc@l(3)168; CHECK-NEXT:    lfs 2, 0(3)169; CHECK-NEXT:    addis 3, 2, .LCPI4_1@toc@ha170; CHECK-NEXT:    lfs 1, .LCPI4_1@toc@l(3)171; CHECK-NEXT:    fmr 4, 3172; CHECK-NEXT:    xsmaddasp 3, 2, 0173; CHECK-NEXT:    xsnmaddasp 4, 2, 0174; CHECK-NEXT:    xsmaddasp 1, 2, 3175; CHECK-NEXT:    xsmaddasp 1, 4, 2176; CHECK-NEXT:    blr177  %tmp = load float, ptr undef, align 4178  %tmp2 = load float, ptr undef, align 4179  %tmp3 = fmul contract reassoc float %tmp, 0x3FE372D780000000180  %tmp4 = fadd contract reassoc float %tmp3, 1.000000e+00181  %tmp5 = fmul contract reassoc float %tmp2, %tmp4182  %tmp6 = load float, ptr undef, align 4183  %tmp7 = load float, ptr undef, align 4184  %tmp8 = fmul contract reassoc float %tmp7, 0x3FE372D780000000185  %tmp9 = fsub contract reassoc nsz float -1.000000e+00, %tmp8186  %tmp10 = fmul contract reassoc float %tmp9, %tmp6187  %tmp11 = fadd contract reassoc float %tmp5, 5.000000e-01188  %tmp12 = fadd contract reassoc float %tmp11, %tmp10189  ret float %tmp12190}191 192; This would crash while trying getNegatedExpression().193define dso_local double @getNegatedExpression_crash(double %x, double %y) {194; CHECK-FAST-LABEL: getNegatedExpression_crash:195; CHECK-FAST:       # %bb.0:196; CHECK-FAST-NEXT:    vspltisw 2, -1197; CHECK-FAST-NEXT:    addis 3, 2, .LCPI5_0@toc@ha198; CHECK-FAST-NEXT:    xvcvsxwdp 4, 34199; CHECK-FAST-NEXT:    lfs 3, .LCPI5_0@toc@l(3)200; CHECK-FAST-NEXT:    xssubdp 0, 1, 4201; CHECK-FAST-NEXT:    xsmaddadp 4, 1, 3202; CHECK-FAST-NEXT:    xsmaddadp 0, 4, 2203; CHECK-FAST-NEXT:    fmr 1, 0204; CHECK-FAST-NEXT:    blr205;206; CHECK-FAST-NOVSX-LABEL: getNegatedExpression_crash:207; CHECK-FAST-NOVSX:       # %bb.0:208; CHECK-FAST-NOVSX-NEXT:    addis 3, 2, .LCPI5_0@toc@ha209; CHECK-FAST-NOVSX-NEXT:    lfs 0, .LCPI5_0@toc@l(3)210; CHECK-FAST-NOVSX-NEXT:    addis 3, 2, .LCPI5_1@toc@ha211; CHECK-FAST-NOVSX-NEXT:    lfs 3, .LCPI5_1@toc@l(3)212; CHECK-FAST-NOVSX-NEXT:    fmadd 3, 1, 3, 0213; CHECK-FAST-NOVSX-NEXT:    fsub 0, 1, 0214; CHECK-FAST-NOVSX-NEXT:    fmadd 1, 3, 2, 0215; CHECK-FAST-NOVSX-NEXT:    blr216;217; CHECK-LABEL: getNegatedExpression_crash:218; CHECK:       # %bb.0:219; CHECK-NEXT:    vspltisw 2, -1220; CHECK-NEXT:    addis 3, 2, .LCPI5_0@toc@ha221; CHECK-NEXT:    xvcvsxwdp 4, 34222; CHECK-NEXT:    lfs 3, .LCPI5_0@toc@l(3)223; CHECK-NEXT:    xssubdp 0, 1, 4224; CHECK-NEXT:    xsmaddadp 4, 1, 3225; CHECK-NEXT:    xsmaddadp 0, 4, 2226; CHECK-NEXT:    fmr 1, 0227; CHECK-NEXT:    blr228  %neg = fneg reassoc double %x229  %fma = call reassoc nsz double @llvm.fma.f64(double %neg, double 42.0, double -1.0)230  %add = fadd reassoc nsz double %x, 1.0231  %fma1 = call reassoc nsz double @llvm.fma.f64(double %fma, double %y, double %add)232  ret double %fma1233}234 235define dso_local double @fma_flag_propagation(double %a) {236; CHECK-FAST-LABEL: fma_flag_propagation:237; CHECK-FAST:       # %bb.0: # %entry238; CHECK-FAST-NEXT:    xxlxor 1, 1, 1239; CHECK-FAST-NEXT:    blr240;241; CHECK-FAST-NOVSX-LABEL: fma_flag_propagation:242; CHECK-FAST-NOVSX:       # %bb.0: # %entry243; CHECK-FAST-NOVSX-NEXT:    addis 3, 2, .LCPI6_0@toc@ha244; CHECK-FAST-NOVSX-NEXT:    lfs 1, .LCPI6_0@toc@l(3)245; CHECK-FAST-NOVSX-NEXT:    blr246;247; CHECK-LABEL: fma_flag_propagation:248; CHECK:       # %bb.0: # %entry249; CHECK-NEXT:    xxlxor 1, 1, 1250; CHECK-NEXT:    blr251entry:252  %0 = fneg double %a253  %1 = call reassoc nnan double @llvm.fma.f64(double %0, double 1.0, double %a)254  ret double %1255}256 257define dso_local double @neg_fma_flag_propagation(double %a) {258; CHECK-FAST-LABEL: neg_fma_flag_propagation:259; CHECK-FAST:       # %bb.0: # %entry260; CHECK-FAST-NEXT:    xxlxor 1, 1, 1261; CHECK-FAST-NEXT:    blr262;263; CHECK-FAST-NOVSX-LABEL: neg_fma_flag_propagation:264; CHECK-FAST-NOVSX:       # %bb.0: # %entry265; CHECK-FAST-NOVSX-NEXT:    addis 3, 2, .LCPI7_0@toc@ha266; CHECK-FAST-NOVSX-NEXT:    lfs 1, .LCPI7_0@toc@l(3)267; CHECK-FAST-NOVSX-NEXT:    blr268;269; CHECK-LABEL: neg_fma_flag_propagation:270; CHECK:       # %bb.0: # %entry271; CHECK-NEXT:    xxlxor 1, 1, 1272; CHECK-NEXT:    blr273entry:274  %0 = call reassoc nnan double @llvm.fma.f64(double %a, double -1.0, double %a)275  ret double %0276}277 278define <2 x double> @vec_neg_fma_flag_propagation(<2 x double> %a) {279; CHECK-FAST-LABEL: vec_neg_fma_flag_propagation:280; CHECK-FAST:       # %bb.0: # %entry281; CHECK-FAST-NEXT:    addis 3, 2, .LCPI8_0@toc@ha282; CHECK-FAST-NEXT:    addi 3, 3, .LCPI8_0@toc@l283; CHECK-FAST-NEXT:    lxvd2x 0, 0, 3284; CHECK-FAST-NEXT:    xvmaddadp 34, 34, 0285; CHECK-FAST-NEXT:    blr286;287; CHECK-FAST-NOVSX-LABEL: vec_neg_fma_flag_propagation:288; CHECK-FAST-NOVSX:       # %bb.0: # %entry289; CHECK-FAST-NOVSX-NEXT:    addis 3, 2, .LCPI8_0@toc@ha290; CHECK-FAST-NOVSX-NEXT:    lfs 1, .LCPI8_0@toc@l(3)291; CHECK-FAST-NOVSX-NEXT:    fmr 2, 1292; CHECK-FAST-NOVSX-NEXT:    blr293;294; CHECK-LABEL: vec_neg_fma_flag_propagation:295; CHECK:       # %bb.0: # %entry296; CHECK-NEXT:    addis 3, 2, .LCPI8_0@toc@ha297; CHECK-NEXT:    addi 3, 3, .LCPI8_0@toc@l298; CHECK-NEXT:    lxvd2x 0, 0, 3299; CHECK-NEXT:    xvmaddadp 34, 34, 0300; CHECK-NEXT:    blr301entry:302  %0 = call reassoc nnan <2 x double> @llvm.fma.v2f64(<2 x double> %a, <2 x double> <double -1.0, double -1.0>, <2 x double> %a)303  ret <2 x double> %0304}305 306define dso_local double @fma_combine_const(double %a, double %b) {307; CHECK-FAST-LABEL: fma_combine_const:308; CHECK-FAST:       # %bb.0: # %entry309; CHECK-FAST-NEXT:    addis 3, 2, .LCPI9_0@toc@ha310; CHECK-FAST-NEXT:    lfd 0, .LCPI9_0@toc@l(3)311; CHECK-FAST-NEXT:    xsmaddadp 2, 1, 0312; CHECK-FAST-NEXT:    fmr 1, 2313; CHECK-FAST-NEXT:    blr314;315; CHECK-FAST-NOVSX-LABEL: fma_combine_const:316; CHECK-FAST-NOVSX:       # %bb.0: # %entry317; CHECK-FAST-NOVSX-NEXT:    addis 3, 2, .LCPI9_0@toc@ha318; CHECK-FAST-NOVSX-NEXT:    lfd 0, .LCPI9_0@toc@l(3)319; CHECK-FAST-NOVSX-NEXT:    fmadd 1, 1, 0, 2320; CHECK-FAST-NOVSX-NEXT:    blr321;322; CHECK-LABEL: fma_combine_const:323; CHECK:       # %bb.0: # %entry324; CHECK-NEXT:    addis 3, 2, .LCPI9_0@toc@ha325; CHECK-NEXT:    lfd 0, .LCPI9_0@toc@l(3)326; CHECK-NEXT:    xsmaddadp 2, 1, 0327; CHECK-NEXT:    fmr 1, 2328; CHECK-NEXT:    blr329entry:330  %0 = fmul reassoc double %a, 1.1331  %1 = call contract reassoc double @llvm.fma.f64(double %0, double 2.1, double %b)332  ret double %1333}334 335declare double @llvm.fma.f64(double, double, double) nounwind readnone336declare <2 x double> @llvm.fma.v2f64(<2 x double>, <2 x double>, <2 x double>) nounwind readnone337