diff --git a/llvm/lib/Transforms/IPO/Inliner.cpp b/llvm/lib/Transforms/IPO/Inliner.cpp --- a/llvm/lib/Transforms/IPO/Inliner.cpp +++ b/llvm/lib/Transforms/IPO/Inliner.cpp @@ -940,7 +940,7 @@ // which may reduce the number of callers of other functions to one, // changing inline cost thresholds. bool CalleeWasDeleted = false; - if (Callee.hasLocalLinkage()) { + if (Callee.isDiscardableIfUnused()) { // To check this we also need to nuke any dead constant uses (perhaps // made dead by this operation on other functions). Callee.removeDeadConstantUsers(); diff --git a/llvm/test/Transforms/Inline/delete-unused-function.ll b/llvm/test/Transforms/Inline/delete-unused-function.ll new file mode 100644 --- /dev/null +++ b/llvm/test/Transforms/Inline/delete-unused-function.ll @@ -0,0 +1,32 @@ +; RUN: opt -passes=inline < %s -S | FileCheck %s + +; CHECK: define {{.*}}@caller +; CHECK: define {{.*}}@f1 +; CHECK-NOT: define {{.*}}@f2 +; CHECK-NOT: define {{.*}}@f3 +; CHECK-NOT: define {{.*}}@f4 + +define void @caller() { + call void @f1() + call void @f2() + call void @f3() + call void @f4() + ret void +} + +define void @f1() { + ret void +} + +define internal void @f2() { + ret void +} + +define private void @f3() { + ret void +} + +define linkonce_odr void @f4() { + ret void +} + diff --git a/llvm/test/Transforms/LoopUnroll/2011-08-09-PhiUpdate.ll b/llvm/test/Transforms/LoopUnroll/2011-08-09-PhiUpdate.ll --- a/llvm/test/Transforms/LoopUnroll/2011-08-09-PhiUpdate.ll +++ b/llvm/test/Transforms/LoopUnroll/2011-08-09-PhiUpdate.ll @@ -107,17 +107,6 @@ define linkonce_odr i32 @bar() nounwind uwtable ssp align 2 { ; -; CHECK-LABEL: @bar( -; CHECK-NEXT: land.lhs.true: -; CHECK-NEXT: [[CMP4:%.*]] = call zeroext i1 @check() -; CHECK-NEXT: br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_END:%.*]] -; CHECK: cond.true: -; CHECK-NEXT: [[TMP7:%.*]] = call i32 @getval() -; CHECK-NEXT: br label [[COND_END]] -; CHECK: cond.end: -; CHECK-NEXT: [[COND:%.*]] = phi i32 [ [[TMP7]], [[COND_TRUE]] ], [ 0, [[LAND_LHS_TRUE:%.*]] ] -; CHECK-NEXT: ret i32 [[COND]] -; entry: br i1 undef, label %land.lhs.true, label %cond.end