krzysz00 wrote: 1. For the swizzled case, that's `struct.ptr.buffer.*`, and yeah, those will always need builtins because LLVM can't deal in 2D addressing schemes 2. What I mean is that "types that work" isn't the right framing: any type can be legalized to one or more types that work. That is, down in the isel legalizer, if I call for, for example ````llvm %0 = call {i64, i64, i8} @llvm.amdgcn.raw.buffer.ptr.load(ptr addrspace(8) %rsrc, i32 %off, ...) ```` that should become two `BUFFER_LOAD` instructions, one that loads a `<4 x i32>` and one that loads an `i8` from `%off + 16`
https://github.com/llvm/llvm-project/pull/94576 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits