mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-04 10:04:33 +00:00
Only update regunit live ranges that have been precomputed.
Regunit live ranges are computed on demand, so when mi-sched calls handleMove, some regunits may not have live ranges yet. That makes updating them easier: Just skip the non-existing ranges. They will be computed correctly from the rescheduled machine code when they are needed. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158831 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b47f3ea224
commit
7824152557
@ -347,6 +347,12 @@ namespace llvm {
|
||||
return *LI;
|
||||
}
|
||||
|
||||
/// getCachedRegUnit - Return the live range for Unit if it has already
|
||||
/// been computed, or NULL if it hasn't been computed yet.
|
||||
LiveInterval *getCachedRegUnit(unsigned Unit) {
|
||||
return RegUnitIntervals[Unit];
|
||||
}
|
||||
|
||||
/// trackingRegUnits - Does LiveIntervals curently track register units?
|
||||
/// This function will be removed when regunit tracking is permanently
|
||||
/// enabled.
|
||||
|
@ -1196,11 +1196,15 @@ private:
|
||||
if (TargetRegisterInfo::isPhysicalRegister(Reg) && LIS.isReserved(Reg))
|
||||
continue;
|
||||
|
||||
// Collect ranges for register units. These live ranges are computed on
|
||||
// demand, so just skip any that haven't been computed yet.
|
||||
if (TargetRegisterInfo::isPhysicalRegister(Reg) && LIS.trackingRegUnits())
|
||||
for (MCRegUnitIterator Units(Reg, &TRI); Units.isValid(); ++Units)
|
||||
collectRanges(MO, &LIS.getRegUnit(*Units),
|
||||
Entering, Internal, Exiting, OldIdx);
|
||||
else if (LIS.hasInterval(Reg))
|
||||
for (MCRegUnitIterator Units(Reg, &TRI); Units.isValid(); ++Units)
|
||||
if (LiveInterval *LI = LIS.getCachedRegUnit(*Units))
|
||||
collectRanges(MO, LI, Entering, Internal, Exiting, OldIdx);
|
||||
|
||||
// Collect ranges for individual registers.
|
||||
if (LIS.hasInterval(Reg))
|
||||
collectRanges(MO, &LIS.getInterval(Reg),
|
||||
Entering, Internal, Exiting, OldIdx);
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
; RUN: llc -march=x86-64 -mcpu=core2 -enable-misched -misched=shuffle -misched-bottomup < %s
|
||||
; RUN: llc -march=x86-64 -mcpu=core2 -enable-misched -misched=shuffle -misched-bottomup -live-regunits < %s
|
||||
; REQUIRES: asserts
|
||||
;
|
||||
; Interesting MachineScheduler cases.
|
||||
|
Loading…
Reference in New Issue
Block a user