diff options
-rw-r--r-- | lib/CodeGen/SimpleRegisterCoalescing.cpp | 6 | ||||
-rw-r--r-- | test/CodeGen/ARM/2008-11-19-ScavengerAssert.ll | 2 | ||||
-rw-r--r-- | test/CodeGen/X86/2008-02-22-ReMatBug.ll | 2 |
3 files changed, 6 insertions, 4 deletions
diff --git a/lib/CodeGen/SimpleRegisterCoalescing.cpp b/lib/CodeGen/SimpleRegisterCoalescing.cpp index 068dcda93b..22b62c3603 100644 --- a/lib/CodeGen/SimpleRegisterCoalescing.cpp +++ b/lib/CodeGen/SimpleRegisterCoalescing.cpp @@ -2571,17 +2571,19 @@ void SimpleRegisterCoalescing::CalculateSpillWeights() { continue; bool HasDef = mopi.isDef(); - bool HasUse = mopi.isUse(); + bool HasUse = !HasDef; for (unsigned j = i+1; j != e; ++j) { const MachineOperand &mopj = MI->getOperand(j); if (!mopj.isReg() || mopj.getReg() != Reg) continue; HasDef |= mopj.isDef(); HasUse |= mopj.isUse(); + if (HasDef && HasUse) + break; } LiveInterval &RegInt = li_->getInterval(Reg); - float Weight = li_->getSpillWeight(HasDef, HasUse, loopDepth+1); + float Weight = li_->getSpillWeight(HasDef, HasUse, loopDepth); if (HasDef && isExit) { // Looks like this is a loop count variable update. MachineInstrIndex DefIdx = diff --git a/test/CodeGen/ARM/2008-11-19-ScavengerAssert.ll b/test/CodeGen/ARM/2008-11-19-ScavengerAssert.ll index 221a168cba..3291856f18 100644 --- a/test/CodeGen/ARM/2008-11-19-ScavengerAssert.ll +++ b/test/CodeGen/ARM/2008-11-19-ScavengerAssert.ll @@ -1,4 +1,4 @@ -; RUN: llc < %s -mtriple=arm-apple-darwin9 -stats |& grep asm-printer | grep 161 +; RUN: llc < %s -mtriple=arm-apple-darwin9 -stats |& grep asm-printer | grep 162 %"struct.Adv5::Ekin<3>" = type <{ i8 }> %"struct.Adv5::X::Energyflux<3>" = type { double } diff --git a/test/CodeGen/X86/2008-02-22-ReMatBug.ll b/test/CodeGen/X86/2008-02-22-ReMatBug.ll index a91ac27f98..8d6bb0df1f 100644 --- a/test/CodeGen/X86/2008-02-22-ReMatBug.ll +++ b/test/CodeGen/X86/2008-02-22-ReMatBug.ll @@ -1,4 +1,4 @@ -; RUN: llc < %s -march=x86 -stats |& grep {Number of re-materialization} | grep 2 +; RUN: llc < %s -march=x86 -stats |& grep {Number of re-materialization} | grep 3 ; rdar://5761454 %struct.quad_struct = type { i32, i32, %struct.quad_struct*, %struct.quad_struct*, %struct.quad_struct*, %struct.quad_struct*, %struct.quad_struct* } |