diff options
author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2012-06-20 18:00:57 +0000 |
---|---|---|
committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2012-06-20 18:00:57 +0000 |
commit | 833308d785e21ec1742953b59e3ef82f27b82130 (patch) | |
tree | 8637a22e723925923b1e3bca5050f8df04104103 /llvm/lib/CodeGen/LiveIntervalAnalysis.cpp | |
parent | bebf146dd603710ddfafef138542ace3fa092ce0 (diff) | |
download | bcm5719-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/LiveIntervalAnalysis.cpp')
-rw-r--r-- | llvm/lib/CodeGen/LiveIntervalAnalysis.cpp | 12 |
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); } |