[llvm] [GlobalISel] Avoid unnecessary call setup work (NFC) (PR #221892)
Cullen Rhodes via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 8 00:01:19 PDT 2026
https://github.com/c-rhodes created https://github.com/llvm/llvm-project/pull/221892
Avoid processing call-site attributes twice: once in the attribute helpers (now dead and deleted) and again in setArgFlags. Initialize flags from callee attributes only and let setArgFlags handle the call-site attributes. Also skip return setup for void calls.
Small -0.03% geomean improvement on CTMark aarch64-O0-g, but consistent little improvements across the board.
https://llvm-compile-time-tracker.com/compare.php?from=97cbc1e404b980edc58bfbcabb6f1c61793b624b&to=d2dfca2db156c259a66cfe2c749f786fec2946f0&stat=instructions:u
Assisted-by: codex
>From d2dfca2db156c259a66cfe2c749f786fec2946f0 Mon Sep 17 00:00:00 2001
From: Cullen Rhodes <cullen.rhodes at arm.com>
Date: Sun, 3 May 2026 09:11:36 +0000
Subject: [PATCH] [GlobalISel] Avoid unnecessary call setup work (NFC)
Avoid processing call-site attributes twice: once in the attribute
helpers (now dead and deleted) and again in setArgFlags. Initialize
flags from callee attributes only and let setArgFlags handle the
call-site attributes. Also skip return setup for void calls.
Assisted-by: codex
---
.../llvm/CodeGen/GlobalISel/CallLowering.h | 8 ----
llvm/lib/CodeGen/GlobalISel/CallLowering.cpp | 40 ++++++++-----------
2 files changed, 16 insertions(+), 32 deletions(-)
diff --git a/llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h b/llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h
index 110f40a817770..60dc219387cbc 100644
--- a/llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h
+++ b/llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h
@@ -364,14 +364,6 @@ class LLVM_ABI CallLowering {
return static_cast<const XXXTargetLowering *>(TLI);
}
- /// \returns Flags corresponding to the attributes on the \p ArgIdx-th
- /// parameter of \p Call.
- ISD::ArgFlagsTy getAttributesForArgIdx(const CallBase &Call,
- unsigned ArgIdx) const;
-
- /// \returns Flags corresponding to the attributes on the return from \p Call.
- ISD::ArgFlagsTy getAttributesForReturn(const CallBase &Call) const;
-
/// Adds flags to \p Flags based off of the attributes in \p Attrs.
/// \p OpIdx is the index in \p Attrs to add flags from.
void addArgFlagsFromAttributes(ISD::ArgFlagsTy &Flags,
diff --git a/llvm/lib/CodeGen/GlobalISel/CallLowering.cpp b/llvm/lib/CodeGen/GlobalISel/CallLowering.cpp
index 90a0791a04e06..7566c766656bb 100644
--- a/llvm/lib/CodeGen/GlobalISel/CallLowering.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/CallLowering.cpp
@@ -99,25 +99,6 @@ static void addFlagsFromAttrSet(ISD::ArgFlagsTy &Flags, AttributeSet Attrs) {
}
}
-ISD::ArgFlagsTy CallLowering::getAttributesForArgIdx(const CallBase &Call,
- unsigned ArgIdx) const {
- ISD::ArgFlagsTy Flags;
- const AttributeList &Attrs = Call.getAttributes();
- addFlagsFromAttrSet(Flags, Attrs.getParamAttrs(ArgIdx));
- if (const Function *F = Call.getCalledFunction())
- addFlagsFromAttrSet(Flags, F->getAttributes().getParamAttrs(ArgIdx));
- return Flags;
-}
-
-ISD::ArgFlagsTy
-CallLowering::getAttributesForReturn(const CallBase &Call) const {
- ISD::ArgFlagsTy Flags;
- addFlagsFromAttrSet(Flags, Call.getAttributes().getRetAttrs());
- if (const Function *F = Call.getCalledFunction())
- addFlagsFromAttrSet(Flags, F->getAttributes().getRetAttrs());
- return Flags;
-}
-
void CallLowering::addArgFlagsFromAttributes(ISD::ArgFlagsTy &Flags,
const AttributeList &Attrs,
unsigned OpIdx) const {
@@ -144,10 +125,15 @@ bool CallLowering::lowerCall(MachineIRBuilder &MIRBuilder, const CallBase &CB,
CallingConv::ID CallConv = CB.getCallingConv();
Type *RetTy = CB.getType();
bool IsVarArg = CB.getFunctionType()->isVarArg();
+ const Function *Callee = CB.getCalledFunction();
- SmallVector<BaseArgInfo, 4> SplitArgs;
- getReturnInfo(CallConv, RetTy, CB.getAttributes(), SplitArgs, DL);
- Info.CanLowerReturn = canLowerReturn(MF, CallConv, SplitArgs, IsVarArg);
+ if (RetTy->isVoidTy()) {
+ Info.CanLowerReturn = true;
+ } else {
+ SmallVector<BaseArgInfo, 4> SplitArgs;
+ getReturnInfo(CallConv, RetTy, CB.getAttributes(), SplitArgs, DL);
+ Info.CanLowerReturn = canLowerReturn(MF, CallConv, SplitArgs, IsVarArg);
+ }
Info.IsConvergent = CB.isConvergent();
@@ -166,7 +152,10 @@ bool CallLowering::lowerCall(MachineIRBuilder &MIRBuilder, const CallBase &CB,
unsigned i = 0;
unsigned NumFixedArgs = CB.getFunctionType()->getNumParams();
for (const auto &Arg : CB.args()) {
- ArgInfo OrigArg{ArgRegs[i], *Arg.get(), i, getAttributesForArgIdx(CB, i)};
+ ISD::ArgFlagsTy Flags;
+ if (Callee)
+ addFlagsFromAttrSet(Flags, Callee->getAttributes().getParamAttrs(i));
+ ArgInfo OrigArg{ArgRegs[i], *Arg.get(), i, Flags};
setArgFlags(OrigArg, i + AttributeList::FirstArgIndex, DL, CB);
if (i >= NumFixedArgs)
OrigArg.Flags[0].setVarArg();
@@ -210,7 +199,10 @@ bool CallLowering::lowerCall(MachineIRBuilder &MIRBuilder, const CallBase &CB,
Register ReturnHintAlignReg;
Align ReturnHintAlign;
- Info.OrigRet = ArgInfo{ResRegs, RetTy, 0, getAttributesForReturn(CB)};
+ ISD::ArgFlagsTy RetFlags;
+ if (Callee)
+ addFlagsFromAttrSet(RetFlags, Callee->getAttributes().getRetAttrs());
+ Info.OrigRet = ArgInfo{ResRegs, RetTy, 0, RetFlags};
if (!Info.OrigRet.Ty->isVoidTy()) {
setArgFlags(Info.OrigRet, AttributeList::ReturnIndex, DL, CB);
More information about the llvm-commits
mailing list