fix Transforms/Inline/2007-06-25-WeakInline.ll by not inlining functions
authorChris Lattner <sabre@nondot.org>
Mon, 25 Jun 2007 21:50:09 +0000 (21:50 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 25 Jun 2007 21:50:09 +0000 (21:50 +0000)
with weak linkage.

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

lib/Transforms/IPO/InlineSimple.cpp

index 83cfe901a09f383fa041aa304f0cd530f0e6b819..2157dcd2fec8a565e1a34f3002a8aeb07c502374 100644 (file)
@@ -195,10 +195,14 @@ int SimpleInliner::getInlineCost(CallSite CS) {
   const Function *Caller = TheCall->getParent()->getParent();
 
   // Don't inline a directly recursive call.
-  if (Caller == Callee) return 2000000000;
-
-  // Don't inline functions marked noinline
-  if (NeverInline.count(Callee)) return 2000000000;
+  if (Caller == Callee ||
+      // Don't inline functions which can be redefined at link-time to mean
+      // something else.  link-once linkage is ok though.
+      Callee->hasWeakLinkage() ||
+      
+      // Don't inline functions marked noinline.
+      NeverInline.count(Callee))
+    return 2000000000;
   
   // InlineCost - This value measures how good of an inline candidate this call
   // site is to inline.  A lower inline cost make is more likely for the call to