[llvm-commits] CVS: llvm/lib/Target/PowerPC/PPCCodeEmitter.cpp
Chris Lattner
lattner at cs.uiuc.edu
Wed May 3 10:11:06 PDT 2006
Changes in directory llvm/lib/Target/PowerPC:
PPCCodeEmitter.cpp updated: 1.57 -> 1.58
---
Log message:
Suck block address tracking out of targets into the JIT Emitter. This
simplifies the MachineCodeEmitter interface just a little bit and makes
BasicBlocks work like constant pools and jump tables.
---
Diffs of the changes: (+6 -12)
PPCCodeEmitter.cpp | 18 ++++++------------
1 files changed, 6 insertions(+), 12 deletions(-)
Index: llvm/lib/Target/PowerPC/PPCCodeEmitter.cpp
diff -u llvm/lib/Target/PowerPC/PPCCodeEmitter.cpp:1.57 llvm/lib/Target/PowerPC/PPCCodeEmitter.cpp:1.58
--- llvm/lib/Target/PowerPC/PPCCodeEmitter.cpp:1.57 Tue May 2 19:28:15 2006
+++ llvm/lib/Target/PowerPC/PPCCodeEmitter.cpp Wed May 3 12:10:41 2006
@@ -33,9 +33,7 @@
// Tracks which instruction references which BasicBlock
std::vector<std::pair<MachineBasicBlock*, unsigned*> > BBRefs;
- // Tracks where each BasicBlock starts, indexes by BB number.
- std::vector<uint64_t> BasicBlockAddrs;
-
+
/// getMachineOpValue - evaluates the MachineOperand of a given MachineInstr
///
int getMachineOpValue(MachineInstr &MI, MachineOperand &MO);
@@ -87,17 +85,15 @@
"JIT relocation model must be set to static or default!");
do {
BBRefs.clear();
- BasicBlockAddrs.clear();
MCE.startFunction(MF);
for (MachineFunction::iterator BB = MF.begin(), E = MF.end(); BB != E; ++BB)
emitBasicBlock(*BB);
- MCE.emitJumpTableInfo(MF.getJumpTableInfo(), BasicBlockAddrs);
} while (MCE.finishFunction(MF));
// Resolve branches to BasicBlocks for the entire function
for (unsigned i = 0, e = BBRefs.size(); i != e; ++i) {
- intptr_t Location = BasicBlockAddrs[BBRefs[i].first->getNumber()];
+ intptr_t Location = MCE.getMachineBasicBlockAddress(BBRefs[i].first);
unsigned *Ref = BBRefs[i].second;
DEBUG(std::cerr << "Fixup @ " << (void*)Ref << " to " << (void*)Location
<< "\n");
@@ -115,15 +111,13 @@
}
}
BBRefs.clear();
- BasicBlockAddrs.clear();
return false;
}
void PPCCodeEmitter::emitBasicBlock(MachineBasicBlock &MBB) {
- if (BasicBlockAddrs.size() <= (unsigned)MBB.getNumber())
- BasicBlockAddrs.resize((MBB.getNumber()+1)*2);
- BasicBlockAddrs[MBB.getNumber()] = MCE.getCurrentPCValue();
+ MCE.StartMachineBasicBlock(&MBB);
+
for (MachineBasicBlock::iterator I = MBB.begin(), E = MBB.end(); I != E; ++I){
MachineInstr &MI = *I;
unsigned Opcode = MI.getOpcode();
@@ -145,8 +139,8 @@
int PPCCodeEmitter::getMachineOpValue(MachineInstr &MI, MachineOperand &MO) {
- int rv = 0; // Return value; defaults to 0 for unhandled cases
- // or things that get fixed up later by the JIT.
+ intptr_t rv = 0; // Return value; defaults to 0 for unhandled cases
+ // or things that get fixed up later by the JIT.
if (MO.isRegister()) {
rv = PPCRegisterInfo::getRegisterNumbering(MO.getReg());
More information about the llvm-commits
mailing list