[llvm] [AMDGPU] add missing checks in processBaseWithConstOffset (PR #102310)

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Thu Aug 8 01:16:21 PDT 2024


================
@@ -447,3 +447,29 @@ body:             |
     %13:vreg_64 = REG_SEQUENCE %9, %subreg.sub0, %11, %subreg.sub1
     %15:vgpr_32 = FLAT_ATOMIC_ADD_RTN %13:vreg_64, %0.sub0, 0, 0, implicit $exec, implicit $flat_scr
 ...
+
+---
+# GCN-LABEL: name: nullptr_negative_offset
+# GCN: V_ADD_CO_U32_e64 -1, 0, 0
+# GCN: V_ADDC_U32_e64 -1, $vgpr1, $vcc, 0
+
+name: nullptr_negative_offset
+body:             |
+  bb.0.entry:
+    $sgpr0_sgpr1 = S_MOV_B64 $src_private_base
+    $vgpr1 = COPY $sgpr1
+    $vgpr0, $vcc = V_ADD_CO_U32_e64 -1, 0, 0, implicit $exec
+    $vgpr1, dead $vcc = V_ADDC_U32_e64 -1, $vgpr1, $vcc, 0, implicit $exec
+    $vgpr0 = FLAT_LOAD_UBYTE $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr
+    $vcc = V_CMP_EQ_U16_e64 0, $vgpr0, implicit $exec
+    $sgpr0_sgpr1 = S_MOV_B64 0
+
+  bb.1:
+    $sgpr2_sgpr3 = S_AND_B64 $exec, $vcc, implicit-def $scc
+    $sgpr0_sgpr1 = S_OR_B64 $sgpr2_sgpr3, $sgpr0_sgpr1, implicit-def $scc
+    $exec = S_ANDN2_B64_term $exec, $sgpr0_sgpr1, implicit-def $scc
+    S_CBRANCH_EXECNZ %bb.1, implicit $exec
+    S_BRANCH %bb.2
+
----------------
arsenm wrote:

This IR is already using physical registers but this is a normal SSA optimization pass, this can't test this issue 

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


More information about the llvm-commits mailing list