summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/include/llvm/ExecutionEngine/Orc/Layer.h3
-rw-r--r--llvm/lib/ExecutionEngine/Orc/Layer.cpp10
2 files changed, 7 insertions, 6 deletions
diff --git a/llvm/include/llvm/ExecutionEngine/Orc/Layer.h b/llvm/include/llvm/ExecutionEngine/Orc/Layer.h
index 18dd4573119..ed839b518b7 100644
--- a/llvm/include/llvm/ExecutionEngine/Orc/Layer.h
+++ b/llvm/include/llvm/ExecutionEngine/Orc/Layer.h
@@ -63,11 +63,10 @@ public:
protected:
std::unique_ptr<Module> M;
+ std::map<SymbolStringPtr, GlobalValue *> SymbolToDefinition;
private:
void discard(const VSO &V, SymbolStringPtr Name) override;
-
- std::map<SymbolStringPtr, GlobalValue *> Discardable;
};
/// MaterializationUnit that materializes modules by calling the 'emit' method
diff --git a/llvm/lib/ExecutionEngine/Orc/Layer.cpp b/llvm/lib/ExecutionEngine/Orc/Layer.cpp
index 346dde4f7a8..1927bce45d4 100644
--- a/llvm/lib/ExecutionEngine/Orc/Layer.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/Layer.cpp
@@ -46,17 +46,19 @@ IRMaterializationUnit::IRMaterializationUnit(ExecutionSession &ES,
!G.hasAvailableExternallyLinkage()) {
auto MangledName = Mangle(G.getName());
SymbolFlags[MangledName] = JITSymbolFlags::fromGlobalValue(G);
- Discardable[MangledName] = &G;
+ SymbolToDefinition[MangledName] = &G;
}
}
}
void IRMaterializationUnit::discard(const VSO &V, SymbolStringPtr Name) {
- auto I = Discardable.find(Name);
- assert(I != Discardable.end() &&
+ auto I = SymbolToDefinition.find(Name);
+ assert(I != SymbolToDefinition.end() &&
"Symbol not provided by this MU, or previously discarded");
+ assert(!I->second->isDeclaration() &&
+ "Discard should only apply to definitions");
I->second->setLinkage(GlobalValue::AvailableExternallyLinkage);
- Discardable.erase(I);
+ SymbolToDefinition.erase(I);
}
BasicIRLayerMaterializationUnit::BasicIRLayerMaterializationUnit(
OpenPOWER on IntegriCloud