diff options
author | Chris Lattner <sabre@nondot.org> | 2006-05-03 17:10:41 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2006-05-03 17:10:41 +0000 |
commit | b4432f3d4754e16c918428d34a9d8ec18ab79204 (patch) | |
tree | 3f8e76b0b2b61f8cd9317f1afd47cba1dc568985 /lib/Target/PowerPC/PPCCodeEmitter.cpp | |
parent | 5c488182daaf8e11789bd0a16528900ae4042dc2 (diff) | |
download | llvm-b4432f3d4754e16c918428d34a9d8ec18ab79204.tar.gz llvm-b4432f3d4754e16c918428d34a9d8ec18ab79204.tar.bz2 llvm-b4432f3d4754e16c918428d34a9d8ec18ab79204.tar.xz |
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28082 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/PowerPC/PPCCodeEmitter.cpp')
-rw-r--r-- | lib/Target/PowerPC/PPCCodeEmitter.cpp | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/lib/Target/PowerPC/PPCCodeEmitter.cpp b/lib/Target/PowerPC/PPCCodeEmitter.cpp index 69bd830785..9be0f1041c 100644 --- a/lib/Target/PowerPC/PPCCodeEmitter.cpp +++ b/lib/Target/PowerPC/PPCCodeEmitter.cpp @@ -33,9 +33,7 @@ namespace { // 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 @@ bool PPCCodeEmitter::runOnMachineFunction(MachineFunction &MF) { "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 @@ bool PPCCodeEmitter::runOnMachineFunction(MachineFunction &MF) { } } 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 @@ void PPCCodeEmitter::emitBasicBlock(MachineBasicBlock &MBB) { 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()); |