diff options
author | Lang Hames <lhames@gmail.com> | 2024-12-03 07:12:34 +0000 |
---|---|---|
committer | Lang Hames <lhames@gmail.com> | 2024-12-03 08:00:29 +0000 |
commit | d09707070c7460d0887eae8f7022e816510d5eb1 (patch) | |
tree | dda4397332d9bca83e0b7b62e7652f44dd1ee6e3 /llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp | |
parent | 9692242f51eda6a8c33860d2879ffa291a27e3ca (diff) | |
download | llvm-d09707070c7460d0887eae8f7022e816510d5eb1.zip llvm-d09707070c7460d0887eae8f7022e816510d5eb1.tar.gz llvm-d09707070c7460d0887eae8f7022e816510d5eb1.tar.bz2 |
Re-apply "[ORC][JITLink] Add jitlink::Scope::SideEffectsOnly" with fixes.
This reapplies aba6bb0820b, which was reverted in 28e2a891210 due to bot
failures. It contains fixes to silence warnings for uncovered switches,
and for incorrect initializer-symbol handling on ELF and COFF.
Diffstat (limited to 'llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp')
-rw-r--r-- | llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp b/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp index c1c5540..c5342c4 100644 --- a/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp +++ b/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp @@ -65,6 +65,8 @@ JITSymbolFlags getJITSymbolFlagsForSymbol(Symbol &Sym) { if (Sym.getScope() == Scope::Default) Flags |= JITSymbolFlags::Exported; + else if (Sym.getScope() == Scope::SideEffectsOnly) + Flags |= JITSymbolFlags::MaterializationSideEffectsOnly; if (Sym.isCallable()) Flags |= JITSymbolFlags::Callable; @@ -236,7 +238,7 @@ public: SymbolMap InternedResult; for (auto *Sym : G.defined_symbols()) - if (Sym->getScope() != Scope::Local) { + if (Sym->getScope() < Scope::SideEffectsOnly) { auto InternedName = ES.intern(Sym->getName()); auto Ptr = getJITSymbolPtrForSymbol(*Sym, G.getTargetTriple()); auto Flags = getJITSymbolFlagsForSymbol(*Sym); @@ -249,7 +251,7 @@ public: } for (auto *Sym : G.absolute_symbols()) - if (Sym->getScope() != Scope::Local) { + if (Sym->getScope() < Scope::SideEffectsOnly) { auto InternedName = ES.intern(Sym->getName()); auto Ptr = getJITSymbolPtrForSymbol(*Sym, G.getTargetTriple()); auto Flags = getJITSymbolFlagsForSymbol(*Sym); @@ -281,11 +283,9 @@ public: // If this is a materialization-side-effects only symbol then bump // the counter and remove in from the result, otherwise make sure that // it's defined. - if (Flags.hasMaterializationSideEffectsOnly()) { + if (Flags.hasMaterializationSideEffectsOnly()) ++NumMaterializationSideEffectsOnlySymbols; - InternedResult.erase(Sym); - continue; - } else if (I == InternedResult.end()) + else if (I == InternedResult.end()) MissingSymbols.push_back(Sym); else if (Layer.OverrideObjectFlags) I->second.setFlags(Flags); |