mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-21 08:17:40 +00:00
Avoid folding loads that are unsafe to move.
LiveRangeEdit::foldAsLoad() can eliminate a register by folding a load into its only use. Only do that when the load is safe to move, and it won't extend any live ranges. This fixes PR13414. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160575 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -177,6 +177,19 @@ bool LiveRangeEdit::foldAsLoad(LiveInterval *LI,
|
||||
if (!DefMI || !UseMI)
|
||||
return false;
|
||||
|
||||
// Since we're moving the DefMI load, make sure we're not extending any live
|
||||
// ranges.
|
||||
if (!allUsesAvailableAt(DefMI,
|
||||
LIS.getInstructionIndex(DefMI),
|
||||
LIS.getInstructionIndex(UseMI)))
|
||||
return false;
|
||||
|
||||
// We also need to make sure it is safe to move the load.
|
||||
// Assume there are stores between DefMI and UseMI.
|
||||
bool SawStore = true;
|
||||
if (!DefMI->isSafeToMove(&TII, 0, SawStore))
|
||||
return false;
|
||||
|
||||
DEBUG(dbgs() << "Try to fold single def: " << *DefMI
|
||||
<< " into single use: " << *UseMI);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user