Index: lib/Target/PowerPC/PPCSubtarget.cpp =================================================================== --- lib/Target/PowerPC/PPCSubtarget.cpp +++ lib/Target/PowerPC/PPCSubtarget.cpp @@ -164,27 +164,8 @@ return false; } -// Embedded cores need aggressive scheduling (and some others also benefit). -static bool needsAggressiveScheduling(unsigned Directive) { - switch (Directive) { - default: return false; - case PPC::DIR_440: - case PPC::DIR_A2: - case PPC::DIR_E500mc: - case PPC::DIR_E5500: - case PPC::DIR_PWR7: - case PPC::DIR_PWR8: - // FIXME: Same as P8 until POWER9 scheduling info is available - case PPC::DIR_PWR9: - return true; - } -} - bool PPCSubtarget::enableMachineScheduler() const { - // Enable MI scheduling for the embedded cores. - // FIXME: Enable this for all cores (some additional modeling - // may be necessary). - return needsAggressiveScheduling(DarwinDirective); + return true; } // This overrides the PostRAScheduler bit in the SchedModel for each CPU. @@ -202,19 +183,17 @@ void PPCSubtarget::overrideSchedPolicy(MachineSchedPolicy &Policy, unsigned NumRegionInstrs) const { - if (needsAggressiveScheduling(DarwinDirective)) { - Policy.OnlyTopDown = false; - Policy.OnlyBottomUp = false; - } - + // The GenericScheduler that we use defaults to scheduling bottom up only. + // We want to schedule from both the top and the bottom and so we set + // OnlyBottomUp to false. + Policy.OnlyBottomUp = false; // Spilling is generally expensive on all PPC cores, so always enable // register-pressure tracking. Policy.ShouldTrackPressure = true; } bool PPCSubtarget::useAA() const { - // Use AA during code generation for the embedded cores. - return needsAggressiveScheduling(DarwinDirective); + return true; } bool PPCSubtarget::enableSubRegLiveness() const { Index: test/CodeGen/PowerPC/2008-10-28-f128-i32.ll =================================================================== --- test/CodeGen/PowerPC/2008-10-28-f128-i32.ll +++ test/CodeGen/PowerPC/2008-10-28-f128-i32.ll @@ -1,3 +1,4 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -verify-machineinstrs < %s -mtriple=ppc32-- -o - | FileCheck %s define i64 @__fixunstfdi(ppc_fp128 %a) nounwind readnone { @@ -6,12 +7,10 @@ ; CHECK-NEXT: mflr 0 ; CHECK-NEXT: stw 0, 4(1) ; CHECK-NEXT: stwu 1, -464(1) -; CHECK-NEXT: lis 3, .LCPI0_0@ha -; CHECK-NEXT: stfd 27, 424(1) # 8-byte Folded Spill +; CHECK-NEXT: mfcr 12 ; CHECK-NEXT: stw 29, 412(1) # 4-byte Folded Spill ; CHECK-NEXT: stw 30, 416(1) # 4-byte Folded Spill -; CHECK-NEXT: lfs 27, .LCPI0_0@l(3) -; CHECK-NEXT: mfcr 12 +; CHECK-NEXT: stfd 27, 424(1) # 8-byte Folded Spill ; CHECK-NEXT: stfd 28, 432(1) # 8-byte Folded Spill ; CHECK-NEXT: stfd 29, 440(1) # 8-byte Folded Spill ; CHECK-NEXT: stfd 30, 448(1) # 8-byte Folded Spill @@ -19,45 +18,45 @@ ; CHECK-NEXT: stw 12, 408(1) ; CHECK-NEXT: stfd 2, 376(1) ; CHECK-NEXT: stfd 1, 384(1) -; CHECK-NEXT: nop +; CHECK-NEXT: lis 3, .LCPI0_0@ha +; CHECK-NEXT: lwz 4, 380(1) +; CHECK-NEXT: lfs 27, .LCPI0_0@l(3) +; CHECK-NEXT: stw 4, 396(1) ; CHECK-NEXT: fcmpu 0, 2, 27 -; CHECK-NEXT: lwz 3, 380(1) -; CHECK-NEXT: lwz 4, 376(1) -; CHECK-NEXT: lwz 5, 388(1) -; CHECK-NEXT: lwz 6, 384(1) ; CHECK-NEXT: fcmpu 1, 1, 27 +; CHECK-NEXT: lwz 4, 376(1) ; CHECK-NEXT: crand 20, 6, 0 ; CHECK-NEXT: cror 20, 4, 20 -; CHECK-NEXT: stw 3, 396(1) ; CHECK-NEXT: stw 4, 392(1) -; CHECK-NEXT: stw 5, 404(1) -; CHECK-NEXT: stw 6, 400(1) +; CHECK-NEXT: lwz 4, 388(1) +; CHECK-NEXT: stw 4, 404(1) +; CHECK-NEXT: lwz 29, 384(1) +; CHECK-NEXT: stw 29, 400(1) ; CHECK-NEXT: bc 4, 20, .LBB0_2 ; CHECK-NEXT: # %bb.1: # %bb5 ; CHECK-NEXT: li 3, 0 ; CHECK-NEXT: li 4, 0 ; CHECK-NEXT: b .LBB0_16 ; CHECK-NEXT: .LBB0_2: # %bb1 -; CHECK-NEXT: lfd 0, 392(1) -; CHECK-NEXT: lfd 1, 400(1) +; CHECK-NEXT: lfd 0, 400(1) +; CHECK-NEXT: lfd 1, 392(1) ; CHECK-NEXT: li 29, 0 ; CHECK-NEXT: lis 3, 15856 -; CHECK-NEXT: stfd 1, 304(1) -; CHECK-NEXT: stfd 0, 296(1) -; CHECK-NEXT: nop -; CHECK-NEXT: nop -; CHECK-NEXT: lwz 4, 308(1) -; CHECK-NEXT: lwz 5, 304(1) -; CHECK-NEXT: lwz 6, 300(1) -; CHECK-NEXT: lwz 7, 296(1) +; CHECK-NEXT: stfd 0, 304(1) +; CHECK-NEXT: stfd 1, 296(1) ; CHECK-NEXT: stw 29, 340(1) ; CHECK-NEXT: stw 3, 336(1) ; CHECK-NEXT: stw 29, 332(1) ; CHECK-NEXT: stw 29, 328(1) -; CHECK-NEXT: stw 4, 324(1) -; CHECK-NEXT: stw 5, 320(1) -; CHECK-NEXT: stw 6, 316(1) -; CHECK-NEXT: stw 7, 312(1) +; CHECK-NEXT: lwz 3, 308(1) +; CHECK-NEXT: stw 3, 324(1) +; CHECK-NEXT: lwz 3, 304(1) +; CHECK-NEXT: stw 3, 320(1) +; CHECK-NEXT: lwz 3, 300(1) +; CHECK-NEXT: stw 3, 316(1) +; CHECK-NEXT: lwz 3, 296(1) +; CHECK-NEXT: stw 3, 312(1) +; CHECK-NEXT: nop ; CHECK-NEXT: nop ; CHECK-NEXT: lfd 31, 320(1) ; CHECK-NEXT: lfd 30, 312(1) @@ -66,81 +65,79 @@ ; CHECK-NEXT: fmr 1, 31 ; CHECK-NEXT: fmr 2, 30 ; CHECK-NEXT: bl __gcc_qmul@PLT +; CHECK-NEXT: lis 3, 16864 ; CHECK-NEXT: stfd 1, 280(1) ; CHECK-NEXT: stfd 2, 288(1) -; CHECK-NEXT: lis 3, .LCPI0_1@ha +; CHECK-NEXT: stw 29, 372(1) ; CHECK-NEXT: fmr 29, 1 ; CHECK-NEXT: fmr 28, 2 -; CHECK-NEXT: fcmpu 0, 2, 27 -; CHECK-NEXT: lwz 4, 284(1) -; CHECK-NEXT: lwz 5, 280(1) -; CHECK-NEXT: lwz 6, 292(1) -; CHECK-NEXT: lwz 7, 288(1) -; CHECK-NEXT: lfs 0, .LCPI0_1@l(3) -; CHECK-NEXT: lis 3, 16864 -; CHECK-NEXT: stw 29, 372(1) ; CHECK-NEXT: stw 3, 368(1) ; CHECK-NEXT: stw 29, 364(1) ; CHECK-NEXT: stw 29, 360(1) -; CHECK-NEXT: stw 4, 356(1) -; CHECK-NEXT: stw 5, 352(1) -; CHECK-NEXT: stw 6, 348(1) -; CHECK-NEXT: stw 7, 344(1) -; CHECK-NEXT: fcmpu 1, 1, 0 +; CHECK-NEXT: lwz 3, 284(1) +; CHECK-NEXT: stw 3, 356(1) +; CHECK-NEXT: lwz 3, 280(1) +; CHECK-NEXT: stw 3, 352(1) +; CHECK-NEXT: lwz 3, 292(1) +; CHECK-NEXT: stw 3, 348(1) +; CHECK-NEXT: lwz 3, 288(1) +; CHECK-NEXT: stw 3, 344(1) ; CHECK-NEXT: lfd 3, 368(1) ; CHECK-NEXT: lfd 4, 360(1) ; CHECK-NEXT: lfd 1, 352(1) ; CHECK-NEXT: lfd 2, 344(1) -; CHECK-NEXT: crandc 20, 6, 0 -; CHECK-NEXT: cror 8, 5, 20 ; CHECK-NEXT: bl __gcc_qsub@PLT ; CHECK-NEXT: mffs 0 ; CHECK-NEXT: mtfsb1 31 +; CHECK-NEXT: lis 3, .LCPI0_1@ha +; CHECK-NEXT: fcmpu 0, 28, 27 ; CHECK-NEXT: mtfsb0 30 ; CHECK-NEXT: fadd 1, 2, 1 ; CHECK-NEXT: mtfsf 1, 0 -; CHECK-NEXT: mffs 0 -; CHECK-NEXT: mtfsb1 31 -; CHECK-NEXT: mtfsb0 30 -; CHECK-NEXT: fadd 2, 28, 29 -; CHECK-NEXT: mtfsf 1, 0 ; CHECK-NEXT: fctiwz 0, 1 -; CHECK-NEXT: fctiwz 1, 2 ; CHECK-NEXT: stfd 0, 160(1) -; CHECK-NEXT: stfd 1, 152(1) -; CHECK-NEXT: nop -; CHECK-NEXT: lwz 3, 164(1) +; CHECK-NEXT: mffs 1 +; CHECK-NEXT: mtfsb1 31 +; CHECK-NEXT: mtfsb0 30 +; CHECK-NEXT: fadd 13, 28, 29 +; CHECK-NEXT: mtfsf 1, 1 +; CHECK-NEXT: lfs 1, .LCPI0_1@l(3) +; CHECK-NEXT: fctiwz 0, 13 +; CHECK-NEXT: stfd 0, 152(1) +; CHECK-NEXT: fcmpu 1, 29, 1 +; CHECK-NEXT: crandc 20, 6, 0 +; CHECK-NEXT: lwz 12, 164(1) ; CHECK-NEXT: lwz 4, 156(1) -; CHECK-NEXT: addis 3, 3, -32768 -; CHECK-NEXT: bc 12, 8, .LBB0_4 +; CHECK-NEXT: cror 20, 5, 20 +; CHECK-NEXT: addis 3, 12, -32768 +; CHECK-NEXT: bc 12, 20, .LBB0_4 ; CHECK-NEXT: # %bb.3: # %bb1 ; CHECK-NEXT: ori 30, 4, 0 ; CHECK-NEXT: b .LBB0_5 ; CHECK-NEXT: .LBB0_4: # %bb1 ; CHECK-NEXT: addi 30, 3, 0 ; CHECK-NEXT: .LBB0_5: # %bb1 -; CHECK-NEXT: mr 3, 30 ; CHECK-NEXT: li 4, 0 +; CHECK-NEXT: mr 3, 30 ; CHECK-NEXT: bl __floatditf@PLT +; CHECK-NEXT: lis 3, 17392 ; CHECK-NEXT: stfd 1, 208(1) ; CHECK-NEXT: stfd 2, 200(1) -; CHECK-NEXT: lis 3, 17392 -; CHECK-NEXT: fmr 28, 1 -; CHECK-NEXT: fmr 29, 2 -; CHECK-NEXT: cmpwi 2, 30, 0 -; CHECK-NEXT: lwz 4, 212(1) -; CHECK-NEXT: lwz 5, 208(1) -; CHECK-NEXT: lwz 6, 204(1) -; CHECK-NEXT: lwz 7, 200(1) ; CHECK-NEXT: stw 29, 244(1) +; CHECK-NEXT: fmr 29, 1 +; CHECK-NEXT: fmr 28, 2 ; CHECK-NEXT: stw 3, 240(1) ; CHECK-NEXT: stw 29, 236(1) ; CHECK-NEXT: stw 29, 232(1) -; CHECK-NEXT: stw 4, 228(1) -; CHECK-NEXT: stw 5, 224(1) -; CHECK-NEXT: stw 6, 220(1) -; CHECK-NEXT: stw 7, 216(1) -; CHECK-NEXT: nop +; CHECK-NEXT: cmpwi 2, 30, 0 +; CHECK-NEXT: lwz 3, 212(1) +; CHECK-NEXT: stw 3, 228(1) +; CHECK-NEXT: lwz 3, 208(1) +; CHECK-NEXT: stw 3, 224(1) +; CHECK-NEXT: lwz 3, 204(1) +; CHECK-NEXT: stw 3, 220(1) +; CHECK-NEXT: lwz 3, 200(1) +; CHECK-NEXT: stw 3, 216(1) ; CHECK-NEXT: lfd 3, 240(1) ; CHECK-NEXT: lfd 4, 232(1) ; CHECK-NEXT: lfd 1, 224(1) @@ -148,26 +145,25 @@ ; CHECK-NEXT: bl __gcc_qadd@PLT ; CHECK-NEXT: blt 2, .LBB0_7 ; CHECK-NEXT: # %bb.6: # %bb1 -; CHECK-NEXT: fmr 1, 28 +; CHECK-NEXT: fmr 2, 28 ; CHECK-NEXT: .LBB0_7: # %bb1 -; CHECK-NEXT: stfd 1, 184(1) ; CHECK-NEXT: blt 2, .LBB0_9 ; CHECK-NEXT: # %bb.8: # %bb1 -; CHECK-NEXT: fmr 2, 29 +; CHECK-NEXT: fmr 1, 29 ; CHECK-NEXT: .LBB0_9: # %bb1 +; CHECK-NEXT: stfd 1, 184(1) ; CHECK-NEXT: stfd 2, 192(1) ; CHECK-NEXT: fmr 1, 31 ; CHECK-NEXT: fmr 2, 30 ; CHECK-NEXT: nop -; CHECK-NEXT: nop ; CHECK-NEXT: lwz 3, 188(1) -; CHECK-NEXT: lwz 4, 184(1) -; CHECK-NEXT: lwz 5, 196(1) -; CHECK-NEXT: lwz 6, 192(1) ; CHECK-NEXT: stw 3, 260(1) -; CHECK-NEXT: stw 4, 256(1) -; CHECK-NEXT: stw 5, 252(1) -; CHECK-NEXT: stw 6, 248(1) +; CHECK-NEXT: lwz 3, 184(1) +; CHECK-NEXT: stw 3, 256(1) +; CHECK-NEXT: lwz 3, 196(1) +; CHECK-NEXT: stw 3, 252(1) +; CHECK-NEXT: lwz 3, 192(1) +; CHECK-NEXT: stw 3, 248(1) ; CHECK-NEXT: lfd 3, 256(1) ; CHECK-NEXT: lfd 4, 248(1) ; CHECK-NEXT: bl __gcc_qsub@PLT @@ -176,68 +172,66 @@ ; CHECK-NEXT: fcmpu 1, 1, 27 ; CHECK-NEXT: fcmpu 0, 2, 27 ; CHECK-NEXT: lwz 3, 180(1) -; CHECK-NEXT: lwz 4, 176(1) -; CHECK-NEXT: lwz 5, 172(1) -; CHECK-NEXT: lwz 6, 168(1) ; CHECK-NEXT: crandc 20, 6, 0 ; CHECK-NEXT: cror 21, 5, 7 ; CHECK-NEXT: cror 20, 21, 20 ; CHECK-NEXT: stw 3, 268(1) -; CHECK-NEXT: stw 4, 264(1) -; CHECK-NEXT: stw 5, 276(1) -; CHECK-NEXT: stw 6, 272(1) +; CHECK-NEXT: lwz 3, 176(1) +; CHECK-NEXT: stw 3, 264(1) +; CHECK-NEXT: lwz 3, 172(1) +; CHECK-NEXT: stw 3, 276(1) +; CHECK-NEXT: lwz 3, 168(1) +; CHECK-NEXT: stw 3, 272(1) ; CHECK-NEXT: lfd 30, 264(1) ; CHECK-NEXT: lfd 31, 272(1) ; CHECK-NEXT: bc 12, 20, .LBB0_13 ; CHECK-NEXT: # %bb.10: # %bb2 -; CHECK-NEXT: fneg 29, 31 -; CHECK-NEXT: fneg 28, 30 +; CHECK-NEXT: fneg 28, 31 +; CHECK-NEXT: fneg 29, 30 ; CHECK-NEXT: li 29, 0 ; CHECK-NEXT: lis 3, 16864 -; CHECK-NEXT: stfd 29, 48(1) -; CHECK-NEXT: stfd 28, 40(1) -; CHECK-NEXT: nop -; CHECK-NEXT: lwz 4, 52(1) -; CHECK-NEXT: lwz 5, 48(1) -; CHECK-NEXT: lwz 6, 44(1) -; CHECK-NEXT: lwz 7, 40(1) +; CHECK-NEXT: stfd 28, 48(1) +; CHECK-NEXT: stfd 29, 40(1) ; CHECK-NEXT: stw 29, 84(1) ; CHECK-NEXT: stw 3, 80(1) ; CHECK-NEXT: stw 29, 76(1) ; CHECK-NEXT: stw 29, 72(1) -; CHECK-NEXT: stw 4, 68(1) -; CHECK-NEXT: stw 5, 64(1) -; CHECK-NEXT: stw 6, 60(1) -; CHECK-NEXT: stw 7, 56(1) ; CHECK-NEXT: nop +; CHECK-NEXT: lwz 3, 52(1) +; CHECK-NEXT: stw 3, 68(1) +; CHECK-NEXT: lwz 3, 48(1) +; CHECK-NEXT: stw 3, 64(1) +; CHECK-NEXT: lwz 3, 44(1) +; CHECK-NEXT: stw 3, 60(1) +; CHECK-NEXT: lwz 3, 40(1) +; CHECK-NEXT: stw 3, 56(1) ; CHECK-NEXT: lfd 3, 80(1) ; CHECK-NEXT: lfd 4, 72(1) ; CHECK-NEXT: lfd 1, 64(1) ; CHECK-NEXT: lfd 2, 56(1) ; CHECK-NEXT: bl __gcc_qsub@PLT -; CHECK-NEXT: lis 3, .LCPI0_2@ha -; CHECK-NEXT: lis 4, .LCPI0_3@ha -; CHECK-NEXT: lfs 0, .LCPI0_2@l(3) -; CHECK-NEXT: mffs 11 +; CHECK-NEXT: mffs 0 ; CHECK-NEXT: mtfsb1 31 -; CHECK-NEXT: lfs 3, .LCPI0_3@l(4) +; CHECK-NEXT: lis 3, .LCPI0_2@ha +; CHECK-NEXT: lfs 11, .LCPI0_2@l(3) +; CHECK-NEXT: lis 3, .LCPI0_3@ha ; CHECK-NEXT: mtfsb0 30 -; CHECK-NEXT: fcmpu 0, 30, 0 -; CHECK-NEXT: fcmpu 1, 31, 3 +; CHECK-NEXT: lfs 13, .LCPI0_3@l(3) ; CHECK-NEXT: fadd 1, 2, 1 +; CHECK-NEXT: mtfsf 1, 0 +; CHECK-NEXT: fcmpu 0, 30, 11 +; CHECK-NEXT: fctiwz 0, 1 +; CHECK-NEXT: fcmpu 1, 31, 13 +; CHECK-NEXT: mffs 10 +; CHECK-NEXT: stfd 0, 32(1) ; CHECK-NEXT: crandc 20, 6, 1 -; CHECK-NEXT: mtfsf 1, 11 ; CHECK-NEXT: cror 20, 4, 20 -; CHECK-NEXT: mffs 0 ; CHECK-NEXT: mtfsb1 31 ; CHECK-NEXT: mtfsb0 30 -; CHECK-NEXT: fadd 12, 28, 29 -; CHECK-NEXT: mtfsf 1, 0 -; CHECK-NEXT: fctiwz 0, 1 -; CHECK-NEXT: fctiwz 13, 12 -; CHECK-NEXT: stfd 0, 32(1) -; CHECK-NEXT: stfd 13, 24(1) -; CHECK-NEXT: nop +; CHECK-NEXT: fadd 12, 29, 28 +; CHECK-NEXT: mtfsf 1, 10 +; CHECK-NEXT: fctiwz 2, 12 +; CHECK-NEXT: stfd 2, 24(1) ; CHECK-NEXT: lwz 3, 36(1) ; CHECK-NEXT: lwz 4, 28(1) ; CHECK-NEXT: addis 3, 3, -32768 @@ -250,51 +244,49 @@ ; CHECK-NEXT: subfe 3, 29, 30 ; CHECK-NEXT: b .LBB0_16 ; CHECK-NEXT: .LBB0_13: # %bb3 -; CHECK-NEXT: stfd 31, 112(1) -; CHECK-NEXT: stfd 30, 104(1) ; CHECK-NEXT: li 3, 0 ; CHECK-NEXT: lis 4, 16864 -; CHECK-NEXT: lwz 5, 116(1) -; CHECK-NEXT: lwz 6, 112(1) -; CHECK-NEXT: lwz 7, 108(1) -; CHECK-NEXT: lwz 8, 104(1) +; CHECK-NEXT: stfd 31, 112(1) +; CHECK-NEXT: stfd 30, 104(1) ; CHECK-NEXT: stw 3, 148(1) ; CHECK-NEXT: stw 4, 144(1) ; CHECK-NEXT: stw 3, 140(1) ; CHECK-NEXT: stw 3, 136(1) -; CHECK-NEXT: stw 5, 132(1) -; CHECK-NEXT: stw 6, 128(1) -; CHECK-NEXT: stw 7, 124(1) -; CHECK-NEXT: stw 8, 120(1) -; CHECK-NEXT: nop +; CHECK-NEXT: lwz 3, 116(1) +; CHECK-NEXT: stw 3, 132(1) +; CHECK-NEXT: lwz 3, 112(1) +; CHECK-NEXT: stw 3, 128(1) +; CHECK-NEXT: lwz 3, 108(1) +; CHECK-NEXT: stw 3, 124(1) +; CHECK-NEXT: lwz 3, 104(1) +; CHECK-NEXT: stw 3, 120(1) ; CHECK-NEXT: lfd 3, 144(1) ; CHECK-NEXT: lfd 4, 136(1) ; CHECK-NEXT: lfd 1, 128(1) ; CHECK-NEXT: lfd 2, 120(1) ; CHECK-NEXT: bl __gcc_qsub@PLT -; CHECK-NEXT: lis 3, .LCPI0_0@ha -; CHECK-NEXT: lis 4, .LCPI0_1@ha -; CHECK-NEXT: lfs 0, .LCPI0_0@l(3) -; CHECK-NEXT: mffs 11 +; CHECK-NEXT: mffs 0 ; CHECK-NEXT: mtfsb1 31 -; CHECK-NEXT: lfs 3, .LCPI0_1@l(4) +; CHECK-NEXT: lis 3, .LCPI0_0@ha +; CHECK-NEXT: lfs 11, .LCPI0_0@l(3) +; CHECK-NEXT: lis 3, .LCPI0_1@ha ; CHECK-NEXT: mtfsb0 30 -; CHECK-NEXT: fcmpu 0, 30, 0 -; CHECK-NEXT: fcmpu 1, 31, 3 +; CHECK-NEXT: lfs 13, .LCPI0_1@l(3) ; CHECK-NEXT: fadd 1, 2, 1 +; CHECK-NEXT: mtfsf 1, 0 +; CHECK-NEXT: fcmpu 0, 30, 11 +; CHECK-NEXT: fctiwz 0, 1 +; CHECK-NEXT: fcmpu 1, 31, 13 +; CHECK-NEXT: mffs 10 +; CHECK-NEXT: stfd 0, 96(1) ; CHECK-NEXT: crandc 20, 6, 0 -; CHECK-NEXT: mtfsf 1, 11 ; CHECK-NEXT: cror 20, 5, 20 -; CHECK-NEXT: mffs 0 ; CHECK-NEXT: mtfsb1 31 ; CHECK-NEXT: mtfsb0 30 ; CHECK-NEXT: fadd 12, 30, 31 -; CHECK-NEXT: mtfsf 1, 0 -; CHECK-NEXT: fctiwz 0, 1 -; CHECK-NEXT: fctiwz 13, 12 -; CHECK-NEXT: stfd 0, 96(1) -; CHECK-NEXT: stfd 13, 88(1) -; CHECK-NEXT: nop +; CHECK-NEXT: mtfsf 1, 10 +; CHECK-NEXT: fctiwz 2, 12 +; CHECK-NEXT: stfd 2, 88(1) ; CHECK-NEXT: lwz 3, 100(1) ; CHECK-NEXT: lwz 4, 92(1) ; CHECK-NEXT: addis 3, 3, -32768 Index: test/CodeGen/PowerPC/2011-12-05-NoSpillDupCR.ll =================================================================== --- test/CodeGen/PowerPC/2011-12-05-NoSpillDupCR.ll +++ test/CodeGen/PowerPC/2011-12-05-NoSpillDupCR.ll @@ -50,7 +50,7 @@ %2 = load float, float* %arrayidx.us, align 4 %arrayidx7.us = getelementptr inbounds [32000 x float], [32000 x float]* @a, i64 0, i64 %indvars.iv %3 = load float, float* %arrayidx7.us, align 4 - %add8.us = fadd float %3, %2 + %add8.us = tail call float asm "fadd $0, $1, $2", "=f,f,f,~{cr2}"(float %3, float %2) store float %add8.us, float* %arrayidx7.us, align 4 %indvars.iv.next = add i64 %indvars.iv, %1 %4 = trunc i64 %indvars.iv.next to i32 Index: test/CodeGen/PowerPC/coalesce-ext.ll =================================================================== --- test/CodeGen/PowerPC/coalesce-ext.ll +++ test/CodeGen/PowerPC/coalesce-ext.ll @@ -9,10 +9,10 @@ %F = ashr i64 %E, 32 ; CHECK: extsw [[EXT:r[0-9]+]], [[SUM]] store volatile i64 %F, i64 *%P2 - ; CHECK: std [[EXT]] + ; CHECK-DAG: std [[EXT]] store volatile i32 %D, i32* %P ; Reuse low bits of extended register, don't extend live range of SUM. - ; CHECK: stw [[EXT]] + ; CHECK-DAG: stw [[SUM]] %R = add i32 %D, %D ret i32 %R } Index: test/CodeGen/PowerPC/fp128-bitcast-after-operation.ll =================================================================== --- test/CodeGen/PowerPC/fp128-bitcast-after-operation.ll +++ test/CodeGen/PowerPC/fp128-bitcast-after-operation.ll @@ -113,7 +113,6 @@ ; PPC64-P8: blr ; PPC32: stfd 1, [[STACK:[0-9]+]](1) -; PPC32: nop ; PPC32: lwz [[HI:[0-9]+]], [[STACK]](1) ; PPC32: rlwinm [[FLIP_BIT:[0-9]+]], [[HI]], 0, 0, 0 ; PPC32-NOT: BARRIER Index: test/CodeGen/PowerPC/i1-to-double.ll =================================================================== --- test/CodeGen/PowerPC/i1-to-double.ll +++ test/CodeGen/PowerPC/i1-to-double.ll @@ -7,13 +7,12 @@ ; CHECK-LABEL: @test ; CHECK: andi. {{[0-9]+}}, 3, 1 -; CHECK-NEXT: addis 4, 4, .LCPI -; CHECK-NEXT: addis 5, 5, .LCPI -; CHECK-NEXT: bc 12, 1, [[TRUE:.LBB[0-9]+]] -; CHECK: ori 3, 4, 0 +; CHECK: addis {{[0-9]+}}, {{[0-9]+}}, .LCPI +; CHECK: addis {{[0-9]+}}, {{[0-9]+}}, .LCPI +; CHECK: bc 12, 1, [[TRUE:.LBB[0-9]+]] ; CHECK-NEXT: b [[SUCCESSOR:.LBB[0-9]+]] ; CHECK-NEXT: [[TRUE]] -; CHECK-NEXT: addi 3, 5, 0 +; CHECK-NEXT: addi 3, 4, 0 ; CHECK-NEXT: [[SUCCESSOR]] ; CHECK-NEXT: lfs 1, 0(3) ; CHECK-NEXT: blr Index: test/CodeGen/PowerPC/lsa.ll =================================================================== --- test/CodeGen/PowerPC/lsa.ll +++ test/CodeGen/PowerPC/lsa.ll @@ -23,8 +23,8 @@ ; CHECK: @foo ; CHECK-NOT: lwzx -; CHECK: lwz {{[0-9]+}}, 4([[REG:[0-9]+]]) -; CHECK: lwz {{[0-9]+}}, 0([[REG]]) +; CHECK: lwz {{[0-9]+}}, 0([[REG:[0-9]+]]) +; CHECK: lwz {{[0-9]+}}, 4([[REG]]) ; CHECK: blr %add = add nsw i32 %4, %3 Index: test/CodeGen/PowerPC/ppc32-vacopy.ll =================================================================== --- test/CodeGen/PowerPC/ppc32-vacopy.ll +++ test/CodeGen/PowerPC/ppc32-vacopy.ll @@ -19,6 +19,6 @@ ; CHECK: lwz [[REG1:[0-9]+]], {{.*}} ; CHECK: lwz [[REG2:[0-9]+]], {{.*}} ; CHECK: lwz [[REG3:[0-9]+]], {{.*}} -; CHECK: stw [[REG1]], {{.*}} -; CHECK: stw [[REG2]], {{.*}} -; CHECK: stw [[REG3]], {{.*}} +; CHECK-DAG: stw [[REG1]], {{.*}} +; CHECK-DAG: stw [[REG2]], {{.*}} +; CHECK-DAG: stw [[REG3]], {{.*}} Index: test/CodeGen/PowerPC/ppc64-gep-opt.ll =================================================================== --- test/CodeGen/PowerPC/ppc64-gep-opt.ll +++ test/CodeGen/PowerPC/ppc64-gep-opt.ll @@ -1,5 +1,4 @@ ; RUN: llc -verify-machineinstrs -O3 -mcpu=pwr7 < %s | FileCheck %s -; RUN: llc -verify-machineinstrs -O3 -print-after=codegenprepare -mcpu=ppc64 < %s >%t 2>&1 && FileCheck --check-prefix=CHECK-NoAA <%t %s ; RUN: llc -verify-machineinstrs -O3 -print-after=codegenprepare -mcpu=pwr7 < %s >%t 2>&1 && FileCheck --check-prefix=CHECK-UseAA <%t %s target datalayout = "E-m:e-i64:64-n32:64" target triple = "powerpc64-unknown-linux-gnu" @@ -29,18 +28,6 @@ ret void } -; CHECK-NoAA-LABEL: @test_GEP_CSE( -; CHECK-NoAA: [[PTR0:%[a-zA-Z0-9]+]] = ptrtoint [240 x %struct]* %string to i64 -; CHECK-NoAA: [[PTR1:%[a-zA-Z0-9]+]] = mul i64 %idxprom, 96 -; CHECK-NoAA: [[PTR2:%[a-zA-Z0-9]+]] = add i64 [[PTR0]], [[PTR1]] -; CHECK-NoAA: add i64 [[PTR2]], 23052 -; CHECK-NoAA: inttoptr -; CHECK-NoAA: if.then: -; CHECK-NoAA-NOT: ptrtoint -; CHECK-NoAA-NOT: mul -; CHECK-NoAA: add i64 [[PTR2]], 23048 -; CHECK-NoAA: inttoptr - ; CHECK-UseAA-LABEL: @test_GEP_CSE( ; CHECK-UseAA: [[PTR0:%[a-zA-Z0-9]+]] = bitcast [240 x %struct]* %string to i8* ; CHECK-UseAA: [[IDX:%[a-zA-Z0-9]+]] = mul i64 %idxprom, 96 @@ -80,14 +67,6 @@ ; CHECK-NOT: lwzu ; CHECK: blr -; CHECK-NoAA-LABEL: test_GEP_across_BB( -; CHECK-NoAA: add i64 [[TMP:%[a-zA-Z0-9]+]], 528 -; CHECK-NoAA: add i64 [[TMP]], 532 -; CHECK-NoAA: if.true: -; CHECK-NoAA: {{%sunk[a-zA-Z0-9]+}} = getelementptr i8, i8* {{.*}}, i64 532 -; CHECK-NoAA: exit: -; CHECK-NoAA: {{%sunk[a-zA-Z0-9]+}} = getelementptr i8, i8* {{.*}}, i64 528 - ; CHECK-UseAA-LABEL: test_GEP_across_BB( ; CHECK-UseAA: [[PTR0:%[a-zA-Z0-9]+]] = getelementptr ; CHECK-UseAA: getelementptr i8, i8* [[PTR0]], i64 528 @@ -112,10 +91,6 @@ %p = getelementptr [1024 x %struct.S], [1024 x %struct.S]* @struct_array, i64 0, i64 %idxprom, i32 1 ret double* %p } -; CHECK-NoAA-LABEL: @test-struct_1( -; CHECK-NoAA-NOT: getelementptr -; CHECK-NoAA: add i64 %{{[a-zA-Z0-9]+}}, 88 - ; CHECK-UseAA-LABEL: @test-struct_1( ; CHECK-UseAA: getelementptr i8, i8* %{{[a-zA-Z0-9]+}}, i64 88 @@ -134,10 +109,6 @@ %ptr2 = getelementptr %struct0, %struct0* %ptr, i64 0, i32 3, i64 %arrayidx, i32 1 ret %struct2* %ptr2 } -; CHECK-NoAA-LABEL: @test-struct_2( -; CHECK-NoAA-NOT: = getelementptr -; CHECK-NoAA: add i64 %{{[a-zA-Z0-9]+}}, -40 - ; CHECK-UseAA-LABEL: @test-struct_2( ; CHECK-UseAA: getelementptr i8, i8* %{{[a-zA-Z0-9]+}}, i64 -40 Index: test/CodeGen/PowerPC/save-cr-ppc32svr4.ll =================================================================== --- test/CodeGen/PowerPC/save-cr-ppc32svr4.ll +++ test/CodeGen/PowerPC/save-cr-ppc32svr4.ll @@ -3,12 +3,12 @@ ; Make sure that the CR register is saved correctly on PPC32/SVR4. ; CHECK-LABEL: fred: -; CHECK: stwu 1, -32(1) -; CHECK: stw 31, 28(1) +; CHECK: stwu 1, -48(1) +; CHECK: stw 31, 36(1) ; CHECK: mr 31, 1 -; CHECK: stw 30, 24(1) +; CHECK: stw 30, 32(1) ; CHECK: mfcr [[CR:[0-9]+]] -; CHECK: stw [[CR]], 20(31) +; CHECK: stw [[CR]], 28(31) target datalayout = "E-m:e-p:32:32-i64:64-n32" target triple = "powerpc-unknown-freebsd" @@ -16,7 +16,8 @@ ; Function Attrs: norecurse nounwind readnone sspstrong define i64 @fred(double %a0) local_unnamed_addr #0 { b1: - %v2 = fcmp olt double %a0, 0x43E0000000000000 + %a1 = tail call double asm "fadd $0, $1, $2", "=f,f,f,~{cr2}"(double %a0, double %a0) + %v2 = fcmp olt double %a1, 0x43E0000000000000 br i1 %v2, label %b3, label %b7 b3: ; preds = %b1 Index: test/CodeGen/PowerPC/save-crbp-ppc32svr4.ll =================================================================== --- test/CodeGen/PowerPC/save-crbp-ppc32svr4.ll +++ test/CodeGen/PowerPC/save-crbp-ppc32svr4.ll @@ -3,18 +3,18 @@ ; CHECK-LABEL: fred ; CHECK: stwux 1, 1, 0 ; Save R31..R29 via R0: -; CHECK: addic 0, 0, -4 +; CHECK: addic 0, 0, -12 ; CHECK: stwx 31, 0, 0 ; CHECK: addic 0, 0, -4 ; CHECK: stwx 30, 0, 0 ; CHECK: addic 0, 0, -4 ; CHECK: stwx 29, 0, 0 ; Set R29 back to the value of R0 from before the updates: -; CHECK: addic 29, 0, 12 +; CHECK: addic 29, 0, 20 ; Save CR through R12 using R29 as the stack pointer (aligned base pointer). ; CHECK: mfcr 12 -; CHECK: stw 28, -16(29) -; CHECK: stw 12, -20(29) +; CHECK: stw 28, -24(29) +; CHECK: stw 12, -28(29) target datalayout = "E-m:e-p:32:32-i64:64-n32" target triple = "powerpc-unknown-freebsd" @@ -24,7 +24,8 @@ b1: %v2 = alloca i64, align 128 store i64 0, i64* %v2 - %v3 = fcmp olt double %a0, 0x43E0000000000000 + %a1 = tail call double asm "fadd $0, $1, $2", "=f,f,f,~{cr2}"(double %a0, double %a0) + %v3 = fcmp olt double %a1, 0x43E0000000000000 br i1 %v3, label %b4, label %b8 b4: ; preds = %b1 Index: test/CodeGen/PowerPC/tls.ll =================================================================== --- test/CodeGen/PowerPC/tls.ll +++ test/CodeGen/PowerPC/tls.ll @@ -16,7 +16,7 @@ ;OPT0: stw [[REG2]], 0([[REG1]]) ;OPT1: addis [[REG1:[0-9]+]], 13, a@tprel@ha ;OPT1-NEXT: li [[REG2:[0-9]+]], 42 -;OPT1-NEXT: stw [[REG2]], a@tprel@l([[REG1]]) +;OPT1: stw [[REG2]], a@tprel@l([[REG1]]) store i32 42, i32* @a, align 4 ret i32 0 } Index: test/CodeGen/PowerPC/unal-altivec.ll =================================================================== --- test/CodeGen/PowerPC/unal-altivec.ll +++ test/CodeGen/PowerPC/unal-altivec.ll @@ -30,7 +30,6 @@ ; CHECK: @foo ; CHECK-DAG: li [[C0:[0-9]+]], 0 -; CHECK-DAG: li [[C15:[0-9]+]], 15 ; CHECK-DAG: lvx [[CNST:[0-9]+]], ; CHECK: .LBB0_1: ; CHECK-DAG: lvsl [[MASK1:[0-9]+]], [[B1:[0-9]+]], [[C0]] @@ -38,9 +37,9 @@ ; CHECK-DAG: add [[B3:[0-9]+]], [[B1]], [[C0]] ; CHECK-DAG: add [[B4:[0-9]+]], [[B2]], [[C0]] ; CHECK-DAG: lvx [[LD1:[0-9]+]], [[B1]], [[C0]] -; CHECK-DAG: lvx [[LD2:[0-9]+]], [[B3]], [[C15]] +; CHECK-DAG: lvx [[LD2:[0-9]+]], [[B3]], ; CHECK-DAG: lvx [[LD3:[0-9]+]], [[B2]], [[C0]] -; CHECK-DAG: lvx [[LD4:[0-9]+]], [[B4]], [[C15]] +; CHECK-DAG: lvx [[LD4:[0-9]+]], [[B4]], ; CHECK-DAG: vperm [[R1:[0-9]+]], [[LD1]], [[LD2]], [[MASK1]] ; CHECK-DAG: vperm [[R2:[0-9]+]], [[LD3]], [[LD4]], [[MASK2]] ; CHECK-DAG: vaddfp {{[0-9]+}}, [[R1]], [[CNST]]