[llvm-commits] [llvm] r165060 - /llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp

Jakob Stoklund Olesen stoklund at 2pi.dk
Tue Oct 2 15:08:36 PDT 2012


Author: stoklund
Date: Tue Oct  2 17:08:36 2012
New Revision: 165060

URL: http://llvm.org/viewvc/llvm-project?rev=165060&view=rev
Log:
Handle reserved registers more accurately in handleMove().

Reserved register live ranges look like a set of dead defs - any uses of
reserved registers are ignored.

Instead of skipping the updating of reserved register operands entirely,
just ignore the use operands and treat the def operands normally.

No test case, handleMove() is not commonly used yet.

Modified:
    llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp

Modified: llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp?rev=165060&r1=165059&r2=165060&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp (original)
+++ llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp Tue Oct  2 17:08:36 2012
@@ -1164,18 +1164,17 @@
 
       unsigned Reg = MO.getReg();
 
-      // TODO: Currently we're skipping uses that are reserved or have no
-      // interval, but we're not updating their kills. This should be
-      // fixed.
-      if (TargetRegisterInfo::isPhysicalRegister(Reg) && LIS.isReserved(Reg))
-        continue;
+      // Don't track uses of reserved registers - they're not accurate.
+      // Reserved register live ranges look like a set of dead defs.
+      bool Resv =
+        TargetRegisterInfo::isPhysicalRegister(Reg) && LIS.isReserved(Reg);
 
       // 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)) {
         for (MCRegUnitIterator Units(Reg, &TRI); Units.isValid(); ++Units)
           if (LiveInterval *LI = LIS.getCachedRegUnit(*Units))
-            collectRanges(MO, LI, Entering, Internal, Exiting, OldIdx);
+            collectRanges(MO, LI, Entering, Internal, Exiting, OldIdx, Resv);
       } else {
         // Collect ranges for individual virtual registers.
         collectRanges(MO, &LIS.getInterval(Reg),
@@ -1186,8 +1185,8 @@
 
   void collectRanges(const MachineOperand &MO, LiveInterval *LI,
                      RangeSet &Entering, RangeSet &Internal, RangeSet &Exiting,
-                     SlotIndex OldIdx) {
-    if (MO.readsReg()) {
+                     SlotIndex OldIdx, bool IgnoreReads = false) {
+    if (!IgnoreReads && MO.readsReg()) {
       LiveRange* LR = LI->getLiveRangeContaining(OldIdx);
       if (LR != 0)
         Entering.insert(std::make_pair(LI, LR));





More information about the llvm-commits mailing list