diff options
| author | Evan Cheng <evan.cheng@apple.com> | 2008-11-07 09:02:17 +0000 |
|---|---|---|
| committer | Evan Cheng <evan.cheng@apple.com> | 2008-11-07 09:02:17 +0000 |
| commit | 00203155addfd44d2ca6ca0ac9e89e6291632fde (patch) | |
| tree | 80fd1ab553457e0dec8c3fbc1de15b93f51bce0f /llvm/lib/ExecutionEngine | |
| parent | a2d1605ac3f4bb83d7d3bff7c716903781c4918e (diff) | |
| download | bcm5719-llvm-00203155addfd44d2ca6ca0ac9e89e6291632fde.tar.gz bcm5719-llvm-00203155addfd44d2ca6ca0ac9e89e6291632fde.zip | |
Jump tables may be emitted by target.
llvm-svn: 58835
Diffstat (limited to 'llvm/lib/ExecutionEngine')
| -rw-r--r-- | llvm/lib/ExecutionEngine/JIT/JITEmitter.cpp | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/llvm/lib/ExecutionEngine/JIT/JITEmitter.cpp b/llvm/lib/ExecutionEngine/JIT/JITEmitter.cpp index 51efcadf731..4ee82fd38e7 100644 --- a/llvm/lib/ExecutionEngine/JIT/JITEmitter.cpp +++ b/llvm/lib/ExecutionEngine/JIT/JITEmitter.cpp @@ -35,9 +35,9 @@ #include "llvm/System/Disassembler.h" #include "llvm/System/Memory.h" #include "llvm/Target/TargetInstrInfo.h" +#include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/Statistic.h" #include <algorithm> -#include <set> #ifndef NDEBUG #include <iomanip> #endif @@ -485,7 +485,7 @@ namespace { MachineModuleInfo* MMI; // GVSet - a set to keep track of which globals have been seen - std::set<const GlobalVariable*> GVSet; + SmallPtrSet<const GlobalVariable*, 8> GVSet; public: JITEmitter(JIT &jit, JITMemoryManager *JMM) : Resolver(jit) { @@ -728,7 +728,7 @@ unsigned JITEmitter::addSizeOfGlobalsInConstantVal(const Constant *C, if (C->getType()->getTypeID() == Type::PointerTyID) if (const GlobalVariable* GV = dyn_cast<GlobalVariable>(C)) - if (GVSet.insert(GV).second) + if (GVSet.insert(GV)) Size = addSizeOfGlobal(GV, Size); return Size; @@ -780,7 +780,7 @@ unsigned JITEmitter::GetSizeOfGlobalsInBytes(MachineFunction &MF) { // assuming the addresses of the new globals in this module // start at 0 (or something) and adjusting them after codegen // complete. Another possibility is to grab a marker bit in GV. - if (GVSet.insert(GV).second) + if (GVSet.insert(GV)) // A variable as yet unseen. Add in its size. Size = addSizeOfGlobal(GV, Size); } @@ -790,7 +790,7 @@ unsigned JITEmitter::GetSizeOfGlobalsInBytes(MachineFunction &MF) { DOUT << "JIT: About to look through initializers\n"; // Look for more globals that are referenced only from initializers. // GVSet.end is computed each time because the set can grow as we go. - for (std::set<const GlobalVariable *>::iterator I = GVSet.begin(); + for (SmallPtrSet<const GlobalVariable *, 8>::iterator I = GVSet.begin(); I != GVSet.end(); I++) { const GlobalVariable* GV = *I; if (GV->hasInitializer()) @@ -1022,11 +1022,9 @@ void* JITEmitter::allocateSpace(intptr_t Size, unsigned Alignment) { } void JITEmitter::emitConstantPool(MachineConstantPool *MCP) { - if (TheJIT->getJITInfo().hasCustomConstantPool()) { - DOUT << "JIT: Target has custom constant pool handling. Omitting standard " - "constant pool\n"; + if (TheJIT->getJITInfo().hasCustomConstantPool()) return; - } + const std::vector<MachineConstantPoolEntry> &Constants = MCP->getConstants(); if (Constants.empty()) return; @@ -1060,6 +1058,9 @@ void JITEmitter::emitConstantPool(MachineConstantPool *MCP) { } void JITEmitter::initJumpTableInfo(MachineJumpTableInfo *MJTI) { + if (TheJIT->getJITInfo().hasCustomJumpTables()) + return; + const std::vector<MachineJumpTableEntry> &JT = MJTI->getJumpTables(); if (JT.empty()) return; @@ -1077,6 +1078,9 @@ void JITEmitter::initJumpTableInfo(MachineJumpTableInfo *MJTI) { } void JITEmitter::emitJumpTableInfo(MachineJumpTableInfo *MJTI) { + if (TheJIT->getJITInfo().hasCustomJumpTables()) + return; + const std::vector<MachineJumpTableEntry> &JT = MJTI->getJumpTables(); if (JT.empty() || JumpTableBase == 0) return; |

