diff options
author | weiguozhi <57237827+weiguozhi@users.noreply.github.com> | 2025-04-28 09:52:03 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-04-28 09:52:03 -0700 |
commit | b25b51eb639da2e726c95bef00409e0d3913435d (patch) | |
tree | 195173e806596c50fe97a77568318fcaf881815e /llvm/lib/CodeGen/RegAllocGreedy.cpp | |
parent | 2b57ebb50b6d418e70382e655feaa619b558e254 (diff) | |
download | llvm-b25b51eb639da2e726c95bef00409e0d3913435d.zip llvm-b25b51eb639da2e726c95bef00409e0d3913435d.tar.gz llvm-b25b51eb639da2e726c95bef00409e0d3913435d.tar.bz2 |
[InlineSpiller] Check rematerialization before folding operand (#134015)
Current implementation tries to fold the operand before
rematerialization because it can reduce one register usage. But if there
is a physical register available we can still rematerialize it without
causing high register pressure.
This patch do this check to find the better choice. Then we can produce
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
instead of
ucomiss LCPI0_1(%rip), %xmm0
Diffstat (limited to 'llvm/lib/CodeGen/RegAllocGreedy.cpp')
-rw-r--r-- | llvm/lib/CodeGen/RegAllocGreedy.cpp | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/llvm/lib/CodeGen/RegAllocGreedy.cpp b/llvm/lib/CodeGen/RegAllocGreedy.cpp index 56d3bd9..250776e 100644 --- a/llvm/lib/CodeGen/RegAllocGreedy.cpp +++ b/llvm/lib/CodeGen/RegAllocGreedy.cpp @@ -2664,7 +2664,7 @@ MCRegister RAGreedy::selectOrSplitImpl(const LiveInterval &VirtReg, NamedRegionTimer T("spill", "Spiller", TimerGroupName, TimerGroupDescription, TimePassesIsEnabled); LiveRangeEdit LRE(&VirtReg, NewVRegs, *MF, *LIS, VRM, this, &DeadRemats); - spiller().spill(LRE); + spiller().spill(LRE, &Order); ExtraInfo->setStage(NewVRegs.begin(), NewVRegs.end(), RS_Done); // Tell LiveDebugVariables about the new ranges. Ranges not being covered by @@ -2908,8 +2908,8 @@ bool RAGreedy::run(MachineFunction &mf) { PriorityAdvisor = PriorityProvider->getAdvisor(*MF, *this, *Indexes); VRAI = std::make_unique<VirtRegAuxInfo>(*MF, *LIS, *VRM, *Loops, *MBFI); - SpillerInstance.reset( - createInlineSpiller({*LIS, *LSS, *DomTree, *MBFI}, *MF, *VRM, *VRAI)); + SpillerInstance.reset(createInlineSpiller({*LIS, *LSS, *DomTree, *MBFI}, *MF, + *VRM, *VRAI, Matrix)); VRAI->calculateSpillWeightsAndHints(); |