[llvm] [InlineCost]: Optimize inlining of recursive function. (PR #139982)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Thu May 29 03:49:04 PDT 2025
================
@@ -1688,66 +1688,52 @@ bool CallAnalyzer::simplifyCmpInstForRecCall(CmpInst &Cmp) {
if (!isa<Argument>(Cmp.getOperand(0)) || !isa<Constant>(Cmp.getOperand(1)))
return false;
auto *CmpOp = Cmp.getOperand(0);
- Function *F = Cmp.getFunction();
- // Iterate over the users of the function to check if it's a recursive
- // function:
- for (auto *U : F->users()) {
- CallInst *Call = dyn_cast<CallInst>(U);
- if (!Call || Call->getFunction() != F || Call->getCalledFunction() != F)
- continue;
- auto *CallBB = Call->getParent();
- auto *Predecessor = CallBB->getSinglePredecessor();
- // Only handle the case when the callsite has a single predecessor:
- if (!Predecessor)
- continue;
+ // Make sure that the callsite is recursive:
+ if (CandidateCall.getCaller() != &F)
+ return false;
+ CallInst *CallInstr = dyn_cast<CallInst>(&CandidateCall);
----------------
nikic wrote:
The cast to CallInst here is unnecessary, you should be able to work directly on the CandidateCall.
https://github.com/llvm/llvm-project/pull/139982
More information about the llvm-commits
mailing list