[llvm] [AMDGPU] Fix s_buffer_load crash for illegal result types (PR #215483)
Robert Imschweiler via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 11 02:45:11 PDT 2026
================
@@ -10900,6 +10864,32 @@ SDValue SITargetLowering::lowerSBuffer(EVT VT, EVT MemVT, SDLoc DL,
return Subvector;
}
+ // No SBUFFER_LOAD pattern for this width (i1 is a legal type but still
+ // has none). Load a legal i32/vNi32 carrier and narrow/bitcast down.
+ if ((!isTypeLegal(VT) || VT == MVT::i1) && MemVT == VT) {
+ unsigned Bits = VT.getSizeInBits();
+ EVT CarrierVT = Bits <= 32 ? EVT(MVT::i32)
+ : EVT::getVectorVT(*DAG.getContext(), MVT::i32,
+ divideCeil(Bits, 32));
+ SDValue CarrierLoad = DAG.getMemIntrinsicNode(
+ AMDGPUISD::SBUFFER_LOAD, DL, DAG.getVTList(CarrierVT, MVT::Other),
+ Ops, CarrierVT,
+ MF.getMachineMemOperand(MMO, 0, CarrierVT.getStoreSize()));
----------------
ro-i wrote:
doesn't this carry over the alignment of the original MMO?
https://github.com/llvm/llvm-project/pull/215483
More information about the llvm-commits
mailing list