mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-12 06:06:19 +00:00
EngineBuilder::create is expected to take ownership of the TargetMachine passed to it. Delete it on error or when we create an interpreter that doesn't need it.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@154288 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
5e93a76722
commit
0f55449246
@ -448,6 +448,8 @@ ExecutionEngine *ExecutionEngine::createJIT(Module *M,
|
||||
}
|
||||
|
||||
ExecutionEngine *EngineBuilder::create(TargetMachine *TM) {
|
||||
OwningPtr<TargetMachine> TheTM(TM); // Take ownership.
|
||||
|
||||
// Make sure we can resolve symbols in the program as well. The zero arg
|
||||
// to the function tells DynamicLibrary to load the program, not a library.
|
||||
if (sys::DynamicLibrary::LoadLibraryPermanently(0, ErrorStr))
|
||||
@ -468,7 +470,7 @@ ExecutionEngine *EngineBuilder::create(TargetMachine *TM) {
|
||||
|
||||
// Unless the interpreter was explicitly selected or the JIT is not linked,
|
||||
// try making a JIT.
|
||||
if ((WhichEngine & EngineKind::JIT) && TM) {
|
||||
if ((WhichEngine & EngineKind::JIT) && TheTM) {
|
||||
Triple TT(M->getTargetTriple());
|
||||
if (!TM->getTarget().hasJIT()) {
|
||||
errs() << "WARNING: This target JIT is not designed for the host"
|
||||
@ -479,12 +481,12 @@ ExecutionEngine *EngineBuilder::create(TargetMachine *TM) {
|
||||
if (UseMCJIT && ExecutionEngine::MCJITCtor) {
|
||||
ExecutionEngine *EE =
|
||||
ExecutionEngine::MCJITCtor(M, ErrorStr, JMM,
|
||||
AllocateGVsWithCode, TM);
|
||||
AllocateGVsWithCode, TheTM.take());
|
||||
if (EE) return EE;
|
||||
} else if (ExecutionEngine::JITCtor) {
|
||||
ExecutionEngine *EE =
|
||||
ExecutionEngine::JITCtor(M, ErrorStr, JMM,
|
||||
AllocateGVsWithCode, TM);
|
||||
AllocateGVsWithCode, TheTM.take());
|
||||
if (EE) return EE;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user