https://github.com/arsenm updated https://github.com/llvm/llvm-project/pull/133411
>From dc033ac0955d646d7b778273a144c29ce71c10cf 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 a7689688fdc2b..f1b72a75564de 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