Avoid unnecessary string construction during asm printing.
[oota-llvm.git] / lib / CodeGen / VirtRegMap.cpp
index 1406748e3175f1ba20b45e64201ea7ea184174dc..7696d55efa577009da7a425f263c5a35c035cff9 100644 (file)
@@ -37,7 +37,7 @@
 using namespace llvm;
 
 STATISTIC(NumSpills  , "Number of register spills");
-STATISTIC(NumPSpills ,"Number of physical register spills");
+STATISTIC(NumPSpills , "Number of physical register spills");
 STATISTIC(NumReMats  , "Number of re-materialization");
 STATISTIC(NumDRM     , "Number of re-materializable defs elided");
 STATISTIC(NumStores  , "Number of stores added");
@@ -604,7 +604,7 @@ static bool InvalidateRegDef(MachineBasicBlock::iterator I,
     return false;
 
   bool FoundUse = false, Done = false;
-  MachineBasicBlock::iterator E = NewDef;
+  MachineBasicBlock::iterator E = &NewDef;
   ++I; ++E;
   for (; !Done && I != E; ++I) {
     MachineInstr *NMI = I;
@@ -973,7 +973,7 @@ bool LocalSpiller::PrepForUnfoldOpti(MachineBasicBlock &MBB,
         MBB.erase(&MI);
         return true;
       }
-      delete NewMI;
+      MF.DeleteMachineInstr(NewMI);
     }
   }
   return false;
@@ -1026,25 +1026,22 @@ bool LocalSpiller::CommuteToFoldReload(MachineBasicBlock &MBB,
            DefMI->getOperand(DefIdx).getReg() == SrcReg);
 
     // Now commute def instruction.
-    MachineInstr *CommutedMI = TII->commuteInstruction(DefMI);
+    MachineInstr *CommutedMI = TII->commuteInstruction(DefMI, true);
     if (!CommutedMI)
       return false;
     SmallVector<unsigned, 2> Ops;
     Ops.push_back(NewDstIdx);
     MachineInstr *FoldedMI = TII->foldMemoryOperand(MF, CommutedMI, Ops, SS);
-    if (!FoldedMI) {
-      if (CommutedMI == DefMI)
-        TII->commuteInstruction(CommutedMI);
-      else
-        MBB.erase(CommutedMI);
+    // Not needed since foldMemoryOperand returns new MI.
+    MF.DeleteMachineInstr(CommutedMI);
+    if (!FoldedMI)
       return false;
-    }
 
     VRM.addSpillSlotUse(SS, FoldedMI);
     VRM.virtFolded(VirtReg, FoldedMI, VirtRegMap::isRef);
     // Insert new def MI and spill MI.
     const TargetRegisterClass* RC = MF.getRegInfo().getRegClass(VirtReg);
-    TII->storeRegToStackSlot(MBB, MI, NewReg, true, SS, RC);
+    TII->storeRegToStackSlot(MBB, &MI, NewReg, true, SS, RC);
     MII = prior(MII);
     MachineInstr *StoreMI = MII;
     VRM.addSpillSlotUse(SS, StoreMI);
@@ -1052,17 +1049,16 @@ bool LocalSpiller::CommuteToFoldReload(MachineBasicBlock &MBB,
     MII = MBB.insert(MII, FoldedMI);  // Update MII to backtrack.
 
     // Delete all 3 old instructions.
-    InvalidateKills(MI, RegKills, KillOps);
-    VRM.RemoveMachineInstrFromMaps(&MI);
-    MBB.erase(&MI);
-    if (CommutedMI != DefMI)
-      MBB.erase(CommutedMI);
-    InvalidateKills(*DefMI, RegKills, KillOps);
-    VRM.RemoveMachineInstrFromMaps(DefMI);
-    MBB.erase(DefMI);
     InvalidateKills(*ReloadMI, RegKills, KillOps);
     VRM.RemoveMachineInstrFromMaps(ReloadMI);
     MBB.erase(ReloadMI);
+    InvalidateKills(*DefMI, RegKills, KillOps);
+    VRM.RemoveMachineInstrFromMaps(DefMI);
+    MBB.erase(DefMI);
+    InvalidateKills(MI, RegKills, KillOps);
+    VRM.RemoveMachineInstrFromMaps(&MI);
+    MBB.erase(&MI);
+
     ++NumCommutes;
     return true;
   }
@@ -1346,7 +1342,7 @@ void LocalSpiller::RewriteMBB(MachineBasicBlock &MBB, VirtRegMap &VRM) {
         unsigned RReg = SubIdx ? TRI->getSubReg(Phys, SubIdx) : Phys;
         MI.getOperand(i).setReg(RReg);
         if (VRM.isImplicitlyDefined(VirtReg))
-          BuildMI(MBB, MI, TII->get(TargetInstrInfo::IMPLICIT_DEF), RReg);
+          BuildMI(MBB, &MI, TII->get(TargetInstrInfo::IMPLICIT_DEF), RReg);
         continue;
       }
       
@@ -1819,7 +1815,7 @@ void LocalSpiller::RewriteMBB(MachineBasicBlock &MBB, VirtRegMap &VRM) {
   ProcessNextInst:
     DistanceMap.insert(std::make_pair(&MI, Dist++));
     if (!Erased && !BackTracked) {
-      for (MachineBasicBlock::iterator II = MI; II != NextMII; ++II)
+      for (MachineBasicBlock::iterator II = &MI; II != NextMII; ++II)
         UpdateKills(*II, RegKills, KillOps);
     }
     MII = NextMII;