diff options
Diffstat (limited to 'llvm/lib/CodeGen/CalcSpillWeights.cpp')
-rw-r--r-- | llvm/lib/CodeGen/CalcSpillWeights.cpp | 35 |
1 files changed, 5 insertions, 30 deletions
diff --git a/llvm/lib/CodeGen/CalcSpillWeights.cpp b/llvm/lib/CodeGen/CalcSpillWeights.cpp index 7f89601da23..02347b9f0b5 100644 --- a/llvm/lib/CodeGen/CalcSpillWeights.cpp +++ b/llvm/lib/CodeGen/CalcSpillWeights.cpp @@ -70,15 +70,6 @@ static unsigned copyHint(const MachineInstr *mi, unsigned reg, return sub == hsub ? hreg : 0; const TargetRegisterClass *rc = mri.getRegClass(reg); - if (!tri.enableMultipleCopyHints()) { - // Only allow physreg hints in rc. - if (sub == 0) - return rc->contains(hreg) ? hreg : 0; - - // reg:sub should match the physreg hreg. - return tri.getMatchingSuperReg(hreg, sub, rc); - } - unsigned CopiedPReg = (hsub ? tri.getSubReg(hreg, hsub) : hreg); if (rc->contains(CopiedPReg)) return CopiedPReg; @@ -199,31 +190,19 @@ float VirtRegAuxInfo::weightCalcHelper(LiveInterval &li, SlotIndex *start, unsigned Reg; float Weight; bool IsPhys; - unsigned HintOrder; - CopyHint(unsigned R, float W, bool P, unsigned HR) : - Reg(R), Weight(W), IsPhys(P), HintOrder(HR) {} + CopyHint(unsigned R, float W, bool P) : + Reg(R), Weight(W), IsPhys(P) {} bool operator<(const CopyHint &rhs) const { // Always prefer any physreg hint. if (IsPhys != rhs.IsPhys) return (IsPhys && !rhs.IsPhys); if (Weight != rhs.Weight) return (Weight > rhs.Weight); - - // This is just a temporary way to achive NFC for targets that don't - // enable multiple copy hints. HintOrder should be removed when all - // targets return true in enableMultipleCopyHints(). - return (HintOrder < rhs.HintOrder); - -#if 0 // Should replace the HintOrder check, see above. - // (just for the purpose of maintaining the set) - return Reg < rhs.Reg; -#endif + return Reg < rhs.Reg; // Tie-breaker. } }; std::set<CopyHint> CopyHints; - // Temporary: see comment for HintOrder above. - unsigned CopyHintOrder = 0; for (MachineRegisterInfo::reg_instr_iterator I = mri.reg_instr_begin(li.reg), E = mri.reg_instr_end(); I != E; ) { @@ -263,8 +242,7 @@ float VirtRegAuxInfo::weightCalcHelper(LiveInterval &li, SlotIndex *start, } // Get allocation hints from copies. - if (!mi->isCopy() || - (TargetHint.first != 0 && !tri.enableMultipleCopyHints())) + if (!mi->isCopy()) continue; unsigned hint = copyHint(mi, li.reg, tri, mri); if (!hint) @@ -275,8 +253,7 @@ float VirtRegAuxInfo::weightCalcHelper(LiveInterval &li, SlotIndex *start, // FIXME: we probably shouldn't use floats at all. volatile float hweight = Hint[hint] += weight; if (TargetRegisterInfo::isVirtualRegister(hint) || mri.isAllocatable(hint)) - CopyHints.insert(CopyHint(hint, hweight, tri.isPhysicalRegister(hint), - (tri.enableMultipleCopyHints() ? hint : CopyHintOrder++))); + CopyHints.insert(CopyHint(hint, hweight, tri.isPhysicalRegister(hint))); } Hint.clear(); @@ -294,8 +271,6 @@ float VirtRegAuxInfo::weightCalcHelper(LiveInterval &li, SlotIndex *start, // Don't add the same reg twice or the target-type hint again. continue; mri.addRegAllocationHint(li.reg, Hint.Reg); - if (!tri.enableMultipleCopyHints()) - break; } // Weakly boost the spill weight of hinted registers. |