[llvm-branch-commits] [llvm] llvm-reduce: Preserve original callsite calling conv when removing arguments (PR #133411)

Matt Arsenault via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Fri Mar 28 03:15:39 PDT 2025


https://github.com/arsenm created https://github.com/llvm/llvm-project/pull/133411

In undefined mismatch cases, this was fixing the callsite to use the calling
convention of the new function. Preserve the original wrong callsite's calling
convention.

>From 0e49d459800a5b36208cac6b5ac381f5230b8eb4 Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Fri, 28 Mar 2025 16:43:21 +0700
Subject: [PATCH] llvm-reduce: Preserve original callsite calling conv when
 removing arguments

In undefined mismatch cases, this was fixing the callsite to use the calling
convention of the new function. Preserve the original wrong callsite's calling
convention.
---
 .../remove-arguments-preserve-wrong-cc.ll     | 27 +++++++++++++++++++
 .../llvm-reduce/deltas/ReduceArguments.cpp    |  2 +-
 2 files changed, 28 insertions(+), 1 deletion(-)
 create mode 100644 llvm/test/tools/llvm-reduce/remove-arguments-preserve-wrong-cc.ll

diff --git a/llvm/test/tools/llvm-reduce/remove-arguments-preserve-wrong-cc.ll b/llvm/test/tools/llvm-reduce/remove-arguments-preserve-wrong-cc.ll
new file mode 100644
index 0000000000000..463b06c5d248a
--- /dev/null
+++ b/llvm/test/tools/llvm-reduce/remove-arguments-preserve-wrong-cc.ll
@@ -0,0 +1,27 @@
+; Check that when removing arguments, incorrect callsite calling conventions are preserved
+
+; RUN: llvm-reduce --abort-on-invalid-reduction --delta-passes=arguments --test FileCheck --test-arg --check-prefixes=INTERESTING --test-arg %s --test-arg --input-file %s -o %t
+; RUN: FileCheck --check-prefixes=RESULT %s < %t
+
+; INTERESTING-LABEL: @fastcc_callee(
+define fastcc i32 @fastcc_callee(i32 %a, i32 %b) {
+  ret i32 %a
+}
+
+; INTERESTING-LABEL: @fastcc_callee_decl(
+declare fastcc i32 @fastcc_callee_decl(i32 %a, i32 %b)
+
+; INTERESTING-LABEL: @caller_wrong_callsites(
+; INTERESTING: call
+; INTERESTING: call
+
+; RESULT-LABEL: define i32 @caller_wrong_callsites()
+; RESULT: %call0 = call coldcc i32 @fastcc_callee()
+; RESULT: %call1 = call i32 @fastcc_callee_decl()
+define i32 @caller_wrong_callsites(i32 %x) {
+  %call0 = call coldcc i32 @fastcc_callee(i32 %x, i32 2)
+  %call1 = call ccc i32 @fastcc_callee_decl(i32 %x, i32 2)
+  %result = add i32 %call0, %call1
+  ret i32 %result
+}
+
diff --git a/llvm/tools/llvm-reduce/deltas/ReduceArguments.cpp b/llvm/tools/llvm-reduce/deltas/ReduceArguments.cpp
index e9d9fb4153994..369ef141e4a88 100644
--- a/llvm/tools/llvm-reduce/deltas/ReduceArguments.cpp
+++ b/llvm/tools/llvm-reduce/deltas/ReduceArguments.cpp
@@ -65,7 +65,7 @@ static void replaceFunctionCalls(Function &OldF, Function &NewF,
       CI->getOperandBundlesAsDefs(OpBundles);
 
       CallInst *NewCI = CallInst::Create(&NewF, Args, OpBundles);
-      NewCI->setCallingConv(NewF.getCallingConv());
+      NewCI->setCallingConv(CI->getCallingConv());
 
       AttrBuilder CallSiteAttrs(Ctx, CI->getAttributes().getFnAttrs());
       NewCI->setAttributes(



More information about the llvm-branch-commits mailing list