[llvm] r277907 - Revert r277896.

Nico Weber via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 5 19:00:45 PDT 2016


Author: nico
Date: Fri Aug  5 21:00:45 2016
New Revision: 277907

URL: http://llvm.org/viewvc/llvm-project?rev=277907&view=rev
Log:
Revert r277896.

It breaks ExecutionEngine/OrcLazy/weak-function.ll on most bots.

Script:
--
...
--
Exit Code: 1

Command Output (stderr):
--
Could not find main function.


Removed:
    llvm/trunk/test/ExecutionEngine/OrcLazy/Inputs/
    llvm/trunk/test/ExecutionEngine/OrcLazy/weak-function.ll
Modified:
    llvm/trunk/include/llvm/ExecutionEngine/JITSymbol.h
    llvm/trunk/include/llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h
    llvm/trunk/lib/ExecutionEngine/JITSymbol.cpp
    llvm/trunk/tools/lli/OrcLazyJIT.cpp
    llvm/trunk/tools/lli/OrcLazyJIT.h

Modified: llvm/trunk/include/llvm/ExecutionEngine/JITSymbol.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/JITSymbol.h?rev=277907&r1=277906&r2=277907&view=diff
==============================================================================
--- llvm/trunk/include/llvm/ExecutionEngine/JITSymbol.h (original)
+++ llvm/trunk/include/llvm/ExecutionEngine/JITSymbol.h Fri Aug  5 21:00:45 2016
@@ -59,10 +59,6 @@ public:
     return (Flags & Common) == Common;
   }
 
-  bool isStrongDefinition() const {
-    return !isWeak() && !isCommon();
-  }
-
   /// @brief Returns true is the Weak flag is set.
   bool isExported() const {
     return (Flags & Exported) == Exported;

Modified: llvm/trunk/include/llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h?rev=277907&r1=277906&r2=277907&view=diff
==============================================================================
--- llvm/trunk/include/llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h (original)
+++ llvm/trunk/include/llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h Fri Aug  5 21:00:45 2016
@@ -281,20 +281,12 @@ private:
     // Create stub functions.
     const DataLayout &DL = SrcM.getDataLayout();
     {
-      LMResources.StubsMgr = CreateIndirectStubsManager();
-
       typename IndirectStubsMgrT::StubInitsMap StubInits;
       for (auto &F : SrcM) {
         // Skip declarations.
         if (F.isDeclaration())
           continue;
 
-        // Skip weak functions for which we already have definitions.
-        auto MangledName = mangle(F.getName(), DL);
-        if (F.hasWeakLinkage() || F.hasLinkOnceLinkage())
-          if (auto Sym = LD.findSymbol(MangledName, false))
-            continue;
-
         // Record all functions defined by this module.
         if (CloneStubsIntoPartitions)
           LMResources.StubsToClone.insert(&F);
@@ -303,7 +295,7 @@ private:
         // and set the compile action to compile the partition containing the
         // function.
         auto CCInfo = CompileCallbackMgr.getCompileCallback();
-        StubInits[MangledName] =
+        StubInits[mangle(F.getName(), DL)] =
           std::make_pair(CCInfo.getAddress(),
                          JITSymbolFlags::fromGlobalValue(F));
         CCInfo.setCompileAction([this, &LD, LMH, &F]() {
@@ -311,6 +303,7 @@ private:
         });
       }
 
+      LMResources.StubsMgr = CreateIndirectStubsManager();
       auto EC = LMResources.StubsMgr->createStubs(StubInits);
       (void)EC;
       // FIXME: This should be propagated back to the user. Stub creation may
@@ -390,7 +383,8 @@ private:
     // Build a resolver for the globals module and add it to the base layer.
     auto GVsResolver = createLambdaResolver(
         [&LD, LMH](const std::string &Name) {
-          if (auto Sym = LD.findSymbol(Name, false))
+          auto &LMResources = LD.getLogicalModuleResources(LMH);
+          if (auto Sym = LMResources.StubsMgr->findStub(Name, false))
             return Sym;
           auto &LDResolver = LD.getDylibResources().ExternalSymbolResolver;
           return LDResolver->findSymbolInLogicalDylib(Name);

Modified: llvm/trunk/lib/ExecutionEngine/JITSymbol.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/JITSymbol.cpp?rev=277907&r1=277906&r2=277907&view=diff
==============================================================================
--- llvm/trunk/lib/ExecutionEngine/JITSymbol.cpp (original)
+++ llvm/trunk/lib/ExecutionEngine/JITSymbol.cpp Fri Aug  5 21:00:45 2016
@@ -19,7 +19,7 @@ using namespace llvm;
 
 JITSymbolFlags llvm::JITSymbolFlags::fromGlobalValue(const GlobalValue &GV) {
   JITSymbolFlags Flags = JITSymbolFlags::None;
-  if (GV.hasWeakLinkage() || GV.hasLinkOnceLinkage())
+  if (GV.hasWeakLinkage())
     Flags |= JITSymbolFlags::Weak;
   if (GV.hasCommonLinkage())
     Flags |= JITSymbolFlags::Common;

Removed: llvm/trunk/test/ExecutionEngine/OrcLazy/weak-function.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/ExecutionEngine/OrcLazy/weak-function.ll?rev=277906&view=auto
==============================================================================
--- llvm/trunk/test/ExecutionEngine/OrcLazy/weak-function.ll (original)
+++ llvm/trunk/test/ExecutionEngine/OrcLazy/weak-function.ll (removed)
@@ -1,28 +0,0 @@
-; RUN: lli -jit-kind=orc-lazy -extra-module %p/Inputs/weak-function-2.ll %s
-;
-; Check that functions in two different modules agree on the address of weak
-; function 'baz'
-target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
-target triple = "x86_64-apple-macosx10.12.0"
-
-define linkonce_odr i32 @baz() {
-entry:
-  ret i32 0
-}
-
-define i8* @foo() {
-entry:
-  ret i8* bitcast (i32 ()* @baz to i8*)
-}
-
-declare i8* @bar()
-
-define i32 @main(i32 %argc, i8** %argv) {
-entry:
-  %call = tail call i8* @foo()
-  %call1 = tail call i8* @bar()
-  %cmp = icmp ne i8* %call, %call1
-  %conv = zext i1 %cmp to i32
-  ret i32 %conv
-}
-

Modified: llvm/trunk/tools/lli/OrcLazyJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lli/OrcLazyJIT.cpp?rev=277907&r1=277906&r2=277907&view=diff
==============================================================================
--- llvm/trunk/tools/lli/OrcLazyJIT.cpp (original)
+++ llvm/trunk/tools/lli/OrcLazyJIT.cpp Fri Aug  5 21:00:45 2016
@@ -144,7 +144,8 @@ int llvm::runOrcLazyJIT(std::vector<std:
                OrcInlineStubs);
 
   // Add the module, look up main and run it.
-  J.addModuleSet(std::move(Ms));
+  for (auto &M : Ms)
+    J.addModule(std::move(M));
   auto MainSym = J.findSymbol("main");
 
   if (!MainSym) {

Modified: llvm/trunk/tools/lli/OrcLazyJIT.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lli/OrcLazyJIT.h?rev=277907&r1=277906&r2=277907&view=diff
==============================================================================
--- llvm/trunk/tools/lli/OrcLazyJIT.h (original)
+++ llvm/trunk/tools/lli/OrcLazyJIT.h Fri Aug  5 21:00:45 2016
@@ -38,7 +38,7 @@ public:
   typedef orc::CompileOnDemandLayer<IRDumpLayerT, CompileCallbackMgr> CODLayerT;
   typedef CODLayerT::IndirectStubsManagerBuilderT
     IndirectStubsManagerBuilder;
-  typedef CODLayerT::ModuleSetHandleT ModuleSetHandleT;
+  typedef CODLayerT::ModuleSetHandleT ModuleHandleT;
 
   OrcLazyJIT(std::unique_ptr<TargetMachine> TM,
              std::unique_ptr<CompileCallbackMgr> CCMgr,
@@ -62,21 +62,18 @@ public:
       DtorRunner.runViaLayer(CODLayer);
   }
 
-  ModuleSetHandleT addModuleSet(std::vector<std::unique_ptr<Module>> Ms) {
-    // Attach a data-layouts if they aren't already present.
-    for (auto &M : Ms)
-      if (M->getDataLayout().isDefault())
-        M->setDataLayout(DL);
+  ModuleHandleT addModule(std::unique_ptr<Module> M) {
+    // Attach a data-layout if one isn't already present.
+    if (M->getDataLayout().isDefault())
+      M->setDataLayout(DL);
 
     // Record the static constructors and destructors. We have to do this before
     // we hand over ownership of the module to the JIT.
     std::vector<std::string> CtorNames, DtorNames;
-    for (auto &M : Ms) {
-      for (auto Ctor : orc::getConstructors(*M))
-        CtorNames.push_back(mangle(Ctor.Func->getName()));
-      for (auto Dtor : orc::getDestructors(*M))
-        DtorNames.push_back(mangle(Dtor.Func->getName()));
-    }
+    for (auto Ctor : orc::getConstructors(*M))
+      CtorNames.push_back(mangle(Ctor.Func->getName()));
+    for (auto Dtor : orc::getDestructors(*M))
+      DtorNames.push_back(mangle(Dtor.Func->getName()));
 
     // Symbol resolution order:
     //   1) Search the JIT symbols.
@@ -87,18 +84,24 @@ public:
         [this](const std::string &Name) -> JITSymbol {
           if (auto Sym = CODLayer.findSymbol(Name, true))
             return Sym;
-          return CXXRuntimeOverrides.searchOverrides(Name);
-        },
-        [](const std::string &Name) {
+          if (auto Sym = CXXRuntimeOverrides.searchOverrides(Name))
+            return Sym;
+
           if (auto Addr =
               RTDyldMemoryManager::getSymbolAddressInProcess(Name))
             return JITSymbol(Addr, JITSymbolFlags::Exported);
+
+          return JITSymbol(nullptr);
+        },
+        [](const std::string &Name) {
           return JITSymbol(nullptr);
         }
       );
 
     // Add the module to the JIT.
-    auto H = CODLayer.addModuleSet(std::move(Ms),
+    std::vector<std::unique_ptr<Module>> S;
+    S.push_back(std::move(M));
+    auto H = CODLayer.addModuleSet(std::move(S),
 				   llvm::make_unique<SectionMemoryManager>(),
 				   std::move(Resolver));
 
@@ -116,7 +119,7 @@ public:
     return CODLayer.findSymbol(mangle(Name), true);
   }
 
-  JITSymbol findSymbolIn(ModuleSetHandleT H, const std::string &Name) {
+  JITSymbol findSymbolIn(ModuleHandleT H, const std::string &Name) {
     return CODLayer.findSymbolIn(H, mangle(Name), true);
   }
 




More information about the llvm-commits mailing list