[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