summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen
diff options
context:
space:
mode:
authorJakob Stoklund Olesen <stoklund@2pi.dk>2012-06-20 18:00:57 +0000
committerJakob Stoklund Olesen <stoklund@2pi.dk>2012-06-20 18:00:57 +0000
commit833308d785e21ec1742953b59e3ef82f27b82130 (patch)
tree8637a22e723925923b1e3bca5050f8df04104103 /llvm/lib/CodeGen
parentbebf146dd603710ddfafef138542ace3fa092ce0 (diff)
downloadbcm5719-llvm-833308d785e21ec1742953b59e3ef82f27b82130.tar.gz
bcm5719-llvm-833308d785e21ec1742953b59e3ef82f27b82130.zip
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. llvm-svn: 158831
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r--llvm/lib/CodeGen/LiveIntervalAnalysis.cpp12
1 files changed, 8 insertions, 4 deletions
diff --git a/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp b/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp
index 6b8cc887043..153d1c37dfd 100644
--- a/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp
+++ b/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp
@@ -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);
}
OpenPOWER on IntegriCloud