[llvm] [InlineCost] Print inline cost for invoke call sites as well (PR #114476)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 31 15:46:34 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-analysis
Author: Min-Yih Hsu (mshockwave)
<details>
<summary>Changes</summary>
Previously InlineCostAnnotationPrinter only prints inline cost for call instructions. I don't think there is any reason not to analyze invoke and its callee, and this patch adds such support.
---
Full diff: https://github.com/llvm/llvm-project/pull/114476.diff
2 Files Affected:
- (modified) llvm/lib/Analysis/InlineCost.cpp (+4-4)
- (modified) llvm/test/Transforms/Inline/inline-cost-annotation-pass.ll (+31)
``````````diff
diff --git a/llvm/lib/Analysis/InlineCost.cpp b/llvm/lib/Analysis/InlineCost.cpp
index dd9ac910456ade..22bb406c01a4ed 100644
--- a/llvm/lib/Analysis/InlineCost.cpp
+++ b/llvm/lib/Analysis/InlineCost.cpp
@@ -3257,16 +3257,16 @@ InlineCostAnnotationPrinterPass::run(Function &F,
const InlineParams Params = llvm::getInlineParams();
for (BasicBlock &BB : F) {
for (Instruction &I : BB) {
- if (CallInst *CI = dyn_cast<CallInst>(&I)) {
- Function *CalledFunction = CI->getCalledFunction();
+ if (auto *CB = dyn_cast<CallBase>(&I)) {
+ Function *CalledFunction = CB->getCalledFunction();
if (!CalledFunction || CalledFunction->isDeclaration())
continue;
OptimizationRemarkEmitter ORE(CalledFunction);
- InlineCostCallAnalyzer ICCA(*CalledFunction, *CI, Params, TTI,
+ InlineCostCallAnalyzer ICCA(*CalledFunction, *CB, Params, TTI,
GetAssumptionCache, nullptr, &PSI, &ORE);
ICCA.analyze();
OS << " Analyzing call of " << CalledFunction->getName()
- << "... (caller:" << CI->getCaller()->getName() << ")\n";
+ << "... (caller:" << CB->getCaller()->getName() << ")\n";
ICCA.print(OS);
OS << "\n";
}
diff --git a/llvm/test/Transforms/Inline/inline-cost-annotation-pass.ll b/llvm/test/Transforms/Inline/inline-cost-annotation-pass.ll
index 5c07159822ca1c..f59a565ed34bff 100644
--- a/llvm/test/Transforms/Inline/inline-cost-annotation-pass.ll
+++ b/llvm/test/Transforms/Inline/inline-cost-annotation-pass.ll
@@ -33,3 +33,34 @@ define ptr @main() {
%2 = call ptr @foo()
ret ptr %1
}
+
+; Make sure it also analyzes invoke call sites.
+
+; CHECK: Analyzing call of g... (caller:f)
+; CHECK: define i32 @g(i32 %v) {
+; CHECK: ; cost before = {{.*}}, cost after = {{.*}}, threshold before = {{.*}}, threshold after = {{.*}}, cost delta = {{.*}}
+; CHECK: %p = icmp ugt i32 %v, 35
+; CHECK: ; cost before = {{.*}}, cost after = {{.*}}, threshold before = {{.*}}, threshold after = {{.*}}, cost delta = {{.*}}
+; CHECK: %r = select i1 %p, i32 %v, i32 7
+; CHECK: ; cost before = {{.*}}, cost after = {{.*}}, threshold before = {{.*}}, threshold after = {{.*}}, cost delta = {{.*}}
+; CHECK: ret i32 %r
+; CHECK: }
+define i32 @g(i32 %v) {
+ %p = icmp ugt i32 %v, 35
+ %r = select i1 %p, i32 %v, i32 7
+ ret i32 %r
+}
+
+define void @f(i32 %v, ptr %dst) personality ptr @__gxx_personality_v0 {
+ %v1 = invoke i32 @g(i32 %v)
+ to label %bb1 unwind label %bb2
+bb1:
+ store i32 %v1, ptr %dst
+ ret void
+bb2:
+ %lpad.loopexit80 = landingpad { ptr, i32 }
+ cleanup
+ ret void
+}
+
+declare i32 @__gxx_personality_v0(...)
``````````
</details>
https://github.com/llvm/llvm-project/pull/114476
More information about the llvm-commits
mailing list