]> granicus.if.org Git - llvm/commitdiff
[ORC] Make sure we linker-mangle symbol names in the SpeculationLayer.
authorLang Hames <lhames@gmail.com>
Sun, 18 Aug 2019 21:29:57 +0000 (21:29 +0000)
committerLang Hames <lhames@gmail.com>
Sun, 18 Aug 2019 21:29:57 +0000 (21:29 +0000)
If mangling is not performed then speculative lookups will fail.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@369219 91177308-0d34-0410-b5e6-96231b3b80d8

examples/SpeculativeJIT/SpeculativeJIT.cpp
include/llvm/ExecutionEngine/Orc/Speculation.h

index 803badb59d9187f3bbb5db5eef8b8f34f027af0a..bb075bd56b52c83a926ee0d4b0b0bd000893dfb2 100644 (file)
@@ -105,7 +105,7 @@ private:
         CompileLayer(*this->ES, ObjLayer,
                      ConcurrentIRCompiler(std::move(JTMB))),
         S(Imps, *this->ES),
-        SpeculateLayer(*this->ES, CompileLayer, S, BlockFreqQuery()),
+        SpeculateLayer(*this->ES, CompileLayer, S, Mangle, BlockFreqQuery()),
         CODLayer(*this->ES, SpeculateLayer, *this->LCTMgr,
                  std::move(ISMBuilder)) {
     this->ES->getMainJITDylib().addGenerator(
index 1899b60f076db3a390057b295e779a22b6a95ffb..bf24b587218f6f7ed5a86aa29a76152df1c63250 100644 (file)
@@ -157,8 +157,10 @@ public:
   using TargetAndLikelies = DenseMap<SymbolStringPtr, SymbolNameSet>;
 
   IRSpeculationLayer(ExecutionSession &ES, IRCompileLayer &BaseLayer,
-                     Speculator &Spec, ResultEval Interpreter)
-      : IRLayer(ES), NextLayer(BaseLayer), S(Spec), QueryAnalysis(Interpreter) {
+                     Speculator &Spec, MangleAndInterner &Mangle,
+                     ResultEval Interpreter)
+      : IRLayer(ES), NextLayer(BaseLayer), S(Spec), Mangle(Mangle),
+        QueryAnalysis(Interpreter) {
     PB.registerFunctionAnalyses(FAM);
   }
 
@@ -170,19 +172,18 @@ private:
     assert(!IRNames.empty() && "No IRNames received to Intern?");
     TargetAndLikelies InternedNames;
     DenseSet<SymbolStringPtr> TargetJITNames;
-    ExecutionSession &Es = getExecutionSession();
     for (auto &NamePair : IRNames) {
       for (auto &TargetNames : NamePair.second)
-        TargetJITNames.insert(Es.intern(TargetNames));
+        TargetJITNames.insert(Mangle(TargetNames));
 
-      InternedNames.insert(
-          {Es.intern(NamePair.first), std::move(TargetJITNames)});
+      InternedNames[Mangle(NamePair.first)] = std::move(TargetJITNames);
     }
     return InternedNames;
   }
 
   IRCompileLayer &NextLayer;
   Speculator &S;
+  MangleAndInterner &Mangle;
   PassBuilder PB;
   FunctionAnalysisManager FAM;
   ResultEval QueryAnalysis;