summaryrefslogtreecommitdiffstats
path: root/llvm/lib/ExecutionEngine
diff options
context:
space:
mode:
authorLang Hames <lhames@gmail.com>2018-07-02 22:30:18 +0000
committerLang Hames <lhames@gmail.com>2018-07-02 22:30:18 +0000
commitadae9bfa243713a781ecad6e07759e57dc2c7f52 (patch)
tree22a5695b8cf1a1ecc028edcdccc66fd173895afa /llvm/lib/ExecutionEngine
parent9f02a94dad81f6f2adb775a1b34c9c30e2b9887f (diff)
downloadbcm5719-llvm-adae9bfa243713a781ecad6e07759e57dc2c7f52.tar.gz
bcm5719-llvm-adae9bfa243713a781ecad6e07759e57dc2c7f52.zip
[ORC] Verify modules when running LLLazyJIT in LLI, and deal with fallout.
The verifier identified several modules that were broken due to incorrect linkage on declarations. To fix this, CompileOnDemandLayer2::extractFunction has been updated to change decls to external linkage. llvm-svn: 336150
Diffstat (limited to 'llvm/lib/ExecutionEngine')
-rw-r--r--llvm/lib/ExecutionEngine/Orc/CompileOnDemandLayer.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/llvm/lib/ExecutionEngine/Orc/CompileOnDemandLayer.cpp b/llvm/lib/ExecutionEngine/Orc/CompileOnDemandLayer.cpp
index 27a4ad68f59..f7ff40cf802 100644
--- a/llvm/lib/ExecutionEngine/Orc/CompileOnDemandLayer.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/CompileOnDemandLayer.cpp
@@ -322,11 +322,15 @@ std::unique_ptr<Module> CompileOnDemandLayer2::extractFunctions(
ValueToValueMapTy VMap;
auto Materializer = createLambdaValueMaterializer([&](Value *V) -> Value * {
+ GlobalValue *NewGV = nullptr;
if (auto *F = dyn_cast<Function>(V))
- return cloneFunctionDecl(*ExtractedFunctionsModule, *F);
+ NewGV = cloneFunctionDecl(*ExtractedFunctionsModule, *F);
else if (auto *GV = dyn_cast<GlobalVariable>(V))
- return cloneGlobalVariableDecl(*ExtractedFunctionsModule, *GV);
- return nullptr;
+ NewGV = cloneGlobalVariableDecl(*ExtractedFunctionsModule, *GV);
+
+ if (NewGV)
+ NewGV->setLinkage(GlobalValue::ExternalLinkage);
+ return NewGV;
});
std::vector<std::pair<Function *, Function *>> OrigToNew;
OpenPOWER on IntegriCloud