diff options
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/include/llvm/ExecutionEngine/Orc/JITTargetMachineBuilder.h | 6 | ||||
| -rw-r--r-- | llvm/lib/ExecutionEngine/Orc/LLJIT.cpp | 10 |
2 files changed, 13 insertions, 3 deletions
diff --git a/llvm/include/llvm/ExecutionEngine/Orc/JITTargetMachineBuilder.h b/llvm/include/llvm/ExecutionEngine/Orc/JITTargetMachineBuilder.h index c8c4ecdaff1..4f2f5577099 100644 --- a/llvm/include/llvm/ExecutionEngine/Orc/JITTargetMachineBuilder.h +++ b/llvm/include/llvm/ExecutionEngine/Orc/JITTargetMachineBuilder.h @@ -79,12 +79,18 @@ public: return *this; } + /// Get the relocation model. + const Optional<Reloc::Model> &getRelocationModel() const { return RM; } + /// Set the code model. JITTargetMachineBuilder &setCodeModel(Optional<CodeModel::Model> CM) { this->CM = std::move(CM); return *this; } + /// Get the code model. + const Optional<CodeModel::Model> &getCodeModel() const { return CM; } + /// Set the LLVM CodeGen optimization level. JITTargetMachineBuilder &setCodeGenOptLevel(CodeGenOpt::Level OptLevel) { this->OptLevel = OptLevel; diff --git a/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp b/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp index 5c393739f40..54473ab4642 100644 --- a/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp +++ b/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp @@ -24,11 +24,15 @@ Error LLJITBuilderState::prepareForConstruction() { JTMB = std::move(*JTMBOrErr); else return JTMBOrErr.takeError(); + } + + // If the client didn't configure any linker options then auto-configure the + // JIT linker. + if (!CreateObjectLinkingLayer && JTMB->getCodeModel() == None && + JTMB->getRelocationModel() == None) { - // If no ObjectLinkingLayer creator was set and the target supports JITLink - // then configure for JITLink. auto &TT = JTMB->getTargetTriple(); - if (!CreateObjectLinkingLayer && TT.isOSBinFormatMachO() && + if (TT.isOSBinFormatMachO() && (TT.getArch() == Triple::aarch64 || TT.getArch() == Triple::x86_64)) { JTMB->setRelocationModel(Reloc::PIC_); |

