]> granicus.if.org Git - llvm/commitdiff
Revert "ThinLTO: do not import function whose linkage prevents inlining."
authorMehdi Amini <mehdi.amini@apple.com>
Mon, 2 May 2016 22:26:04 +0000 (22:26 +0000)
committerMehdi Amini <mehdi.amini@apple.com>
Mon, 2 May 2016 22:26:04 +0000 (22:26 +0000)
This reverts commit r268315, the tests are not passing.

From: Mehdi Amini <mehdi.amini@apple.com>

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

include/llvm/IR/GlobalValue.h
lib/Transforms/IPO/FunctionImport.cpp
test/Transforms/FunctionImport/Inputs/funcimport.ll
test/Transforms/FunctionImport/funcimport.ll

index 503023809e37dcff05617dfc17512d5c5a3538f7..0d12fe8681904e85a7cd640057047aaeb585ca45 100644 (file)
@@ -124,7 +124,26 @@ private:
   /// non-equivalent at link time. For example, if a function has weak linkage
   /// then the code defining it may be replaced by different code.
   bool mayBeOverridden() const {
-    return isMayBeOverriddenLinkage(getLinkage());
+    switch (getLinkage()) {
+    case WeakAnyLinkage:
+    case LinkOnceAnyLinkage:
+    case CommonLinkage:
+    case ExternalWeakLinkage:
+      return true;
+
+    case AvailableExternallyLinkage:
+    case LinkOnceODRLinkage:
+    case WeakODRLinkage:
+      // The above three cannot be overridden but can be de-refined.
+
+    case ExternalLinkage:
+    case AppendingLinkage:
+    case InternalLinkage:
+    case PrivateLinkage:
+      return false;
+    }
+
+    llvm_unreachable("Fully covered switch above!");
   }
 
 protected:
@@ -266,31 +285,6 @@ public:
     return Linkage == CommonLinkage;
   }
 
-  /// Whether the definition of this global may be replaced by something
-  /// non-equivalent at link time. For example, if a function has weak linkage
-  /// then the code defining it may be replaced by different code.
-  static bool isMayBeOverriddenLinkage(LinkageTypes Linkage) {
-    switch (Linkage) {
-    case WeakAnyLinkage:
-    case LinkOnceAnyLinkage:
-    case CommonLinkage:
-    case ExternalWeakLinkage:
-      return true;
-
-    case AvailableExternallyLinkage:
-    case LinkOnceODRLinkage:
-    case WeakODRLinkage:
-    // The above three cannot be overridden but can be de-refined.
-
-    case ExternalLinkage:
-    case AppendingLinkage:
-    case InternalLinkage:
-    case PrivateLinkage:
-      return false;
-    }
-    llvm_unreachable("Fully covered switch above!");
-  }
-
   /// Whether the definition of this global may be discarded if it is not used
   /// in its compilation unit.
   static bool isDiscardableIfUnused(LinkageTypes Linkage) {
index d9860a908d09616da68367355453ccb12100d4ca..ec82248d78b7be9a676f4629f220076c94c4f298 100644 (file)
@@ -156,8 +156,8 @@ selectCallee(const ModuleSummaryIndex &Index,
       CalleeSummaryList,
       [&](const std::unique_ptr<GlobalValueSummary> &SummaryPtr) {
         auto *GVSummary = SummaryPtr.get();
-        if (GlobalValue::isMayBeOverriddenLinkage(GVSummary->linkage()))
-          // There is no point in importing these, we can't inline them
+        if (GlobalValue::isWeakAnyLinkage(GVSummary->linkage()))
+          // There is no point in importing weak symbols, we can't inline them
           return false;
         if (auto *AS = dyn_cast<AliasSummary>(GVSummary)) {
           GVSummary = &AS->getAliasee();
index fa96b8ea2663ff85236636f22b0f031177c2a71b..03ea3647fd7abad2213db7210c233bdcb1d6a84e 100644 (file)
@@ -75,11 +75,6 @@ entry:
   ret void
 }
 
-define linkonce void @linkoncefunc2() #0 {
-entry:
-  ret void
-}
-
 define internal i32 @staticfunc() #0 {
 entry:
   ret i32 1
index 478613a2475bbf6154f6920b50d461525d58f7f4..f0df320055567741976500693815d50b77ded1af 100644 (file)
@@ -28,7 +28,6 @@ entry:
   call void (...) @setfuncptr()
   call void (...) @callfuncptr()
   call void (...) @weakfunc()
-  call void (...) @linkoncefunc2()
   call void (...) @referencelargelinkonce()
   ret i32 0
 }
@@ -95,10 +94,6 @@ declare void @referencelargelinkonce(...)
 ; CHECK-DAG: declare void @weakfunc(...)
 declare void @weakfunc(...) #1
 
-; Won't import linkonce func
-; CHECK-DAG: declare void @linkoncefunc2(...)
-declare void @linkoncefunc2(...) #1
-
 ; INSTLIMDEF-DAG: Import funcwithpersonality
 ; INSTLIMDEF-DAG: define available_externally hidden void @funcwithpersonality.llvm.{{.*}}() personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
 ; INSTLIM5-DAG: declare hidden void @funcwithpersonality.llvm.{{.*}}()