[llvm-commits] CVS: llvm/lib/Target/X86/X86CodeEmitter.cpp

Chris Lattner lattner at cs.uiuc.edu
Tue May 2 17:28:30 PDT 2006



Changes in directory llvm/lib/Target/X86:

X86CodeEmitter.cpp updated: 1.98 -> 1.99
---
Log message:

Change the BasicBlockAddrs map to be a vector, indexed by MBB number.


---
Diffs of the changes:  (+8 -7)

 X86CodeEmitter.cpp |   15 ++++++++-------
 1 files changed, 8 insertions(+), 7 deletions(-)


Index: llvm/lib/Target/X86/X86CodeEmitter.cpp
diff -u llvm/lib/Target/X86/X86CodeEmitter.cpp:1.98 llvm/lib/Target/X86/X86CodeEmitter.cpp:1.99
--- llvm/lib/Target/X86/X86CodeEmitter.cpp:1.98	Tue May  2 18:22:24 2006
+++ llvm/lib/Target/X86/X86CodeEmitter.cpp	Tue May  2 19:28:15 2006
@@ -35,7 +35,7 @@
   class Emitter : public MachineFunctionPass {
     const X86InstrInfo  *II;
     MachineCodeEmitter  &MCE;
-    std::map<MachineBasicBlock*, uint64_t> BasicBlockAddrs;
+    std::vector<uint64_t> BasicBlockAddrs;
     std::vector<std::pair<MachineBasicBlock *, unsigned> > BBRefs;
   public:
     explicit Emitter(MachineCodeEmitter &mce) : II(0), MCE(mce) {}
@@ -93,7 +93,7 @@
 
   // Resolve all forward branches now.
   for (unsigned i = 0, e = BBRefs.size(); i != e; ++i) {
-    unsigned Location = BasicBlockAddrs[BBRefs[i].first];
+    unsigned Location = BasicBlockAddrs[BBRefs[i].first->getNumber()];
     unsigned Ref = BBRefs[i].second;
     *((unsigned*)(intptr_t)Ref) = Location-Ref-4;
   }
@@ -103,8 +103,9 @@
 }
 
 void Emitter::emitBasicBlock(MachineBasicBlock &MBB) {
-  if (uint64_t Addr = MCE.getCurrentPCValue())
-    BasicBlockAddrs[&MBB] = Addr;
+  if (BasicBlockAddrs.size() <= (unsigned)MBB.getNumber())
+    BasicBlockAddrs.resize((MBB.getNumber()+1)*2);
+  BasicBlockAddrs[MBB.getNumber()] = MCE.getCurrentPCValue();
 
   for (MachineBasicBlock::const_iterator I = MBB.begin(), E = MBB.end();
        I != E; ++I)
@@ -125,9 +126,9 @@
 void Emitter::emitPCRelativeBlockAddress(MachineBasicBlock *MBB) {
   // If this is a backwards branch, we already know the address of the target,
   // so just emit the value.
-  std::map<MachineBasicBlock*,uint64_t>::iterator I = BasicBlockAddrs.find(MBB);
-  if (I != BasicBlockAddrs.end()) {
-    emitPCRelativeValue(I->second);
+  unsigned MBBNo = MBB->getNumber();
+  if (MBBNo < BasicBlockAddrs.size() && BasicBlockAddrs[MBBNo]) {
+    emitPCRelativeValue(BasicBlockAddrs[MBBNo]);
   } else {
     // Otherwise, remember where this reference was and where it is to so we can
     // deal with it later.






More information about the llvm-commits mailing list