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 | 47c01a0099c10c031f8c544baf44b1c3a1de3fad (patch) | |
tree | ef7a9e39ef69d20451bcaf0afa1b0aee56ed9b8e /lib/ExecutionEngine/JIT | |
parent | a27b3532e2abd8a5f9972db9d64441d6544798cb (diff) | |
download | external_llvm-47c01a0099c10c031f8c544baf44b1c3a1de3fad.zip external_llvm-47c01a0099c10c031f8c544baf44b1c3a1de3fad.tar.gz external_llvm-47c01a0099c10c031f8c544baf44b1c3a1de3fad.tar.bz2 |
Jump tables may be emitted by target.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@58835 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/ExecutionEngine/JIT')
-rw-r--r-- | lib/ExecutionEngine/JIT/JITEmitter.cpp | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/lib/ExecutionEngine/JIT/JITEmitter.cpp b/lib/ExecutionEngine/JIT/JITEmitter.cpp index 51efcad..4ee82fd 100644 --- a/lib/ExecutionEngine/JIT/JITEmitter.cpp +++ b/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; |