271 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \3; RUN: -mcpu=pwr7 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \4; RUN: -O0 --data-sections < %s | FileCheck %s --check-prefix LE-LINUX-P75; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \6; RUN: -mcpu=pwr8 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \7; RUN: -O0 --data-sections < %s | FileCheck %s --check-prefix LE-LINUX-P88; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \9; RUN: -mcpu=pwr7 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \10; RUN: -O0 --data-sections < %s | FileCheck %s --check-prefix BE-LINUX-P711; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \12; RUN: -mcpu=pwr8 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \13; RUN: -O0 --data-sections < %s | FileCheck %s --check-prefix BE-LINUX-P814; RUN: llc -verify-machineinstrs -mtriple=powerpc64-ibm-aix \15; RUN: -mcpu=pwr7 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \16; RUN: -O0 --data-sections < %s | FileCheck %s --check-prefix AIX64-P717; RUN: llc -verify-machineinstrs -mtriple=powerpc64-ibm-aix \18; RUN: -mcpu=pwr8 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \19; RUN: -O0 --data-sections < %s | FileCheck %s --check-prefix AIX64-P820; RUN: llc -verify-machineinstrs -mtriple=powerpc-ibm-aix \21; RUN: -mcpu=pwr7 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \22; RUN: -O0 --data-sections < %s | FileCheck %s --check-prefix AIX32-P723; RUN: llc -verify-machineinstrs -mtriple=powerpc-ibm-aix \24; RUN: -mcpu=pwr8 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \25; RUN: -O0 --data-sections < %s | FileCheck %s --check-prefix AIX32-P826 27;; Note that the above run lines all use -O0 because this causes the spill that28;; exposed the issue in the first place. Higher opt levels will remove the spills29;; and as a result will not expose the issue.30 31define dso_local void @caller() #0 {32; LE-LINUX-P7-LABEL: caller:33; LE-LINUX-P7: # %bb.0: # %entry34; LE-LINUX-P7-NEXT: mflr r035; LE-LINUX-P7-NEXT: stdu r1, -112(r1)36; LE-LINUX-P7-NEXT: std r0, 128(r1)37; LE-LINUX-P7-NEXT: addis r3, r2, .LCPI0_1@toc@ha38; LE-LINUX-P7-NEXT: lfs f1, .LCPI0_1@toc@l(r3)39; LE-LINUX-P7-NEXT: bl callee40; LE-LINUX-P7-NEXT: nop41; LE-LINUX-P7-NEXT: stfs f1, 100(r1) # 4-byte Folded Spill42; LE-LINUX-P7-NEXT: addis r3, r2, .LCPI0_1@toc@ha43; LE-LINUX-P7-NEXT: lfs f1, .LCPI0_1@toc@l(r3)44; LE-LINUX-P7-NEXT: bl callee45; LE-LINUX-P7-NEXT: nop46; LE-LINUX-P7-NEXT: fmr f2, f147; LE-LINUX-P7-NEXT: lfs f1, 100(r1) # 4-byte Folded Reload48; LE-LINUX-P7-NEXT: addis r3, r2, .LCPI0_0@toc@ha49; LE-LINUX-P7-NEXT: lfs f0, .LCPI0_0@toc@l(r3)50; LE-LINUX-P7-NEXT: fmuls f0, f0, f251; LE-LINUX-P7-NEXT: stfs f1, 104(r1)52; LE-LINUX-P7-NEXT: stfs f0, 108(r1)53; LE-LINUX-P7-NEXT: addi r1, r1, 11254; LE-LINUX-P7-NEXT: ld r0, 16(r1)55; LE-LINUX-P7-NEXT: mtlr r056; LE-LINUX-P7-NEXT: blr57;58; LE-LINUX-P8-LABEL: caller:59; LE-LINUX-P8: # %bb.0: # %entry60; LE-LINUX-P8-NEXT: mflr r061; LE-LINUX-P8-NEXT: stdu r1, -64(r1)62; LE-LINUX-P8-NEXT: std r0, 80(r1)63; LE-LINUX-P8-NEXT: vspltisw v2, 164; LE-LINUX-P8-NEXT: xxlor vs0, v2, v265; LE-LINUX-P8-NEXT: xvcvsxwdp vs0, vs066; LE-LINUX-P8-NEXT: fmr f1, f067; LE-LINUX-P8-NEXT: li r3, 4868; LE-LINUX-P8-NEXT: stxsspx f1, r1, r3 # 4-byte Folded Spill69; LE-LINUX-P8-NEXT: bl callee70; LE-LINUX-P8-NEXT: nop71; LE-LINUX-P8-NEXT: fmr f0, f172; LE-LINUX-P8-NEXT: li r3, 4873; LE-LINUX-P8-NEXT: lxsspx f1, r1, r3 # 4-byte Folded Reload74; LE-LINUX-P8-NEXT: stfs f0, 52(r1) # 4-byte Folded Spill75; LE-LINUX-P8-NEXT: bl callee76; LE-LINUX-P8-NEXT: nop77; LE-LINUX-P8-NEXT: fmr f0, f178; LE-LINUX-P8-NEXT: lfs f1, 52(r1) # 4-byte Folded Reload79; LE-LINUX-P8-NEXT: xsaddsp f0, f0, f080; LE-LINUX-P8-NEXT: stfs f1, 56(r1)81; LE-LINUX-P8-NEXT: stfs f0, 60(r1)82; LE-LINUX-P8-NEXT: addi r1, r1, 6483; LE-LINUX-P8-NEXT: ld r0, 16(r1)84; LE-LINUX-P8-NEXT: mtlr r085; LE-LINUX-P8-NEXT: blr86;87; BE-LINUX-P7-LABEL: caller:88; BE-LINUX-P7: # %bb.0: # %entry89; BE-LINUX-P7-NEXT: mflr r090; BE-LINUX-P7-NEXT: stdu r1, -128(r1)91; BE-LINUX-P7-NEXT: std r0, 144(r1)92; BE-LINUX-P7-NEXT: addis r3, r2, .LCPI0_1@toc@ha93; BE-LINUX-P7-NEXT: lfs f1, .LCPI0_1@toc@l(r3)94; BE-LINUX-P7-NEXT: bl callee95; BE-LINUX-P7-NEXT: nop96; BE-LINUX-P7-NEXT: stfs f1, 116(r1) # 4-byte Folded Spill97; BE-LINUX-P7-NEXT: addis r3, r2, .LCPI0_1@toc@ha98; BE-LINUX-P7-NEXT: lfs f1, .LCPI0_1@toc@l(r3)99; BE-LINUX-P7-NEXT: bl callee100; BE-LINUX-P7-NEXT: nop101; BE-LINUX-P7-NEXT: fmr f2, f1102; BE-LINUX-P7-NEXT: lfs f1, 116(r1) # 4-byte Folded Reload103; BE-LINUX-P7-NEXT: addis r3, r2, .LCPI0_0@toc@ha104; BE-LINUX-P7-NEXT: lfs f0, .LCPI0_0@toc@l(r3)105; BE-LINUX-P7-NEXT: fmuls f0, f0, f2106; BE-LINUX-P7-NEXT: stfs f1, 120(r1)107; BE-LINUX-P7-NEXT: stfs f0, 124(r1)108; BE-LINUX-P7-NEXT: addi r1, r1, 128109; BE-LINUX-P7-NEXT: ld r0, 16(r1)110; BE-LINUX-P7-NEXT: mtlr r0111; BE-LINUX-P7-NEXT: blr112;113; BE-LINUX-P8-LABEL: caller:114; BE-LINUX-P8: # %bb.0: # %entry115; BE-LINUX-P8-NEXT: mflr r0116; BE-LINUX-P8-NEXT: stdu r1, -144(r1)117; BE-LINUX-P8-NEXT: std r0, 160(r1)118; BE-LINUX-P8-NEXT: vspltisw v2, 1119; BE-LINUX-P8-NEXT: xxlor vs0, v2, v2120; BE-LINUX-P8-NEXT: xvcvsxwdp vs0, vs0121; BE-LINUX-P8-NEXT: fmr f1, f0122; BE-LINUX-P8-NEXT: li r3, 128123; BE-LINUX-P8-NEXT: stxsspx f1, r1, r3 # 4-byte Folded Spill124; BE-LINUX-P8-NEXT: bl callee125; BE-LINUX-P8-NEXT: nop126; BE-LINUX-P8-NEXT: fmr f0, f1127; BE-LINUX-P8-NEXT: li r3, 128128; BE-LINUX-P8-NEXT: lxsspx f1, r1, r3 # 4-byte Folded Reload129; BE-LINUX-P8-NEXT: stfs f0, 132(r1) # 4-byte Folded Spill130; BE-LINUX-P8-NEXT: bl callee131; BE-LINUX-P8-NEXT: nop132; BE-LINUX-P8-NEXT: fmr f0, f1133; BE-LINUX-P8-NEXT: lfs f1, 132(r1) # 4-byte Folded Reload134; BE-LINUX-P8-NEXT: xsaddsp f0, f0, f0135; BE-LINUX-P8-NEXT: stfs f1, 136(r1)136; BE-LINUX-P8-NEXT: stfs f0, 140(r1)137; BE-LINUX-P8-NEXT: addi r1, r1, 144138; BE-LINUX-P8-NEXT: ld r0, 16(r1)139; BE-LINUX-P8-NEXT: mtlr r0140; BE-LINUX-P8-NEXT: blr141;142; AIX64-P7-LABEL: caller:143; AIX64-P7: # %bb.0: # %entry144; AIX64-P7-NEXT: mflr r0145; AIX64-P7-NEXT: stdu r1, -128(r1)146; AIX64-P7-NEXT: std r0, 144(r1)147; AIX64-P7-NEXT: vspltisw v2, 1148; AIX64-P7-NEXT: xxlor vs0, v2, v2149; AIX64-P7-NEXT: xvcvsxwdp vs0, vs0150; AIX64-P7-NEXT: fmr f1, f0151; AIX64-P7-NEXT: bl .callee[PR]152; AIX64-P7-NEXT: nop153; AIX64-P7-NEXT: stfs f1, 116(r1) # 4-byte Folded Spill154; AIX64-P7-NEXT: vspltisw v2, 1155; AIX64-P7-NEXT: xxlor vs0, v2, v2156; AIX64-P7-NEXT: xvcvsxwdp vs0, vs0157; AIX64-P7-NEXT: fmr f1, f0158; AIX64-P7-NEXT: bl .callee[PR]159; AIX64-P7-NEXT: nop160; AIX64-P7-NEXT: fmr f2, f1161; AIX64-P7-NEXT: lfs f1, 116(r1) # 4-byte Folded Reload162; AIX64-P7-NEXT: ld r3, L..C0(r2) # %const.0163; AIX64-P7-NEXT: lfs f0, 0(r3)164; AIX64-P7-NEXT: fmuls f0, f0, f2165; AIX64-P7-NEXT: stfs f1, 120(r1)166; AIX64-P7-NEXT: stfs f0, 124(r1)167; AIX64-P7-NEXT: addi r1, r1, 128168; AIX64-P7-NEXT: ld r0, 16(r1)169; AIX64-P7-NEXT: mtlr r0170; AIX64-P7-NEXT: blr171;172; AIX64-P8-LABEL: caller:173; AIX64-P8: # %bb.0: # %entry174; AIX64-P8-NEXT: mflr r0175; AIX64-P8-NEXT: stdu r1, -144(r1)176; AIX64-P8-NEXT: std r0, 160(r1)177; AIX64-P8-NEXT: vspltisw v2, 1178; AIX64-P8-NEXT: xxlor vs0, v2, v2179; AIX64-P8-NEXT: xvcvsxwdp vs0, vs0180; AIX64-P8-NEXT: fmr f1, f0181; AIX64-P8-NEXT: li r3, 128182; AIX64-P8-NEXT: stxsspx f1, r1, r3 # 4-byte Folded Spill183; AIX64-P8-NEXT: bl .callee[PR]184; AIX64-P8-NEXT: nop185; AIX64-P8-NEXT: fmr f0, f1186; AIX64-P8-NEXT: li r3, 128187; AIX64-P8-NEXT: lxsspx f1, r1, r3 # 4-byte Folded Reload188; AIX64-P8-NEXT: stfs f0, 132(r1) # 4-byte Folded Spill189; AIX64-P8-NEXT: bl .callee[PR]190; AIX64-P8-NEXT: nop191; AIX64-P8-NEXT: fmr f0, f1192; AIX64-P8-NEXT: lfs f1, 132(r1) # 4-byte Folded Reload193; AIX64-P8-NEXT: xsaddsp f0, f0, f0194; AIX64-P8-NEXT: stfs f1, 136(r1)195; AIX64-P8-NEXT: stfs f0, 140(r1)196; AIX64-P8-NEXT: addi r1, r1, 144197; AIX64-P8-NEXT: ld r0, 16(r1)198; AIX64-P8-NEXT: mtlr r0199; AIX64-P8-NEXT: blr200;201; AIX32-P7-LABEL: caller:202; AIX32-P7: # %bb.0: # %entry203; AIX32-P7-NEXT: mflr r0204; AIX32-P7-NEXT: stwu r1, -80(r1)205; AIX32-P7-NEXT: stw r0, 88(r1)206; AIX32-P7-NEXT: vspltisw v2, 1207; AIX32-P7-NEXT: xxlor vs0, v2, v2208; AIX32-P7-NEXT: xvcvsxwdp vs0, vs0209; AIX32-P7-NEXT: fmr f1, f0210; AIX32-P7-NEXT: stfs f1, 64(r1) # 4-byte Folded Spill211; AIX32-P7-NEXT: bl .callee[PR]212; AIX32-P7-NEXT: nop213; AIX32-P7-NEXT: fmr f0, f1214; AIX32-P7-NEXT: lfs f1, 64(r1) # 4-byte Folded Reload215; AIX32-P7-NEXT: stfs f0, 68(r1) # 4-byte Folded Spill216; AIX32-P7-NEXT: bl .callee[PR]217; AIX32-P7-NEXT: nop218; AIX32-P7-NEXT: fmr f0, f1219; AIX32-P7-NEXT: lfs f1, 68(r1) # 4-byte Folded Reload220; AIX32-P7-NEXT: fadds f0, f0, f0221; AIX32-P7-NEXT: stfs f1, 72(r1)222; AIX32-P7-NEXT: stfs f0, 76(r1)223; AIX32-P7-NEXT: addi r1, r1, 80224; AIX32-P7-NEXT: lwz r0, 8(r1)225; AIX32-P7-NEXT: mtlr r0226; AIX32-P7-NEXT: blr227;228; AIX32-P8-LABEL: caller:229; AIX32-P8: # %bb.0: # %entry230; AIX32-P8-NEXT: mflr r0231; AIX32-P8-NEXT: stwu r1, -80(r1)232; AIX32-P8-NEXT: stw r0, 88(r1)233; AIX32-P8-NEXT: vspltisw v2, 1234; AIX32-P8-NEXT: xxlor vs0, v2, v2235; AIX32-P8-NEXT: xvcvsxwdp vs0, vs0236; AIX32-P8-NEXT: fmr f1, f0237; AIX32-P8-NEXT: li r3, 64238; AIX32-P8-NEXT: stxsspx f1, r1, r3 # 4-byte Folded Spill239; AIX32-P8-NEXT: bl .callee[PR]240; AIX32-P8-NEXT: nop241; AIX32-P8-NEXT: fmr f0, f1242; AIX32-P8-NEXT: li r3, 64243; AIX32-P8-NEXT: lxsspx f1, r1, r3 # 4-byte Folded Reload244; AIX32-P8-NEXT: stfs f0, 68(r1) # 4-byte Folded Spill245; AIX32-P8-NEXT: bl .callee[PR]246; AIX32-P8-NEXT: nop247; AIX32-P8-NEXT: fmr f0, f1248; AIX32-P8-NEXT: lfs f1, 68(r1) # 4-byte Folded Reload249; AIX32-P8-NEXT: xsaddsp f0, f0, f0250; AIX32-P8-NEXT: stfs f1, 72(r1)251; AIX32-P8-NEXT: stfs f0, 76(r1)252; AIX32-P8-NEXT: addi r1, r1, 80253; AIX32-P8-NEXT: lwz r0, 8(r1)254; AIX32-P8-NEXT: mtlr r0255; AIX32-P8-NEXT: blr256entry:257 %com1 = alloca { float, float }, align 8258 %0 = call contract float @callee(float 1.000000e+00)259 %1 = call contract float @callee(float 1.000000e+00)260 %mult = fmul contract float 2.000000e+00, %1261 %addr0 = getelementptr inbounds { float, float }, ptr %com1, i32 0, i32 0262 store float %0, ptr %addr0, align 4263 %addr1 = getelementptr inbounds { float, float }, ptr %com1, i32 0, i32 1264 store float %mult, ptr %addr1, align 4265 ret void266}267 268declare float @callee(float) #0269 270attributes #0 = { nounwind }271