From 3933e66a89e53d20897deaf2ab624206ba7815cf Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Thu, 30 Oct 2008 19:26:59 +0000 Subject: Add InlineCost class for represent the estimated cost of inlining a function. - This explicitly models the costs for functions which should "always" or "never" be inlined. This fixes bugs where such costs were not previously respected. llvm-svn: 58450 --- llvm/lib/Transforms/Utils/BasicInliner.cpp | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) (limited to 'llvm/lib/Transforms/Utils/BasicInliner.cpp') diff --git a/llvm/lib/Transforms/Utils/BasicInliner.cpp b/llvm/lib/Transforms/Utils/BasicInliner.cpp index ba1fb3d9c4e..73e8bd84676 100644 --- a/llvm/lib/Transforms/Utils/BasicInliner.cpp +++ b/llvm/lib/Transforms/Utils/BasicInliner.cpp @@ -107,16 +107,27 @@ void BasicInlinerImpl::inlineFunctions() { --index; continue; } - int InlineCost = CA.getInlineCost(CS, NeverInline); - if (InlineCost >= (int) BasicInlineThreshold) { - DOUT << " NOT Inlining: cost = " << InlineCost - << ", call: " << *CS.getInstruction(); + InlineCost IC = CA.getInlineCost(CS, NeverInline); + if (IC.isAlways()) { + DOUT << " Inlining: cost=always" + <<", call: " << *CS.getInstruction(); + } else if (IC.isNever()) { + DOUT << " NOT Inlining: cost=never" + <<", call: " << *CS.getInstruction(); continue; + } else { + int Cost = IC.getValue(); + + if (Cost >= BasicInlineThreshold) { + DOUT << " NOT Inlining: cost = " << Cost + << ", call: " << *CS.getInstruction(); + continue; + } else { + DOUT << " Inlining: cost = " << Cost + << ", call: " << *CS.getInstruction(); + } } - DOUT << " Inlining: cost=" << InlineCost - <<", call: " << *CS.getInstruction(); - // Inline if (InlineFunction(CS, NULL, TD)) { if (Callee->use_empty() && Callee->hasInternalLinkage()) -- cgit v1.2.3