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()); _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits