From be73ba8c825816888abf1919a63afee218a63bbf Mon Sep 17 00:00:00 2001 From: Hans Wennborg Date: Tue, 10 Nov 2015 09:47:48 +0000 Subject: [PATCH] Inliner: Do zero-cost inlines even if above a negative threshold (PR24851) Differential Revision: http://reviews.llvm.org/D14499 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@252595 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Analysis/InlineCost.cpp | 2 +- test/Transforms/Inline/zero-cost.ll | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 test/Transforms/Inline/zero-cost.ll diff --git a/lib/Analysis/InlineCost.cpp b/lib/Analysis/InlineCost.cpp index 8169ce48246..26f2e7ff504 100644 --- a/lib/Analysis/InlineCost.cpp +++ b/lib/Analysis/InlineCost.cpp @@ -1296,7 +1296,7 @@ bool CallAnalyzer::analyzeCall(CallSite CS) { else if (NumVectorInstructions <= NumInstructions / 2) Threshold -= (FiftyPercentVectorBonus - TenPercentVectorBonus); - return Cost < Threshold; + return Cost <= std::max(0, Threshold); } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) diff --git a/test/Transforms/Inline/zero-cost.ll b/test/Transforms/Inline/zero-cost.ll new file mode 100644 index 00000000000..8e7194a1963 --- /dev/null +++ b/test/Transforms/Inline/zero-cost.ll @@ -0,0 +1,17 @@ +; RUN: opt -inline -S %s | FileCheck %s + +define void @f() { +entry: + tail call void @g() + unreachable + +; CHECK-LABEL: @f +; CHECK-NOT: call +; CHECK: unreachable +} + +define void @g() { +entry: + unreachable +} +