diff options
-rw-r--r-- | llvm/include/llvm/ExecutionEngine/Orc/JITTargetMachineBuilder.h | 12 | ||||
-rw-r--r-- | llvm/tools/lli/lli.cpp | 7 |
2 files changed, 13 insertions, 6 deletions
diff --git a/llvm/include/llvm/ExecutionEngine/Orc/JITTargetMachineBuilder.h b/llvm/include/llvm/ExecutionEngine/Orc/JITTargetMachineBuilder.h index 327941d52fe..eb9b6bf2dea 100644 --- a/llvm/include/llvm/ExecutionEngine/Orc/JITTargetMachineBuilder.h +++ b/llvm/include/llvm/ExecutionEngine/Orc/JITTargetMachineBuilder.h @@ -56,6 +56,18 @@ public: /// also be registered. Expected<std::unique_ptr<TargetMachine>> createTargetMachine(); + /// Get the default DataLayout for the target. + /// + /// Note: This is reasonably expensive, as it creates a temporary + /// TargetMachine instance under the hood. It is only suitable for use during + /// JIT setup. + Expected<DataLayout> getDefaultDataLayoutForTarget() { + auto TM = createTargetMachine(); + if (!TM) + return TM.takeError(); + return (*TM)->createDataLayout(); + } + /// Set the CPU string. JITTargetMachineBuilder &setCPU(std::string CPU) { this->CPU = std::move(CPU); diff --git a/llvm/tools/lli/lli.cpp b/llvm/tools/lli/lli.cpp index 9b3c7478b41..b23733eac99 100644 --- a/llvm/tools/lli/lli.cpp +++ b/llvm/tools/lli/lli.cpp @@ -786,12 +786,7 @@ int runOrcLazyJIT(const char *ProgName) { ? Optional<CodeModel::Model>(CMModel) : None); - DataLayout DL(""); - { - // Create a throwaway TargetMachine to get the data layout. - auto TM = ExitOnErr(JTMB.createTargetMachine()); - DL = TM->createDataLayout(); - } + DataLayout DL = ExitOnErr(JTMB.getDefaultDataLayoutForTarget()); auto J = ExitOnErr(orc::LLLazyJIT::Create(std::move(JTMB), DL, LazyJITCompileThreads)); if (PerModuleLazy) |