Skip to content

Commit

Permalink
AMDGPU: Add MF independent version of getImplicitParameterOffset
Browse files Browse the repository at this point in the history
  • Loading branch information
arsenm committed Jun 7, 2023
1 parent bc61bc8 commit 3d0350b
Show file tree
Hide file tree
Showing 6 changed files with 17 additions and 11 deletions.
2 changes: 1 addition & 1 deletion llvm/lib/Target/AMDGPU/AMDGPUCallLowering.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -521,7 +521,7 @@ bool AMDGPUCallLowering::lowerFormalArgumentsKernel(

unsigned i = 0;
const Align KernArgBaseAlign(16);
const unsigned BaseOffset = Subtarget->getExplicitKernelArgOffset(F);
const unsigned BaseOffset = Subtarget->getExplicitKernelArgOffset();
uint64_t ExplicitArgOffset = 0;

// TODO: Align down to dword alignment and extract bits for extending loads.
Expand Down
18 changes: 11 additions & 7 deletions llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1066,7 +1066,7 @@ void AMDGPUTargetLowering::analyzeFormalArgumentsCompute(
const Function &Fn = MF.getFunction();
LLVMContext &Ctx = Fn.getParent()->getContext();
const AMDGPUSubtarget &ST = AMDGPUSubtarget::get(MF);
const unsigned ExplicitOffset = ST.getExplicitKernelArgOffset(Fn);
const unsigned ExplicitOffset = ST.getExplicitKernelArgOffset();
CallingConv::ID CC = Fn.getCallingConv();

Align MaxAlign = Align(1);
Expand Down Expand Up @@ -4563,13 +4563,11 @@ SDValue AMDGPUTargetLowering::loadInputValue(SelectionDAG &DAG,
}

uint32_t AMDGPUTargetLowering::getImplicitParameterOffset(
const MachineFunction &MF, const ImplicitParameter Param) const {
const AMDGPUMachineFunction *MFI = MF.getInfo<AMDGPUMachineFunction>();
unsigned ExplicitArgOffset =
Subtarget->getExplicitKernelArgOffset(MF.getFunction());
uint64_t ExplicitKernArgSize, const ImplicitParameter Param) const {
unsigned ExplicitArgOffset = Subtarget->getExplicitKernelArgOffset();
const Align Alignment = Subtarget->getAlignmentForImplicitArgPtr();
uint64_t ArgOffset = alignTo(MFI->getExplicitKernArgSize(), Alignment) +
ExplicitArgOffset;
uint64_t ArgOffset =
alignTo(ExplicitKernArgSize, Alignment) + ExplicitArgOffset;
switch (Param) {
case FIRST_IMPLICIT:
return ArgOffset;
Expand All @@ -4583,6 +4581,12 @@ uint32_t AMDGPUTargetLowering::getImplicitParameterOffset(
llvm_unreachable("unexpected implicit parameter type");
}

uint32_t AMDGPUTargetLowering::getImplicitParameterOffset(
const MachineFunction &MF, const ImplicitParameter Param) const {
const AMDGPUMachineFunction *MFI = MF.getInfo<AMDGPUMachineFunction>();
return getImplicitParameterOffset(MFI->getExplicitKernArgSize(), Param);
}

#define NODE_NAME_CASE(node) case AMDGPUISD::node: return #node;

const char* AMDGPUTargetLowering::getTargetNodeName(unsigned Opcode) const {
Expand Down
2 changes: 2 additions & 0 deletions llvm/lib/Target/AMDGPU/AMDGPUISelLowering.h
Original file line number Diff line number Diff line change
Expand Up @@ -344,6 +344,8 @@ class AMDGPUTargetLowering : public TargetLowering {
/// type of implicit parameter.
uint32_t getImplicitParameterOffset(const MachineFunction &MF,
const ImplicitParameter Param) const;
uint32_t getImplicitParameterOffset(const uint64_t ExplicitKernArgSize,
const ImplicitParameter Param) const;

MVT getFenceOperandTy(const DataLayout &DL) const override {
return MVT::i32;
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Target/AMDGPU/AMDGPULowerKernelArguments.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ bool AMDGPULowerKernelArguments::runOnFunction(Function &F) {
IRBuilder<> Builder(&*getInsertPt(EntryBlock));

const Align KernArgBaseAlign(16); // FIXME: Increase if necessary
const uint64_t BaseOffset = ST.getExplicitKernelArgOffset(F);
const uint64_t BaseOffset = ST.getExplicitKernelArgOffset();

Align MaxAlign;
// FIXME: Alignment is broken with explicit arg offset.;
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Target/AMDGPU/AMDGPUSubtarget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -576,7 +576,7 @@ unsigned AMDGPUSubtarget::getKernArgSegmentSize(const Function &F,
Align &MaxAlign) const {
uint64_t ExplicitArgBytes = getExplicitKernArgSize(F, MaxAlign);

unsigned ExplicitOffset = getExplicitKernelArgOffset(F);
unsigned ExplicitOffset = getExplicitKernelArgOffset();

uint64_t TotalSize = ExplicitOffset + ExplicitArgBytes;
unsigned ImplicitBytes = getImplicitArgNumBytes(F);
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Target/AMDGPU/AMDGPUSubtarget.h
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,7 @@ class AMDGPUSubtarget {

/// Returns the offset in bytes from the start of the input buffer
/// of the first explicit kernel argument.
unsigned getExplicitKernelArgOffset(const Function &F) const {
unsigned getExplicitKernelArgOffset() const {
switch (TargetTriple.getOS()) {
case Triple::AMDHSA:
case Triple::AMDPAL:
Expand Down

0 comments on commit 3d0350b

Please sign in to comment.