We cannot easily deduce that an offset is in a SGPRs, but the Mesa frontend
cannot easily make use of an explicit soffset parameter. Furthermore, it is
likely that in the future, LLVM will be in a better position that the frontend
to choose an SGPR offset if possible.
Since there aren't any frontend uses of these intrinsics in upstream
repositories yet, I would like to take this opportunity to change the
intrinsic signatures to a single offset parameter, which is then selected
to immediate offsets or voffsets using a ComplexPattern.
If an offset is too big for the ImmOffset field we should split the offset and store the part in ImmOffset and part in soffset.
If the part in soffset is less than 64, then you save a move instruction since you can encode inline immediates up to 64 in the soffset field, and for cases when the part in soffset is greater than 64 up to 2^16, you can use an s_movk instruction to copy the immediate into register, saving 4 bytes of code size.