diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2020-01-22 20:31:01 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2020-01-22 20:31:01 +0000 | 
| commit | 8bcb0991864975618c09697b1aca10683346d9f0 (patch) | |
| tree | 0afab28faa50e5f27698f8dd6c1921fff8d25e39 /contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/ThreadSafeModule.cpp | |
| parent | b14637d118e110006a149a79b649c5695e7f419a (diff) | |
| parent | 1d5ae1026e831016fc29fd927877c86af904481f (diff) | |
Notes
Diffstat (limited to 'contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/ThreadSafeModule.cpp')
| -rw-r--r-- | contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/ThreadSafeModule.cpp | 58 | 
1 files changed, 29 insertions, 29 deletions
diff --git a/contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/ThreadSafeModule.cpp b/contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/ThreadSafeModule.cpp index 4cb7376758a7..1f4e6f132115 100644 --- a/contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/ThreadSafeModule.cpp +++ b/contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/ThreadSafeModule.cpp @@ -23,41 +23,41 @@ ThreadSafeModule cloneToNewContext(ThreadSafeModule &TSM,    if (!ShouldCloneDef)      ShouldCloneDef = [](const GlobalValue &) { return true; }; -  auto Lock = TSM.getContextLock(); +  return TSM.withModuleDo([&](Module &M) { +    SmallVector<char, 1> ClonedModuleBuffer; -  SmallVector<char, 1> ClonedModuleBuffer; +    { +      std::set<GlobalValue *> ClonedDefsInSrc; +      ValueToValueMapTy VMap; +      auto Tmp = CloneModule(M, VMap, [&](const GlobalValue *GV) { +        if (ShouldCloneDef(*GV)) { +          ClonedDefsInSrc.insert(const_cast<GlobalValue *>(GV)); +          return true; +        } +        return false; +      }); -  { -    std::set<GlobalValue *> ClonedDefsInSrc; -    ValueToValueMapTy VMap; -    auto Tmp = CloneModule(*TSM.getModule(), VMap, [&](const GlobalValue *GV) { -      if (ShouldCloneDef(*GV)) { -        ClonedDefsInSrc.insert(const_cast<GlobalValue *>(GV)); -        return true; -      } -      return false; -    }); +      if (UpdateClonedDefSource) +        for (auto *GV : ClonedDefsInSrc) +          UpdateClonedDefSource(*GV); -    if (UpdateClonedDefSource) -      for (auto *GV : ClonedDefsInSrc) -        UpdateClonedDefSource(*GV); +      BitcodeWriter BCWriter(ClonedModuleBuffer); -    BitcodeWriter BCWriter(ClonedModuleBuffer); +      BCWriter.writeModule(*Tmp); +      BCWriter.writeSymtab(); +      BCWriter.writeStrtab(); +    } -    BCWriter.writeModule(*Tmp); -    BCWriter.writeSymtab(); -    BCWriter.writeStrtab(); -  } +    MemoryBufferRef ClonedModuleBufferRef( +        StringRef(ClonedModuleBuffer.data(), ClonedModuleBuffer.size()), +        "cloned module buffer"); +    ThreadSafeContext NewTSCtx(std::make_unique<LLVMContext>()); -  MemoryBufferRef ClonedModuleBufferRef( -      StringRef(ClonedModuleBuffer.data(), ClonedModuleBuffer.size()), -      "cloned module buffer"); -  ThreadSafeContext NewTSCtx(llvm::make_unique<LLVMContext>()); - -  auto ClonedModule = -      cantFail(parseBitcodeFile(ClonedModuleBufferRef, *NewTSCtx.getContext())); -  ClonedModule->setModuleIdentifier(TSM.getModule()->getName()); -  return ThreadSafeModule(std::move(ClonedModule), std::move(NewTSCtx)); +    auto ClonedModule = cantFail( +        parseBitcodeFile(ClonedModuleBufferRef, *NewTSCtx.getContext())); +    ClonedModule->setModuleIdentifier(M.getName()); +    return ThreadSafeModule(std::move(ClonedModule), std::move(NewTSCtx)); +  });  }  } // end namespace orc  | 
