Skip to content

Commit 6aaa564

Browse files
author
Jun Wang
committed
Overload the function CallLowering::determineAndHandleAssignments() with
a CCState argument.
1 parent 265d5c6 commit 6aaa564

File tree

5 files changed

+41
-44
lines changed

5 files changed

+41
-44
lines changed

llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -407,6 +407,12 @@ class CallLowering {
407407
CallingConv::ID CallConv, bool IsVarArg,
408408
ArrayRef<Register> ThisReturnRegs = std::nullopt) const;
409409

410+
bool determineAndHandleAssignments(
411+
ValueHandler &Handler, ValueAssigner &Assigner,
412+
SmallVectorImpl<ArgInfo> &Args, MachineIRBuilder &MIRBuilder,
413+
CCState &CCInfo, SmallVectorImpl<CCValAssign> &ArgLocs,
414+
ArrayRef<Register> ThisReturnRegs = std::nullopt) const;
415+
410416
/// Use \p Handler to insert code to handle the argument/return values
411417
/// represented by \p Args. It's expected determineAssignments previously
412418
/// processed these arguments to populate \p CCState and \p ArgLocs.

llvm/lib/CodeGen/GlobalISel/CallLowering.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -628,6 +628,19 @@ bool CallLowering::determineAndHandleAssignments(
628628
ThisReturnRegs);
629629
}
630630

631+
bool CallLowering::determineAndHandleAssignments(
632+
ValueHandler &Handler, ValueAssigner &Assigner,
633+
SmallVectorImpl<ArgInfo> &Args, MachineIRBuilder &MIRBuilder,
634+
CCState &CCInfo, SmallVectorImpl<CCValAssign> &ArgLocs,
635+
ArrayRef<Register> ThisReturnRegs) const {
636+
637+
if (!determineAssignments(Assigner, Args, CCInfo))
638+
return false;
639+
640+
return handleAssignments(Handler, Args, CCInfo, ArgLocs, MIRBuilder,
641+
ThisReturnRegs);
642+
}
643+
631644
static unsigned extendOpFromFlags(llvm::ISD::ArgFlagsTy Flags) {
632645
if (Flags.isSExt())
633646
return TargetOpcode::G_SEXT;

llvm/lib/Target/AMDGPU/AMDGPUCallLowering.cpp

Lines changed: 21 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -317,35 +317,6 @@ bool AMDGPUCallLowering::canLowerReturn(MachineFunction &MF,
317317
return checkReturn(CCInfo, Outs, TLI.CCAssignFnForReturn(CallConv, IsVarArg));
318318
}
319319

320-
/// Replace CallLowering::determineAndHandleAssignments() because we need to
321-
/// reserve ScratchRSrcReg when necessary.
322-
/// TODO: Investigate if reserving ScratchRSrcReg can be moved to calling conv
323-
/// functions. If so, then this function is not needed anymore -- we can just
324-
/// use CallLowering::determineAndHandleAssignments() as before.
325-
bool AMDGPUCallLowering::determineAndHandleAssignmentsLocal(
326-
ValueHandler &Handler, ValueAssigner &Assigner,
327-
SmallVectorImpl<ArgInfo> &Args, MachineIRBuilder &MIRBuilder,
328-
CallingConv::ID CallConv, bool IsVarArg) const {
329-
330-
MachineFunction &MF = MIRBuilder.getMF();
331-
const Function &F = MF.getFunction();
332-
333-
SmallVector<CCValAssign, 16> ArgLocs;
334-
335-
CCState CCInfo(CallConv, IsVarArg, MF, ArgLocs, F.getContext());
336-
337-
const GCNSubtarget &ST = MF.getSubtarget<GCNSubtarget>();
338-
if (!ST.enableFlatScratch()) {
339-
SIMachineFunctionInfo *FuncInfo = MF.getInfo<SIMachineFunctionInfo>();
340-
CCInfo.AllocateReg(FuncInfo->getScratchRSrcReg());
341-
}
342-
343-
if (!determineAssignments(Assigner, Args, CCInfo))
344-
return false;
345-
346-
return handleAssignments(Handler, Args, CCInfo, ArgLocs, MIRBuilder);
347-
}
348-
349320
/// Lower the return value for the already existing \p Ret. This assumes that
350321
/// \p B's insertion point is correct.
351322
bool AMDGPUCallLowering::lowerReturnVal(MachineIRBuilder &B,
@@ -409,8 +380,16 @@ bool AMDGPUCallLowering::lowerReturnVal(MachineIRBuilder &B,
409380
OutgoingValueAssigner Assigner(AssignFn);
410381
AMDGPUOutgoingValueHandler RetHandler(B, *MRI, Ret);
411382

412-
return determineAndHandleAssignmentsLocal(RetHandler, Assigner, SplitRetInfos,
413-
B, CC, F.isVarArg());
383+
SmallVector<CCValAssign, 16> ArgLocs;
384+
CCState CCInfo(CC, F.isVarArg(), MF, ArgLocs, F.getContext());
385+
386+
const GCNSubtarget &ST = MF.getSubtarget<GCNSubtarget>();
387+
if (!ST.enableFlatScratch()) {
388+
SIMachineFunctionInfo *FuncInfo = MF.getInfo<SIMachineFunctionInfo>();
389+
CCInfo.AllocateReg(FuncInfo->getScratchRSrcReg());
390+
}
391+
return determineAndHandleAssignments(RetHandler, Assigner, SplitRetInfos, B,
392+
CCInfo, ArgLocs);
414393
}
415394

416395
bool AMDGPUCallLowering::lowerReturn(MachineIRBuilder &B, const Value *Val,
@@ -1575,9 +1554,17 @@ bool AMDGPUCallLowering::lowerCall(MachineIRBuilder &MIRBuilder,
15751554
Info.IsVarArg);
15761555
IncomingValueAssigner Assigner(RetAssignFn);
15771556
CallReturnHandler Handler(MIRBuilder, MRI, MIB);
1578-
if (!determineAndHandleAssignmentsLocal(Handler, Assigner, InArgs,
1579-
MIRBuilder, Info.CallConv,
1580-
Info.IsVarArg))
1557+
1558+
SmallVector<CCValAssign, 16> ArgLocs;
1559+
CCState CCInfo(Info.CallConv, Info.IsVarArg, MF, ArgLocs, F.getContext());
1560+
1561+
const GCNSubtarget &ST = MF.getSubtarget<GCNSubtarget>();
1562+
if (!ST.enableFlatScratch()) {
1563+
SIMachineFunctionInfo *FuncInfo = MF.getInfo<SIMachineFunctionInfo>();
1564+
CCInfo.AllocateReg(FuncInfo->getScratchRSrcReg());
1565+
}
1566+
if (!determineAndHandleAssignments(Handler, Assigner, InArgs, MIRBuilder,
1567+
CCInfo, ArgLocs))
15811568
return false;
15821569
}
15831570

llvm/lib/Target/AMDGPU/AMDGPUCallLowering.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,6 @@ class AMDGPUCallLowering final : public CallLowering {
3737
bool lowerReturnVal(MachineIRBuilder &B, const Value *Val,
3838
ArrayRef<Register> VRegs, MachineInstrBuilder &Ret) const;
3939

40-
bool determineAndHandleAssignmentsLocal(ValueHandler &Handler,
41-
ValueAssigner &Assigner,
42-
SmallVectorImpl<ArgInfo> &Args,
43-
MachineIRBuilder &MIRBuilder,
44-
CallingConv::ID CallConv,
45-
bool IsVarArg) const;
46-
4740
public:
4841
AMDGPUCallLowering(const AMDGPUTargetLowering &TLI);
4942

llvm/lib/Target/AMDGPU/SIISelLowering.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16039,9 +16039,7 @@ static bool isCopyFromRegForI1Return(const SDNode *N) {
1603916039
N3 = N3->getOperand(0).getNode();
1604016040
} while (N3->getOpcode() == ISD::CopyFromReg);
1604116041

16042-
if (N3->getOpcode() != ISD::CALLSEQ_END)
16043-
return false;
16044-
return true;
16042+
return N3->getOpcode() == ISD::CALLSEQ_END;
1604516043
}
1604616044

1604716045
bool SITargetLowering::isSDNodeSourceOfDivergence(const SDNode *N,

0 commit comments

Comments
 (0)