diff options
author | Stephen Hines <srhines@google.com> | 2014-12-01 14:51:49 -0800 |
---|---|---|
committer | Stephen Hines <srhines@google.com> | 2014-12-02 16:08:10 -0800 |
commit | 37ed9c199ca639565f6ce88105f9e39e898d82d0 (patch) | |
tree | 8fb36d3910e3ee4c4e1b7422f4f017108efc52f5 /tools/lli | |
parent | d2327b22152ced7bc46dc629fc908959e8a52d03 (diff) | |
download | external_llvm-37ed9c199ca639565f6ce88105f9e39e898d82d0.zip external_llvm-37ed9c199ca639565f6ce88105f9e39e898d82d0.tar.gz external_llvm-37ed9c199ca639565f6ce88105f9e39e898d82d0.tar.bz2 |
Update aosp/master LLVM for rebase to r222494.
Change-Id: Ic787f5e0124df789bd26f3f24680f45e678eef2d
Diffstat (limited to 'tools/lli')
-rw-r--r-- | tools/lli/Android.mk | 1 | ||||
-rw-r--r-- | tools/lli/CMakeLists.txt | 3 | ||||
-rw-r--r-- | tools/lli/LLVMBuild.txt | 2 | ||||
-rw-r--r-- | tools/lli/Makefile | 2 | ||||
-rw-r--r-- | tools/lli/RPCChannel.h | 6 | ||||
-rw-r--r-- | tools/lli/RemoteMemoryManager.cpp | 33 | ||||
-rw-r--r-- | tools/lli/RemoteMemoryManager.h | 24 | ||||
-rw-r--r-- | tools/lli/RemoteTarget.h | 4 | ||||
-rw-r--r-- | tools/lli/RemoteTargetExternal.h | 6 | ||||
-rw-r--r-- | tools/lli/RemoteTargetMessage.h | 4 | ||||
-rw-r--r-- | tools/lli/lli.cpp | 106 |
11 files changed, 60 insertions, 131 deletions
diff --git a/tools/lli/Android.mk b/tools/lli/Android.mk index f550f93..1b09102 100644 --- a/tools/lli/Android.mk +++ b/tools/lli/Android.mk @@ -44,7 +44,6 @@ lli_STATIC_LIBRARIES := \ libLLVMX86Disassembler \ libLLVMAsmPrinter \ libLLVMSelectionDAG \ - libLLVMJIT \ libLLVMCodeGen \ libLLVMInstrumentation \ libLLVMExecutionEngine \ diff --git a/tools/lli/CMakeLists.txt b/tools/lli/CMakeLists.txt index 731b61a..3610d76 100644 --- a/tools/lli/CMakeLists.txt +++ b/tools/lli/CMakeLists.txt @@ -7,8 +7,9 @@ set(LLVM_LINK_COMPONENTS IRReader Instrumentation Interpreter - JIT + MC MCJIT + Object SelectionDAG Support native diff --git a/tools/lli/LLVMBuild.txt b/tools/lli/LLVMBuild.txt index aab2a20..4c14c47 100644 --- a/tools/lli/LLVMBuild.txt +++ b/tools/lli/LLVMBuild.txt @@ -22,4 +22,4 @@ subdirectories = ChildTarget type = Tool name = lli parent = Tools -required_libraries = AsmParser BitReader IRReader Instrumentation Interpreter JIT MCJIT NativeCodeGen SelectionDAG Native +required_libraries = AsmParser BitReader IRReader Instrumentation Interpreter MCJIT NativeCodeGen SelectionDAG Native diff --git a/tools/lli/Makefile b/tools/lli/Makefile index eca5d83..94d6f06 100644 --- a/tools/lli/Makefile +++ b/tools/lli/Makefile @@ -14,7 +14,7 @@ PARALLEL_DIRS := ChildTarget include $(LEVEL)/Makefile.config -LINK_COMPONENTS := mcjit jit instrumentation interpreter nativecodegen bitreader asmparser irreader selectiondag native +LINK_COMPONENTS := mcjit instrumentation interpreter nativecodegen bitreader asmparser irreader selectiondag native # If Intel JIT Events support is confiured, link against the LLVM Intel JIT # Events interface library diff --git a/tools/lli/RPCChannel.h b/tools/lli/RPCChannel.h index 2d8c708..ebd3c65 100644 --- a/tools/lli/RPCChannel.h +++ b/tools/lli/RPCChannel.h @@ -12,8 +12,8 @@ // //===----------------------------------------------------------------------===// -#ifndef LLI_RPCCHANNEL_H -#define LLI_RPCCHANNEL_H +#ifndef LLVM_TOOLS_LLI_RPCCHANNEL_H +#define LLVM_TOOLS_LLI_RPCCHANNEL_H #include <stdlib.h> #include <string> @@ -46,4 +46,4 @@ public: } // end namespace llvm -#endif // LLI_RPCCHANNEL_H +#endif diff --git a/tools/lli/RemoteMemoryManager.cpp b/tools/lli/RemoteMemoryManager.cpp index 4816517..5a135ea 100644 --- a/tools/lli/RemoteMemoryManager.cpp +++ b/tools/lli/RemoteMemoryManager.cpp @@ -172,36 +172,3 @@ bool RemoteMemoryManager::finalizeMemory(std::string *ErrMsg) { return false; } - -void RemoteMemoryManager::setMemoryWritable() { llvm_unreachable("Unexpected!"); } -void RemoteMemoryManager::setMemoryExecutable() { llvm_unreachable("Unexpected!"); } -void RemoteMemoryManager::setPoisonMemory(bool poison) { llvm_unreachable("Unexpected!"); } -void RemoteMemoryManager::AllocateGOT() { llvm_unreachable("Unexpected!"); } -uint8_t *RemoteMemoryManager::getGOTBase() const { - llvm_unreachable("Unexpected!"); - return nullptr; -} -uint8_t *RemoteMemoryManager::startFunctionBody(const Function *F, uintptr_t &ActualSize){ - llvm_unreachable("Unexpected!"); - return nullptr; -} -uint8_t *RemoteMemoryManager::allocateStub(const GlobalValue* F, unsigned StubSize, - unsigned Alignment) { - llvm_unreachable("Unexpected!"); - return nullptr; -} -void RemoteMemoryManager::endFunctionBody(const Function *F, uint8_t *FunctionStart, - uint8_t *FunctionEnd) { - llvm_unreachable("Unexpected!"); -} -uint8_t *RemoteMemoryManager::allocateSpace(intptr_t Size, unsigned Alignment) { - llvm_unreachable("Unexpected!"); - return nullptr; -} -uint8_t *RemoteMemoryManager::allocateGlobal(uintptr_t Size, unsigned Alignment) { - llvm_unreachable("Unexpected!"); - return nullptr; -} -void RemoteMemoryManager::deallocateFunctionBody(void *Body) { - llvm_unreachable("Unexpected!"); -} diff --git a/tools/lli/RemoteMemoryManager.h b/tools/lli/RemoteMemoryManager.h index cf5d7c6..0bdb4e2 100644 --- a/tools/lli/RemoteMemoryManager.h +++ b/tools/lli/RemoteMemoryManager.h @@ -12,20 +12,20 @@ // //===----------------------------------------------------------------------===// -#ifndef REMOTEMEMORYMANAGER_H -#define REMOTEMEMORYMANAGER_H +#ifndef LLVM_TOOLS_LLI_REMOTEMEMORYMANAGER_H +#define LLVM_TOOLS_LLI_REMOTEMEMORYMANAGER_H #include "RemoteTarget.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/SmallVector.h" -#include "llvm/ExecutionEngine/JITMemoryManager.h" +#include "llvm/ExecutionEngine/RTDyldMemoryManager.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/Memory.h" #include <utility> namespace llvm { -class RemoteMemoryManager : public JITMemoryManager { +class RemoteMemoryManager : public RTDyldMemoryManager { public: // Notice that this structure takes ownership of the memory allocated. struct Allocation { @@ -93,22 +93,6 @@ public: // This is a non-interface function used by lli void setRemoteTarget(RemoteTarget *T) { Target = T; } - - // The following obsolete JITMemoryManager calls are stubbed out for - // this model. - void setMemoryWritable() override; - void setMemoryExecutable() override; - void setPoisonMemory(bool poison) override; - void AllocateGOT() override; - uint8_t *getGOTBase() const override; - uint8_t *startFunctionBody(const Function *F, uintptr_t &ActualSize) override; - uint8_t *allocateStub(const GlobalValue* F, unsigned StubSize, - unsigned Alignment) override; - void endFunctionBody(const Function *F, uint8_t *FunctionStart, - uint8_t *FunctionEnd) override; - uint8_t *allocateSpace(intptr_t Size, unsigned Alignment) override; - uint8_t *allocateGlobal(uintptr_t Size, unsigned Alignment) override; - void deallocateFunctionBody(void *Body) override; }; } // end namespace llvm diff --git a/tools/lli/RemoteTarget.h b/tools/lli/RemoteTarget.h index 73e8ae2..ee758a2 100644 --- a/tools/lli/RemoteTarget.h +++ b/tools/lli/RemoteTarget.h @@ -12,8 +12,8 @@ // //===----------------------------------------------------------------------===// -#ifndef REMOTEPROCESS_H -#define REMOTEPROCESS_H +#ifndef LLVM_TOOLS_LLI_REMOTETARGET_H +#define LLVM_TOOLS_LLI_REMOTETARGET_H #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringRef.h" diff --git a/tools/lli/RemoteTargetExternal.h b/tools/lli/RemoteTargetExternal.h index f87fc61..bb621f5 100644 --- a/tools/lli/RemoteTargetExternal.h +++ b/tools/lli/RemoteTargetExternal.h @@ -12,8 +12,8 @@ // //===----------------------------------------------------------------------===// -#ifndef LLI_REMOTETARGETEXTERNAL_H -#define LLI_REMOTETARGETEXTERNAL_H +#ifndef LLVM_TOOLS_LLI_REMOTETARGETEXTERNAL_H +#define LLVM_TOOLS_LLI_REMOTETARGETEXTERNAL_H #include "RPCChannel.h" #include "RemoteTarget.h" @@ -140,4 +140,4 @@ private: } // end namespace llvm -#endif // LLI_REMOTETARGETEXTERNAL_H +#endif diff --git a/tools/lli/RemoteTargetMessage.h b/tools/lli/RemoteTargetMessage.h index cb934a1..c210e4b 100644 --- a/tools/lli/RemoteTargetMessage.h +++ b/tools/lli/RemoteTargetMessage.h @@ -12,8 +12,8 @@ // //===----------------------------------------------------------------------===// -#ifndef LLI_REMOTETARGETMESSAGE_H -#define LLI_REMOTETARGETMESSAGE_H +#ifndef LLVM_TOOLS_LLI_REMOTETARGETMESSAGE_H +#define LLVM_TOOLS_LLI_REMOTETARGETMESSAGE_H namespace llvm { diff --git a/tools/lli/lli.cpp b/tools/lli/lli.cpp index 48828c1..276740b 100644 --- a/tools/lli/lli.cpp +++ b/tools/lli/lli.cpp @@ -22,9 +22,7 @@ #include "llvm/CodeGen/LinkAllCodegenComponents.h" #include "llvm/ExecutionEngine/GenericValue.h" #include "llvm/ExecutionEngine/Interpreter.h" -#include "llvm/ExecutionEngine/JIT.h" #include "llvm/ExecutionEngine/JITEventListener.h" -#include "llvm/ExecutionEngine/JITMemoryManager.h" #include "llvm/ExecutionEngine/MCJIT.h" #include "llvm/ExecutionEngine/ObjectCache.h" #include "llvm/ExecutionEngine/SectionMemoryManager.h" @@ -76,10 +74,6 @@ namespace { cl::desc("Force interpretation: disable JIT"), cl::init(false)); - cl::opt<bool> UseMCJIT( - "use-mcjit", cl::desc("Enable use of the MC-based JIT (if available)"), - cl::init(false)); - cl::opt<bool> DebugIR( "debug-ir", cl::desc("Generate debug information to allow debugging IR."), cl::init(false)); @@ -263,23 +257,23 @@ public: } virtual ~LLIObjectCache() {} - void notifyObjectCompiled(const Module *M, const MemoryBuffer *Obj) override { + void notifyObjectCompiled(const Module *M, MemoryBufferRef Obj) override { const std::string ModuleID = M->getModuleIdentifier(); std::string CacheName; if (!getCacheFilename(ModuleID, CacheName)) return; - std::string errStr; if (!CacheDir.empty()) { // Create user-defined cache dir. SmallString<128> dir(CacheName); sys::path::remove_filename(dir); sys::fs::create_directories(Twine(dir)); } - raw_fd_ostream outfile(CacheName.c_str(), errStr, sys::fs::F_None); - outfile.write(Obj->getBufferStart(), Obj->getBufferSize()); + std::error_code EC; + raw_fd_ostream outfile(CacheName, EC, sys::fs::F_None); + outfile.write(Obj.getBufferStart(), Obj.getBufferSize()); outfile.close(); } - MemoryBuffer* getObject(const Module* M) override { + std::unique_ptr<MemoryBuffer> getObject(const Module* M) override { const std::string ModuleID = M->getModuleIdentifier(); std::string CacheName; if (!getCacheFilename(ModuleID, CacheName)) @@ -345,7 +339,7 @@ static void addCygMingExtraModule(ExecutionEngine *EE, Triple TargetTriple(TargetTripleStr); // Create a new module. - Module *M = new Module("CygMingHelper", Context); + std::unique_ptr<Module> M = make_unique<Module>("CygMingHelper", Context); M->setTargetTriple(TargetTripleStr); // Create an empty function named "__main". @@ -353,11 +347,11 @@ static void addCygMingExtraModule(ExecutionEngine *EE, if (TargetTriple.isArch64Bit()) { Result = Function::Create( TypeBuilder<int64_t(void), false>::get(Context), - GlobalValue::ExternalLinkage, "__main", M); + GlobalValue::ExternalLinkage, "__main", M.get()); } else { Result = Function::Create( TypeBuilder<int32_t(void), false>::get(Context), - GlobalValue::ExternalLinkage, "__main", M); + GlobalValue::ExternalLinkage, "__main", M.get()); } BasicBlock *BB = BasicBlock::Create(Context, "__main", Result); Builder.SetInsertPoint(BB); @@ -369,7 +363,7 @@ static void addCygMingExtraModule(ExecutionEngine *EE, Builder.CreateRet(ReturnVal); // Add this new module to the ExecutionEngine. - EE->addModule(M); + EE->addModule(std::move(M)); } @@ -398,19 +392,17 @@ int main(int argc, char **argv, char * const *envp) { // Load the bitcode... SMDiagnostic Err; - Module *Mod = ParseIRFile(InputFile, Err, Context); + std::unique_ptr<Module> Owner = parseIRFile(InputFile, Err, Context); + Module *Mod = Owner.get(); if (!Mod) { Err.print(argv[0], errs()); return 1; } if (EnableCacheManager) { - if (UseMCJIT) { - std::string CacheName("file:"); - CacheName.append(InputFile); - Mod->setModuleIdentifier(CacheName); - } else - errs() << "warning: -enable-cache-manager can only be used with MCJIT."; + std::string CacheName("file:"); + CacheName.append(InputFile); + Mod->setModuleIdentifier(CacheName); } // If not jitting lazily, load the whole bitcode file eagerly too. @@ -423,18 +415,12 @@ int main(int argc, char **argv, char * const *envp) { } if (DebugIR) { - if (!UseMCJIT) { - errs() << "warning: -debug-ir used without -use-mcjit. Only partial debug" - << " information will be emitted by the non-MC JIT engine. To see full" - << " source debug information, enable the flag '-use-mcjit'.\n"; - - } ModulePass *DebugIRPass = createDebugIRPass(); DebugIRPass->runOnModule(*Mod); } std::string ErrorMsg; - EngineBuilder builder(Mod); + EngineBuilder builder(std::move(Owner)); builder.setMArch(MArch); builder.setMCPU(MCPU); builder.setMAttrs(MAttrs); @@ -451,20 +437,16 @@ int main(int argc, char **argv, char * const *envp) { // Enable MCJIT if desired. RTDyldMemoryManager *RTDyldMM = nullptr; - if (UseMCJIT && !ForceInterpreter) { - builder.setUseMCJIT(true); + if (!ForceInterpreter) { if (RemoteMCJIT) RTDyldMM = new RemoteMemoryManager(); else RTDyldMM = new SectionMemoryManager(); builder.setMCJITMemoryManager(RTDyldMM); - } else { - if (RemoteMCJIT) { - errs() << "error: Remote process execution requires -use-mcjit\n"; - exit(1); - } - builder.setJITMemoryManager(ForceInterpreter ? nullptr : - JITMemoryManager::CreateDefaultMemManager()); + } else if (RemoteMCJIT) { + errs() << "error: Remote process execution does not work with the " + "interpreter.\n"; + exit(1); } CodeGenOpt::Level OLvl = CodeGenOpt::Default; @@ -511,46 +493,50 @@ int main(int argc, char **argv, char * const *envp) { // Load any additional modules specified on the command line. for (unsigned i = 0, e = ExtraModules.size(); i != e; ++i) { - Module *XMod = ParseIRFile(ExtraModules[i], Err, Context); + std::unique_ptr<Module> XMod = parseIRFile(ExtraModules[i], Err, Context); if (!XMod) { Err.print(argv[0], errs()); return 1; } if (EnableCacheManager) { - if (UseMCJIT) { - std::string CacheName("file:"); - CacheName.append(ExtraModules[i]); - XMod->setModuleIdentifier(CacheName); - } - // else, we already printed a warning above. + std::string CacheName("file:"); + CacheName.append(ExtraModules[i]); + XMod->setModuleIdentifier(CacheName); } - EE->addModule(XMod); + EE->addModule(std::move(XMod)); } for (unsigned i = 0, e = ExtraObjects.size(); i != e; ++i) { - ErrorOr<object::ObjectFile *> Obj = + ErrorOr<object::OwningBinary<object::ObjectFile>> Obj = object::ObjectFile::createObjectFile(ExtraObjects[i]); if (!Obj) { Err.print(argv[0], errs()); return 1; } - EE->addObjectFile(std::unique_ptr<object::ObjectFile>(Obj.get())); + object::OwningBinary<object::ObjectFile> &O = Obj.get(); + EE->addObjectFile(std::move(O)); } for (unsigned i = 0, e = ExtraArchives.size(); i != e; ++i) { - ErrorOr<std::unique_ptr<MemoryBuffer>> ArBuf = + ErrorOr<std::unique_ptr<MemoryBuffer>> ArBufOrErr = MemoryBuffer::getFileOrSTDIN(ExtraArchives[i]); - if (!ArBuf) { + if (!ArBufOrErr) { Err.print(argv[0], errs()); return 1; } - std::error_code EC; - object::Archive *Ar = new object::Archive(std::move(ArBuf.get()), EC); - if (EC || !Ar) { - Err.print(argv[0], errs()); + std::unique_ptr<MemoryBuffer> &ArBuf = ArBufOrErr.get(); + + ErrorOr<std::unique_ptr<object::Archive>> ArOrErr = + object::Archive::create(ArBuf->getMemBufferRef()); + if (std::error_code EC = ArOrErr.getError()) { + errs() << EC.message(); return 1; } - EE->addArchive(Ar); + std::unique_ptr<object::Archive> &Ar = ArOrErr.get(); + + object::OwningBinary<object::Archive> OB(std::move(Ar), std::move(ArBuf)); + + EE->addArchive(std::move(OB)); } // If the target is Cygwin/MingW and we are generating remote code, we @@ -610,20 +596,12 @@ int main(int argc, char **argv, char * const *envp) { NULL); // Run static constructors. - if (UseMCJIT && !ForceInterpreter) { + if (!ForceInterpreter) { // Give MCJIT a chance to apply relocations and set page permissions. EE->finalizeObject(); } EE->runStaticConstructorsDestructors(false); - if (!UseMCJIT && NoLazyCompilation) { - for (Module::iterator I = Mod->begin(), E = Mod->end(); I != E; ++I) { - Function *Fn = &*I; - if (Fn != EntryFn && !Fn->isDeclaration()) - EE->getPointerToFunction(Fn); - } - } - // Trigger compilation separately so code regions that need to be // invalidated will be known. (void)EE->getPointerToFunction(EntryFn); |