diff --git a/llvm/include/llvm/ExecutionEngine/Orc/JITTargetMachineBuilder.h b/llvm/include/llvm/ExecutionEngine/Orc/JITTargetMachineBuilder.h index 327941d52fe2..eb9b6bf2dea6 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> 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 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 9b3c7478b412..b23733eac995 100644 --- a/llvm/tools/lli/lli.cpp +++ b/llvm/tools/lli/lli.cpp @@ -786,12 +786,7 @@ int runOrcLazyJIT(const char *ProgName) { ? Optional(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)