[llvm-commits] [llvm] r117980 - in /llvm/trunk/lib/CodeGen: SplitKit.cpp SplitKit.h

Jakob Stoklund Olesen stoklund at 2pi.dk
Mon Nov 1 16:59:49 PDT 2010


Author: stoklund
Date: Mon Nov  1 18:59:48 2010
New Revision: 117980

URL: http://llvm.org/viewvc/llvm-project?rev=117980&view=rev
Log:
When inserting copies during splitting, always use the parent register as the
source, and let rewrite() clean it up.

This way, kill flags on the inserted copies are fixed as well during rewrite().

We can't just assume that all the copies we insert are going to be kills since
critical edges into loop headers sometimes require both source and dest to be
live out of a block.

Modified:
    llvm/trunk/lib/CodeGen/SplitKit.cpp
    llvm/trunk/lib/CodeGen/SplitKit.h

Modified: llvm/trunk/lib/CodeGen/SplitKit.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SplitKit.cpp?rev=117980&r1=117979&r2=117980&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/SplitKit.cpp (original)
+++ llvm/trunk/lib/CodeGen/SplitKit.cpp Mon Nov  1 18:59:48 2010
@@ -659,13 +659,13 @@
     addSimpleRange(I->start, std::min(End, I->end), I->valno);
 }
 
-VNInfo *LiveIntervalMap::defByCopyFrom(unsigned Reg,
-                                       const VNInfo *ParentVNI,
-                                       MachineBasicBlock &MBB,
-                                       MachineBasicBlock::iterator I) {
+VNInfo *LiveIntervalMap::defByCopy(const VNInfo *ParentVNI,
+                                   MachineBasicBlock &MBB,
+                                   MachineBasicBlock::iterator I) {
   const TargetInstrDesc &TID = MBB.getParent()->getTarget().getInstrInfo()->
     get(TargetOpcode::COPY);
-  MachineInstr *MI = BuildMI(MBB, I, DebugLoc(), TID, li_->reg).addReg(Reg);
+  MachineInstr *MI = BuildMI(MBB, I, DebugLoc(), TID, li_->reg)
+    .addReg(parentli_.reg);
   SlotIndex DefIdx = lis_.InsertMachineInstrInMaps(MI).getDefIndex();
   VNInfo *VNI = defValue(ParentVNI, DefIdx);
   VNI->setCopy(MI);
@@ -723,8 +723,7 @@
   truncatedValues.insert(ParentVNI);
   MachineInstr *MI = lis_.getInstructionFromIndex(Idx);
   assert(MI && "enterIntvBefore called with invalid index");
-  VNInfo *VNI = openli_.defByCopyFrom(edit_.getReg(), ParentVNI,
-                                      *MI->getParent(), MI);
+  VNInfo *VNI = openli_.defByCopy(ParentVNI, *MI->getParent(), MI);
   openli_.getLI()->addRange(LiveRange(VNI->def, Idx.getDefIndex(), VNI));
   DEBUG(dbgs() << ": " << *openli_.getLI() << '\n');
 }
@@ -741,8 +740,7 @@
   }
   DEBUG(dbgs() << ": valno " << ParentVNI->id);
   truncatedValues.insert(ParentVNI);
-  VNInfo *VNI = openli_.defByCopyFrom(edit_.getReg(), ParentVNI,
-                                      MBB, MBB.getFirstTerminator());
+  VNInfo *VNI = openli_.defByCopy(ParentVNI, MBB, MBB.getFirstTerminator());
   // Make sure openli is live out of MBB.
   openli_.getLI()->addRange(LiveRange(VNI->def, End, VNI));
   DEBUG(dbgs() << ": " << *openli_.getLI() << '\n');
@@ -775,8 +773,7 @@
 
   MachineBasicBlock::iterator MII = lis_.getInstructionFromIndex(Idx);
   MachineBasicBlock *MBB = MII->getParent();
-  VNInfo *VNI = dupli_.defByCopyFrom(openli_.getLI()->reg, ParentVNI, *MBB,
-                                     llvm::next(MII));
+  VNInfo *VNI = dupli_.defByCopy(ParentVNI, *MBB, llvm::next(MII));
 
   // Finally we must make sure that openli is properly extended from Idx to the
   // new copy.
@@ -798,8 +795,8 @@
   }
 
   // We are going to insert a back copy, so we must have a dupli_.
-  VNInfo *VNI = dupli_.defByCopyFrom(openli_.getLI()->reg, ParentVNI,
-                                     MBB, MBB.SkipPHIsAndLabels(MBB.begin()));
+  VNInfo *VNI = dupli_.defByCopy(ParentVNI, MBB,
+                                 MBB.SkipPHIsAndLabels(MBB.begin()));
 
   // Finally we must make sure that openli is properly extended from Start to
   // the new copy.

Modified: llvm/trunk/lib/CodeGen/SplitKit.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SplitKit.h?rev=117980&r1=117979&r2=117980&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/SplitKit.h (original)
+++ llvm/trunk/lib/CodeGen/SplitKit.h Mon Nov  1 18:59:48 2010
@@ -246,12 +246,12 @@
   /// beforehand so mapValue will work.
   void addRange(SlotIndex Start, SlotIndex End);
 
-  /// defByCopyFrom - Insert a copy from Reg to li, assuming that Reg carries
-  /// ParentVNI. Add a minimal live range for the new value and return it.
-  VNInfo *defByCopyFrom(unsigned Reg,
-                        const VNInfo *ParentVNI,
-                        MachineBasicBlock &MBB,
-                        MachineBasicBlock::iterator I);
+  /// defByCopy- Insert a copy from parentli to li, assuming that ParentVNI is
+  /// live at the insert location. Add a minimal live range for the new value
+  /// and return it.
+  VNInfo *defByCopy(const VNInfo *ParentVNI,
+                    MachineBasicBlock &MBB,
+                    MachineBasicBlock::iterator I);
 
 };
 





More information about the llvm-commits mailing list