msgpack::ArrayDocNode Args) {
auto &Func = MF.getFunction();
const GCNSubtarget &ST = MF.getSubtarget<GCNSubtarget>();
- const SIMachineFunctionInfo &MFI = *MF.getInfo<SIMachineFunctionInfo>();
unsigned HiddenArgNumBytes = ST.getImplicitArgNumBytes(Func);
if (!HiddenArgNumBytes)
if (M->getNamedMetadata("llvm.printf.fmts"))
emitKernelArg(DL, Int8PtrTy, Align(8), "hidden_printf_buffer", Offset,
Args);
- else if (MFI.hasHostcallPtr()) {
+ else if (!Func.hasFnAttribute("amdgpu-no-hostcall-ptr")) {
// The printf runtime binding pass should have ensured that hostcall and
// printf are not used in the same module.
assert(!M->getNamedMetadata("llvm.printf.fmts"));
} else
Offset += 8; // Skipped.
- if (MFI.hasHostcallPtr()) {
+ if (!Func.hasFnAttribute("amdgpu-no-hostcall-ptr")) {
emitKernelArg(DL, Int8PtrTy, Align(8), "hidden_hostcall_buffer", Offset,
Args);
} else
emitKernelArg(DL, Int8PtrTy, Align(8), "hidden_multigrid_sync_arg", Offset,
Args);
- if (MFI.hasHeapPtr())
+ if (!Func.hasFnAttribute("amdgpu-no-heap-ptr"))
emitKernelArg(DL, Int8PtrTy, Align(8), "hidden_heap_v1", Offset, Args);
else
Offset += 8; // Skipped.
WorkItemIDZ(false),
ImplicitBufferPtr(false),
ImplicitArgPtr(false),
- HostcallPtr(false),
- HeapPtr(false),
GITPtrHigh(0xffffffff),
HighBitsOf32BitAddress(0),
GDSSize(0) {
if (!F.hasFnAttribute("amdgpu-no-dispatch-id"))
DispatchID = true;
-
- if (!F.hasFnAttribute("amdgpu-no-hostcall-ptr"))
- HostcallPtr = true;
-
- if (!F.hasFnAttribute("amdgpu-no-heap-ptr"))
- HeapPtr = true;
}
// FIXME: This attribute is a hack, we just need an analysis on the function
// Pointer to where the ABI inserts special kernel arguments separate from the
// user arguments. This is an offset from the KernargSegmentPtr.
bool ImplicitArgPtr : 1;
- bool HostcallPtr : 1;
- bool HeapPtr : 1;
bool MayNeedAGPRs : 1;
return ImplicitArgPtr;
}
- bool hasHostcallPtr() const {
- return HostcallPtr;
- }
-
- bool hasHeapPtr () const {
- return HeapPtr;
- }
-
bool hasImplicitBufferPtr() const {
return ImplicitBufferPtr;
}