[llvm-commits] CVS: reopt/lib/LightWtProfiling/UnpackTraceFunction.cpp

Brian Gaeke gaeke at cs.uiuc.edu
Tue Jul 27 11:35:16 PDT 2004



Changes in directory reopt/lib/LightWtProfiling:

UnpackTraceFunction.cpp updated: 1.103 -> 1.104

---
Log message:

Save call-clobbered registers at trace boundaries if we see a call on the trace.
Save g-registers around calls.


---
Diffs of the changes:  (+68 -5)

Index: reopt/lib/LightWtProfiling/UnpackTraceFunction.cpp
diff -u reopt/lib/LightWtProfiling/UnpackTraceFunction.cpp:1.103 reopt/lib/LightWtProfiling/UnpackTraceFunction.cpp:1.104
--- reopt/lib/LightWtProfiling/UnpackTraceFunction.cpp:1.103	Fri Jul 23 00:00:03 2004
+++ reopt/lib/LightWtProfiling/UnpackTraceFunction.cpp	Tue Jul 27 13:35:05 2004
@@ -29,6 +29,7 @@
 #include "../../../../lib/Target/SparcV9/RegAlloc/AllocInfo.h"
 #include "../../../../lib/Target/SparcV9/SparcV9RegInfo.h"
 #include "../../../../lib/Target/SparcV9/SparcV9TargetMachine.h"
+#include "../../../../lib/Target/SparcV9/SparcV9InstrSelectionSupport.h"
 
 namespace llvm {
 
@@ -83,8 +84,63 @@
     fi != fe; ++fi)
     for (MachineBasicBlock::iterator bi = fi->begin (), be = fi->end ();
       bi != be; ++bi) {
-      if (bi->getOpcode () == V9::CALL)
-        RegsToSave.insert (SparcV9::o7); // save return-address register
+      if (bi->getOpcode () == V9::CALL) {
+        RegsToSave.insert (SparcV9::o0);
+        RegsToSave.insert (SparcV9::o1);
+        RegsToSave.insert (SparcV9::o2);
+        RegsToSave.insert (SparcV9::o3);
+        RegsToSave.insert (SparcV9::o4);
+        RegsToSave.insert (SparcV9::o5);
+        RegsToSave.insert (SparcV9::o7);
+        RegsToSave.insert (SparcV9::f0);
+        RegsToSave.insert (SparcV9::f1);
+        RegsToSave.insert (SparcV9::f2);
+        RegsToSave.insert (SparcV9::f3);
+        RegsToSave.insert (SparcV9::f4);
+        RegsToSave.insert (SparcV9::f5);
+        RegsToSave.insert (SparcV9::f6);
+        RegsToSave.insert (SparcV9::f7);
+        RegsToSave.insert (SparcV9::f8);
+        RegsToSave.insert (SparcV9::f9);
+        RegsToSave.insert (SparcV9::f10);
+        RegsToSave.insert (SparcV9::f11);
+        RegsToSave.insert (SparcV9::f12);
+        RegsToSave.insert (SparcV9::f13);
+        RegsToSave.insert (SparcV9::f14);
+        RegsToSave.insert (SparcV9::f15);
+        RegsToSave.insert (SparcV9::f16);
+        RegsToSave.insert (SparcV9::f17);
+        RegsToSave.insert (SparcV9::f18);
+        RegsToSave.insert (SparcV9::f19);
+        RegsToSave.insert (SparcV9::f20);
+        RegsToSave.insert (SparcV9::f21);
+        RegsToSave.insert (SparcV9::f22);
+        RegsToSave.insert (SparcV9::f23);
+        RegsToSave.insert (SparcV9::f24);
+        RegsToSave.insert (SparcV9::f25);
+        RegsToSave.insert (SparcV9::f26);
+        RegsToSave.insert (SparcV9::f27);
+        RegsToSave.insert (SparcV9::f28);
+        RegsToSave.insert (SparcV9::f29);
+        RegsToSave.insert (SparcV9::f30);
+        RegsToSave.insert (SparcV9::f31);
+        RegsToSave.insert (SparcV9::f32);
+        RegsToSave.insert (SparcV9::f34);
+        RegsToSave.insert (SparcV9::f36);
+        RegsToSave.insert (SparcV9::f38);
+        RegsToSave.insert (SparcV9::f40);
+        RegsToSave.insert (SparcV9::f42);
+        RegsToSave.insert (SparcV9::f44);
+        RegsToSave.insert (SparcV9::f46);
+        RegsToSave.insert (SparcV9::f48);
+        RegsToSave.insert (SparcV9::f50);
+        RegsToSave.insert (SparcV9::f52);
+        RegsToSave.insert (SparcV9::f54);
+        RegsToSave.insert (SparcV9::f56);
+        RegsToSave.insert (SparcV9::f58);
+        RegsToSave.insert (SparcV9::f60);
+        RegsToSave.insert (SparcV9::f62);
+      }
       for (unsigned oi = 0, oe = bi->getNumOperands (); oi != oe; ++oi) {
         const MachineOperand &MO = bi->getOperand (oi);
         if (MO.isDef ()) {
@@ -307,11 +363,10 @@
 UnpackTraceFunction::copyConstantToRegister (MachineFunction &MF, Constant *C,
                                              unsigned Reg, unsigned SpareReg,
                                              std::vector<MachineInstr *> &mvec){
-  const TargetInstrInfo &TII = *TM->getInstrInfo ();
   TmpInstruction *tmp = new TmpInstruction (C);
   MachineCodeForInstruction throwaway;
-  TII.CreateCodeToLoadConst (*TM, const_cast<Function *> (MF.getFunction ()),
-                             C, tmp, mvec, throwaway);
+  CreateCodeToLoadConst (*TM, const_cast<Function *> (MF.getFunction ()),
+                         C, tmp, mvec, throwaway);
                              
   DEBUG (for (std::vector<MachineInstr *>::iterator i = mvec.begin (),
               e = mvec.end (); i != e; ++i)
@@ -615,6 +670,10 @@
 	  // Let fp = g1.
       mvec.push_back (BuildMI (V9::ORr, 3).addMReg (TraceFP).addZImm (0)
         .addMReg (MatrixFP, MachineOperand::Def));
+      unsigned R;
+      R = SparcV9::g2; TRI.cpReg2MemMI (mvec, R, sp, stackOffsetForReg (R), TRI.getRegType (R), g2);
+      R = SparcV9::g3; TRI.cpReg2MemMI (mvec, R, sp, stackOffsetForReg (R), TRI.getRegType (R), g2);
+      R = SparcV9::g4; TRI.cpReg2MemMI (mvec, R, sp, stackOffsetForReg (R), TRI.getRegType (R), g2);
       // Insert all the instrs into the MBB after the call instruction.
       for (std::vector<MachineInstr *>::iterator ei = mvec.begin (),
            ee = mvec.end (); ei != ee; ++ei) {
@@ -629,6 +688,9 @@
                        TRI.getRegType (MatrixFP), g2);
       TRI.cpMem2RegMI (mvec, sp, stackOffsetForReg (TraceFP), TraceFP,
                        TRI.getRegType (TraceFP), g2);
+      R = SparcV9::g2; TRI.cpMem2RegMI (mvec, sp, stackOffsetForReg (R), R, TRI.getRegType (R), g2);
+      R = SparcV9::g3; TRI.cpMem2RegMI (mvec, sp, stackOffsetForReg (R), R, TRI.getRegType (R), g2);
+      R = SparcV9::g4; TRI.cpMem2RegMI (mvec, sp, stackOffsetForReg (R), R, TRI.getRegType (R), g2);
       // Insert all the instrs into the MBB after the call instruction.
       for (std::vector<MachineInstr *>::iterator ei = mvec.begin (),
            ee = mvec.end (); ei != ee; ++ei) {
@@ -674,6 +736,7 @@
   DEBUG(std::cerr << "UnpackTraceFunction: Stack sizes: static = "
         << StaticStackSize << ", total = " << TotalStackSize << "\n");
 
+
   bool Changed = false;
   for (MachineFunction::iterator I = MF.begin (), E = MF.end (); I != E; ++I)
     Changed |= runOnMachineBasicBlock (*I);





More information about the llvm-commits mailing list