[llvm] [AMDGPU] Fix s_buffer_load crash for illegal result types (PR #215483)

Arseniy Obolenskiy via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 11 04:28:52 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()));
----------------
aobolensk wrote:

Fixed

https://github.com/llvm/llvm-project/pull/215483


More information about the llvm-commits mailing list