Skip to content

Commit a78d0ca

Browse files
necipfazilPrabhuk
authored andcommitted
[CallSiteInfo][NFC] CallSiteInfo -> CallSiteInfo.ArgRegPairs
CallSiteInfo is originally used only for argument - register pairs. Make it struct, in which we can store additional data for call sites. Also, the variables/methods used for CallSiteInfo are named for its original use case, e.g., CallFwdRegsInfo. Refactor these for the upcoming use, e.g. addCallArgsForwardingRegs() -> addCallSiteInfo(). An upcoming patch will add type ids for indirect calls to propogate them from middle-end to the back-end. The type ids will be then used to emit the call graph section. Original RFC: https://lists.llvm.org/pipermail/llvm-dev/2021-June/151044.html Updated RFC: https://lists.llvm.org/pipermail/llvm-dev/2021-July/151739.html Differential Revision: https://reviews.llvm.org/D107109?id=362888
1 parent e96f652 commit a78d0ca

File tree

10 files changed

+24
-22
lines changed

10 files changed

+24
-22
lines changed

llvm/include/llvm/CodeGen/MachineFunction.h

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -481,9 +481,11 @@ class LLVM_EXTERNAL_VISIBILITY MachineFunction {
481481
assert(Arg < (1 << 16) && "Arg out of range");
482482
}
483483
};
484-
/// Vector of call argument and its forwarding register.
485-
using CallSiteInfo = SmallVector<ArgRegPair, 1>;
486-
using CallSiteInfoImpl = SmallVectorImpl<ArgRegPair>;
484+
485+
struct CallSiteInfo {
486+
/// Vector of call argument and its forwarding register.
487+
SmallVector<ArgRegPair, 1> ArgRegPairs;
488+
};
487489

488490
private:
489491
Delegate *TheDelegate = nullptr;
@@ -1345,8 +1347,7 @@ class LLVM_EXTERNAL_VISIBILITY MachineFunction {
13451347
}
13461348

13471349
/// Start tracking the arguments passed to the call \p CallI.
1348-
void addCallArgsForwardingRegs(const MachineInstr *CallI,
1349-
CallSiteInfoImpl &&CallInfo) {
1350+
void addCallSiteInfo(const MachineInstr *CallI, CallSiteInfo &&CallInfo) {
13501351
assert(CallI->isCandidateForCallSiteEntry());
13511352
bool Inserted =
13521353
CallSitesInfo.try_emplace(CallI, std::move(CallInfo)).second;

llvm/include/llvm/CodeGen/SelectionDAG.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,6 @@ class SelectionDAG {
279279
SDDbgInfo *DbgInfo;
280280

281281
using CallSiteInfo = MachineFunction::CallSiteInfo;
282-
using CallSiteInfoImpl = MachineFunction::CallSiteInfoImpl;
283282

284283
struct NodeExtraInfo {
285284
CallSiteInfo CSInfo;
@@ -2259,7 +2258,7 @@ class SelectionDAG {
22592258
}
22602259

22612260
/// Set CallSiteInfo to be associated with Node.
2262-
void addCallSiteInfo(const SDNode *Node, CallSiteInfoImpl &&CallInfo) {
2261+
void addCallSiteInfo(const SDNode *Node, CallSiteInfo &&CallInfo) {
22632262
SDEI[Node].CSInfo = std::move(CallInfo);
22642263
}
22652264
/// Return CallSiteInfo associated with Node, or a default if none exists.

llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -798,10 +798,10 @@ static void collectCallSiteParameters(const MachineInstr *CallMI,
798798
ParamSet &Params) {
799799
const MachineFunction *MF = CallMI->getMF();
800800
const auto &CalleesMap = MF->getCallSitesInfo();
801-
auto CallFwdRegsInfo = CalleesMap.find(CallMI);
801+
auto CSInfo = CalleesMap.find(CallMI);
802802

803803
// There is no information for the call instruction.
804-
if (CallFwdRegsInfo == CalleesMap.end())
804+
if (CSInfo == CalleesMap.end())
805805
return;
806806

807807
const MachineBasicBlock *MBB = CallMI->getParent();
@@ -815,7 +815,7 @@ static void collectCallSiteParameters(const MachineInstr *CallMI,
815815
DIExpression::get(MF->getFunction().getContext(), {});
816816

817817
// Add all the forwarding registers into the ForwardedRegWorklist.
818-
for (const auto &ArgReg : CallFwdRegsInfo->second) {
818+
for (const auto &ArgReg : CSInfo->second.ArgRegPairs) {
819819
bool InsertedReg =
820820
ForwardedRegWorklist.insert({ArgReg.Reg, {{ArgReg.Reg, EmptyExpr}}})
821821
.second;

llvm/lib/CodeGen/MIRParser/MIRParser.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -425,11 +425,11 @@ bool MIRParserImpl::initializeCallSiteInfo(
425425
Register Reg;
426426
if (parseNamedRegisterReference(PFS, Reg, ArgRegPair.Reg.Value, Error))
427427
return error(Error, ArgRegPair.Reg.SourceRange);
428-
CSInfo.emplace_back(Reg, ArgRegPair.ArgNo);
428+
CSInfo.ArgRegPairs.emplace_back(Reg, ArgRegPair.ArgNo);
429429
}
430430

431431
if (TM.Options.EmitCallSiteInfo)
432-
MF.addCallArgsForwardingRegs(&*CallI, std::move(CSInfo));
432+
MF.addCallSiteInfo(&*CallI, std::move(CSInfo));
433433
}
434434

435435
if (YamlMF.CallSitesInfo.size() && !TM.Options.EmitCallSiteInfo)

llvm/lib/CodeGen/MIRPrinter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -540,7 +540,7 @@ void MIRPrinter::convertCallSiteObjects(yaml::MachineFunction &YMF,
540540
std::distance(CallI->getParent()->instr_begin(), CallI);
541541
YmlCS.CallLocation = CallLocation;
542542
// Construct call arguments and theirs forwarding register info.
543-
for (auto ArgReg : CSInfo.second) {
543+
for (auto ArgReg : CSInfo.second.ArgRegPairs) {
544544
yaml::CallSiteInfo::ArgRegPair YmlArgReg;
545545
YmlArgReg.ArgNo = ArgReg.ArgNo;
546546
printRegMIR(ArgReg.Reg, YmlArgReg.Reg, TRI);

llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -888,8 +888,9 @@ EmitSchedule(MachineBasicBlock::iterator &InsertPos) {
888888
}
889889

890890
if (MI->isCandidateForCallSiteEntry() &&
891-
DAG->getTarget().Options.EmitCallSiteInfo)
892-
MF.addCallArgsForwardingRegs(MI, DAG->getCallSiteInfo(Node));
891+
DAG->getTarget().Options.EmitCallSiteInfo) {
892+
MF.addCallSiteInfo(MI, DAG->getCallSiteInfo(Node));
893+
}
893894

894895
if (DAG->getNoMergeSiteInfo(Node)) {
895896
MI->setFlag(MachineInstr::MIFlag::NoMerge);

llvm/lib/Target/AArch64/AArch64ISelLowering.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8219,9 +8219,10 @@ AArch64TargetLowering::LowerCall(CallLoweringInfo &CLI,
82198219
// Call site info is used for function's parameter entry value
82208220
// tracking. For now we track only simple cases when parameter
82218221
// is transferred through whole register.
8222-
llvm::erase_if(CSInfo, [&VA](MachineFunction::ArgRegPair ArgReg) {
8223-
return ArgReg.Reg == VA.getLocReg();
8224-
});
8222+
llvm::erase_if(CSInfo.ArgRegPairs,
8223+
[&VA](MachineFunction::ArgRegPair ArgReg) {
8224+
return ArgReg.Reg == VA.getLocReg();
8225+
});
82258226
} else {
82268227
// Add an extra level of indirection for streaming mode changes by
82278228
// using a pseudo copy node that cannot be rematerialised between a
@@ -8233,7 +8234,7 @@ AArch64TargetLowering::LowerCall(CallLoweringInfo &CLI,
82338234
RegsUsed.insert(VA.getLocReg());
82348235
const TargetOptions &Options = DAG.getTarget().Options;
82358236
if (Options.EmitCallSiteInfo)
8236-
CSInfo.emplace_back(VA.getLocReg(), i);
8237+
CSInfo.ArgRegPairs.emplace_back(VA.getLocReg(), i);
82378238
}
82388239
} else {
82398240
assert(VA.isMemLoc());

llvm/lib/Target/ARM/ARMISelLowering.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2571,7 +2571,7 @@ ARMTargetLowering::LowerCall(TargetLowering::CallLoweringInfo &CLI,
25712571
}
25722572
const TargetOptions &Options = DAG.getTarget().Options;
25732573
if (Options.EmitCallSiteInfo)
2574-
CSInfo.emplace_back(VA.getLocReg(), i);
2574+
CSInfo.ArgRegPairs.emplace_back(VA.getLocReg(), i);
25752575
RegsToPass.push_back(std::make_pair(VA.getLocReg(), Arg));
25762576
} else if (isByVal) {
25772577
assert(VA.isMemLoc());

llvm/lib/Target/Mips/MipsISelLowering.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3382,7 +3382,7 @@ MipsTargetLowering::LowerCall(TargetLowering::CallLoweringInfo &CLI,
33823382
// Collect CSInfo about which register passes which parameter.
33833383
const TargetOptions &Options = DAG.getTarget().Options;
33843384
if (Options.SupportsDebugEntryValues)
3385-
CSInfo.emplace_back(VA.getLocReg(), i);
3385+
CSInfo.ArgRegPairs.emplace_back(VA.getLocReg(), i);
33863386

33873387
continue;
33883388
}

llvm/lib/Target/X86/X86ISelLoweringCall.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2224,7 +2224,7 @@ X86TargetLowering::LowerCall(TargetLowering::CallLoweringInfo &CLI,
22242224
RegsToPass.push_back(std::make_pair(VA.getLocReg(), Arg));
22252225
const TargetOptions &Options = DAG.getTarget().Options;
22262226
if (Options.EmitCallSiteInfo)
2227-
CSInfo.emplace_back(VA.getLocReg(), I);
2227+
CSInfo.ArgRegPairs.emplace_back(VA.getLocReg(), I);
22282228
if (isVarArg && IsWin64) {
22292229
// Win64 ABI requires argument XMM reg to be copied to the corresponding
22302230
// shadow reg if callee is a varargs function.

0 commit comments

Comments
 (0)