diff options
author | Daniel Dunbar <daniel@zuster.org> | 2008-10-30 19:26:59 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2008-10-30 19:26:59 +0000 |
commit | 3933e66a89e53d20897deaf2ab624206ba7815cf (patch) | |
tree | 51e7bf24dfd3117cf30d1de77fdfbf18f06e65fb /llvm/lib/Transforms/Utils/BasicInliner.cpp | |
parent | 0852f48d1d87271931cd263b019c705b6b6d2ba1 (diff) | |
download | bcm5719-llvm-3933e66a89e53d20897deaf2ab624206ba7815cf.tar.gz bcm5719-llvm-3933e66a89e53d20897deaf2ab624206ba7815cf.zip |
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
Diffstat (limited to 'llvm/lib/Transforms/Utils/BasicInliner.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/BasicInliner.cpp | 25 |
1 files changed, 18 insertions, 7 deletions
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()) |