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.arsena...@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( _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits