It doesn't make sense for kernel arguments to be passed on the stack,
but we can still interpret byref sensibly for constant and other
global-like address spaces.
These are treated identically to value aggregates placed in the kernel
argument list. A %struct.foo or %struct.foo addrspace(4)*
byref(sizeof(%struct.foo)) align(alignof(%struct.foo)) argument should
produce the same offsets and argument metadata.
This handles all 3 kernel ABI implementations, and the two HSA
metadata emission paths.
This is too long.