diff options
Diffstat (limited to 'llvm/lib/CodeGen/SelectOptimize.cpp')
-rw-r--r-- | llvm/lib/CodeGen/SelectOptimize.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/SelectOptimize.cpp b/llvm/lib/CodeGen/SelectOptimize.cpp index 7b927e6..bfc49dd 100644 --- a/llvm/lib/CodeGen/SelectOptimize.cpp +++ b/llvm/lib/CodeGen/SelectOptimize.cpp @@ -1044,6 +1044,18 @@ bool SelectOptimizeImpl::isConvertToBranchProfitableBase( return true; } + // If latch has a select group with several elements, it is usually profitable + // to convert it to branches. We let `optimizeSelectsInnerLoops` decide if + // conversion is profitable for innermost loops. + auto *BB = SI.getI()->getParent(); + auto *L = LI->getLoopFor(BB); + if (L && !L->isInnermost() && L->getLoopLatch() == BB && + ASI.Selects.size() >= 3) { + OR << "Converted to branch because select group in the latch block is big."; + EmitAndPrintRemark(ORE, OR); + return true; + } + ORmiss << "Not profitable to convert to branch (base heuristic)."; EmitAndPrintRemark(ORE, ORmiss); return false; |