[llvm] [CalcSpillWeights] Simplify copy hint register collection. NFC. (PR #114236)
Valery Pykhtin via llvm-commits
llvm-commits at lists.llvm.org
Fri Nov 1 02:36:52 PDT 2024
================
@@ -287,29 +270,34 @@ float VirtRegAuxInfo::weightCalcHelper(LiveInterval &LI, SlotIndex *Start,
if (!TII.isCopyInstr(*MI))
continue;
Register HintReg = copyHint(MI, LI.reg(), TRI, MRI);
- if (!HintReg)
- continue;
- // Force HWeight onto the stack so that x86 doesn't add hidden precision,
- // making the comparison incorrectly pass (i.e., 1 > 1 == true??).
- stack_float_t HWeight = Hint[HintReg] += Weight;
- if (HintReg.isVirtual() || MRI.isAllocatable(HintReg))
- CopyHints.insert(CopyHint(HintReg, HWeight));
+ if (HintReg && (HintReg.isVirtual() || MRI.isAllocatable(HintReg)))
+ Hint[HintReg] += Weight;
}
// Pass all the sorted copy hints to mri.
- if (ShouldUpdateLI && CopyHints.size()) {
+ if (ShouldUpdateLI && Hint.size()) {
// Remove a generic hint if previously added by target.
if (TargetHint.first == 0 && TargetHint.second)
MRI.clearSimpleHint(LI.reg());
- SmallSet<Register, 4> HintedRegs;
- for (const auto &Hint : CopyHints) {
- if (!HintedRegs.insert(Hint.Reg).second ||
- (TargetHint.first != 0 && Hint.Reg == TargetHint.second))
- // Don't add the same reg twice or the target-type hint again.
- continue;
- MRI.addRegAllocationHint(LI.reg(), Hint.Reg);
+ // Don't add the target-type hint again.
+ Register SkipReg = TargetHint.first != 0 ? TargetHint.second : Register();
+ SmallVector<std::pair<float, Register>, 4> FRegHints, VRegHints;
----------------
vpykhtin wrote:
Thanks, I have no strong preference here, so I've returned the original CopyHint structure (except for const members) and made one sorted list.
https://github.com/llvm/llvm-project/pull/114236
More information about the llvm-commits
mailing list