diff --git a/lib/Transforms/IPO/InlineSimple.cpp b/lib/Transforms/IPO/InlineSimple.cpp index a7aeed8afc3..03032e653b5 100644 --- a/lib/Transforms/IPO/InlineSimple.cpp +++ b/lib/Transforms/IPO/InlineSimple.cpp @@ -23,15 +23,12 @@ #include "llvm/Transforms/IPO.h" #include "llvm/Transforms/IPO/InlinerPass.h" #include "llvm/Target/TargetData.h" -#include "llvm/ADT/SmallPtrSet.h" using namespace llvm; namespace { class SimpleInliner : public Inliner { - // Functions that are never inlined - SmallPtrSet NeverInline; InlineCostAnalyzer CA; public: SimpleInliner() : Inliner(ID) { @@ -43,15 +40,6 @@ namespace { } static char ID; // Pass identification, replacement for typeid InlineCost getInlineCost(CallSite CS) { - // Filter out functions which should never be inlined due to the global - // 'llvm.noinline'. - // FIXME: I'm 99% certain that this is an ancient bit of legacy that we - // no longer need to support, but I don't want to blindly nuke it just - // yet. - if (Function *Callee = CS.getCalledFunction()) - if (NeverInline.count(Callee)) - return InlineCost::getNever(); - return CA.getInlineCost(CS); } float getInlineFudgeFactor(CallSite CS) { @@ -87,39 +75,6 @@ Pass *llvm::createFunctionInliningPass(int Threshold) { // annotated with the noinline attribute. bool SimpleInliner::doInitialization(CallGraph &CG) { CA.setTargetData(getAnalysisIfAvailable()); - - Module &M = CG.getModule(); - - // Get llvm.noinline - GlobalVariable *GV = M.getNamedGlobal("llvm.noinline"); - - if (GV == 0) - return false; - - // Don't crash on invalid code - if (!GV->hasDefinitiveInitializer()) - return false; - - const ConstantArray *InitList = dyn_cast(GV->getInitializer()); - - if (InitList == 0) - return false; - - // Iterate over each element and add to the NeverInline set - for (unsigned i = 0, e = InitList->getNumOperands(); i != e; ++i) { - - // Get Source - const Constant *Elt = InitList->getOperand(i); - - if (const ConstantExpr *CE = dyn_cast(Elt)) - if (CE->getOpcode() == Instruction::BitCast) - Elt = CE->getOperand(0); - - // Insert into set of functions to never inline - if (const Function *F = dyn_cast(Elt)) - NeverInline.insert(F); - } - return false; } diff --git a/test/Transforms/Inline/2007-06-06-NoInline.ll b/test/Transforms/Inline/2007-06-06-NoInline.ll deleted file mode 100644 index d5a7953ffb0..00000000000 --- a/test/Transforms/Inline/2007-06-06-NoInline.ll +++ /dev/null @@ -1,46 +0,0 @@ -; RUN: opt < %s -inline -S | grep "define internal i32 @bar" -@llvm.noinline = appending global [1 x i8*] [ i8* bitcast (i32 (i32, i32)* @bar to i8*) ], section "llvm.metadata" ; <[1 x i8*]*> [#uses=0] - -define internal i32 @bar(i32 %x, i32 %y) { -entry: - %x_addr = alloca i32 ; [#uses=2] - %y_addr = alloca i32 ; [#uses=2] - %retval = alloca i32, align 4 ; [#uses=2] - %tmp = alloca i32, align 4 ; [#uses=2] - %"alloca point" = bitcast i32 0 to i32 ; [#uses=0] - store i32 %x, i32* %x_addr - store i32 %y, i32* %y_addr - %tmp1 = load i32* %x_addr ; [#uses=1] - %tmp2 = load i32* %y_addr ; [#uses=1] - %tmp3 = add i32 %tmp1, %tmp2 ; [#uses=1] - store i32 %tmp3, i32* %tmp - %tmp4 = load i32* %tmp ; [#uses=1] - store i32 %tmp4, i32* %retval - br label %return - -return: ; preds = %entry - %retval5 = load i32* %retval ; [#uses=1] - ret i32 %retval5 -} - -define i32 @foo(i32 %a, i32 %b) { -entry: - %a_addr = alloca i32 ; [#uses=2] - %b_addr = alloca i32 ; [#uses=2] - %retval = alloca i32, align 4 ; [#uses=2] - %tmp = alloca i32, align 4 ; [#uses=2] - %"alloca point" = bitcast i32 0 to i32 ; [#uses=0] - store i32 %a, i32* %a_addr - store i32 %b, i32* %b_addr - %tmp1 = load i32* %b_addr ; [#uses=1] - %tmp2 = load i32* %a_addr ; [#uses=1] - %tmp3 = call i32 @bar( i32 %tmp1, i32 %tmp2 ) ; [#uses=1] - store i32 %tmp3, i32* %tmp - %tmp4 = load i32* %tmp ; [#uses=1] - store i32 %tmp4, i32* %retval - br label %return - -return: ; preds = %entry - %retval5 = load i32* %retval ; [#uses=1] - ret i32 %retval5 -}