[llvm] AMDGPU: Fold frame indexes into disjoint s_or_b32 (PR #102345)

Diana Picus via llvm-commits llvm-commits at lists.llvm.org
Fri Mar 27 03:38:23 PDT 2026


================
@@ -174,6 +174,167 @@ body:             |
 
 ...
 
+---
+name: s_or_b32_disjoint__inline_imm__fi_offset0
+tracksRegLiveness: true
+stack:
+  - { id: 0, size: 32, alignment: 16 }
+machineFunctionInfo:
+  scratchRSrcReg:  '$sgpr0_sgpr1_sgpr2_sgpr3'
+  frameOffsetReg:  '$sgpr33'
+  stackPtrOffsetReg: '$sgpr32'
+body:             |
+  bb.0:
+    ; MUBUFW64-LABEL: name: s_or_b32_disjoint__inline_imm__fi_offset0
+    ; MUBUFW64: renamable $sgpr4 = S_LSHR_B32 $sgpr32, 6, implicit-def dead $scc
+    ; MUBUFW64-NEXT: renamable $sgpr7 = disjoint S_OR_B32 12, $sgpr4, implicit-def $scc
+    ; MUBUFW64-NEXT: SI_RETURN implicit $sgpr7, implicit $scc
+    ;
+    ; MUBUFW32-LABEL: name: s_or_b32_disjoint__inline_imm__fi_offset0
+    ; MUBUFW32: renamable $sgpr4 = S_LSHR_B32 $sgpr32, 5, implicit-def dead $scc
+    ; MUBUFW32-NEXT: renamable $sgpr7 = disjoint S_OR_B32 12, $sgpr4, implicit-def $scc
+    ; MUBUFW32-NEXT: SI_RETURN implicit $sgpr7, implicit $scc
+    ;
+    ; FLATSCRW64-LABEL: name: s_or_b32_disjoint__inline_imm__fi_offset0
+    ; FLATSCRW64: renamable $sgpr7 = disjoint S_OR_B32 12, $sgpr32, implicit-def $scc
+    ; FLATSCRW64-NEXT: SI_RETURN implicit $sgpr7, implicit $scc
+    ;
+    ; FLATSCRW32-LABEL: name: s_or_b32_disjoint__inline_imm__fi_offset0
+    ; FLATSCRW32: renamable $sgpr7 = disjoint S_OR_B32 12, $sgpr32, implicit-def $scc
+    ; FLATSCRW32-NEXT: SI_RETURN implicit $sgpr7, implicit $scc
+    renamable $sgpr7 = disjoint S_OR_B32 12, %stack.0, implicit-def $scc
+    SI_RETURN implicit $sgpr7, implicit $scc
+
+...
+
+---
+name: s_or_b32_disjoint__literal__fi_offset96
+tracksRegLiveness: true
+stack:
+  - { id: 0, size: 96, alignment: 16 }
+  - { id: 1, size: 24, alignment: 4 }
+machineFunctionInfo:
+  scratchRSrcReg:  '$sgpr0_sgpr1_sgpr2_sgpr3'
+  frameOffsetReg:  '$sgpr33'
+  stackPtrOffsetReg: '$sgpr32'
+body:             |
+  bb.0:
+    ; MUBUFW64-LABEL: name: s_or_b32_disjoint__literal__fi_offset96
+    ; MUBUFW64: renamable $sgpr4 = S_LSHR_B32 $sgpr32, 6, implicit-def dead $scc
+    ; MUBUFW64-NEXT: renamable $sgpr7 = disjoint S_OR_B32 164, $sgpr4, implicit-def $scc
+    ; MUBUFW64-NEXT: SI_RETURN implicit $sgpr7, implicit $scc
+    ;
+    ; MUBUFW32-LABEL: name: s_or_b32_disjoint__literal__fi_offset96
+    ; MUBUFW32: renamable $sgpr4 = S_LSHR_B32 $sgpr32, 5, implicit-def dead $scc
+    ; MUBUFW32-NEXT: renamable $sgpr7 = disjoint S_OR_B32 164, $sgpr4, implicit-def $scc
+    ; MUBUFW32-NEXT: SI_RETURN implicit $sgpr7, implicit $scc
+    ;
+    ; FLATSCRW64-LABEL: name: s_or_b32_disjoint__literal__fi_offset96
+    ; FLATSCRW64: renamable $sgpr7 = disjoint S_OR_B32 164, $sgpr32, implicit-def $scc
+    ; FLATSCRW64-NEXT: SI_RETURN implicit $sgpr7, implicit $scc
+    ;
+    ; FLATSCRW32-LABEL: name: s_or_b32_disjoint__literal__fi_offset96
+    ; FLATSCRW32: renamable $sgpr7 = disjoint S_OR_B32 164, $sgpr32, implicit-def $scc
+    ; FLATSCRW32-NEXT: SI_RETURN implicit $sgpr7, implicit $scc
+    renamable $sgpr7 = disjoint S_OR_B32 68, %stack.1, implicit-def $scc
+    SI_RETURN implicit $sgpr7, implicit $scc
+
+...
+
+---
+name: s_or_b32_disjoint__sgpr__fi_literal_offset
+tracksRegLiveness: true
+stack:
+  - { id: 0, size: 80, alignment: 16 }
+  - { id: 1, size: 48, alignment: 4 }
+machineFunctionInfo:
+  scratchRSrcReg:  '$sgpr0_sgpr1_sgpr2_sgpr3'
+  frameOffsetReg:  '$sgpr33'
+  stackPtrOffsetReg: '$sgpr32'
+body:             |
+  bb.0:
+    liveins: $sgpr8
+    ; MUBUFW64-LABEL: name: s_or_b32_disjoint__sgpr__fi_literal_offset
+    ; MUBUFW64: liveins: $sgpr8
+    ; MUBUFW64-NEXT: {{  $}}
+    ; MUBUFW64-NEXT: renamable $sgpr7 = S_LSHR_B32 $sgpr32, 6, implicit-def dead $scc
+    ; MUBUFW64-NEXT: renamable $sgpr7 = S_OR_B32 killed $sgpr7, $sgpr8, implicit-def $scc
+    ; MUBUFW64-NEXT: renamable $sgpr7 = disjoint S_OR_B32 killed renamable $sgpr7, 80, implicit-def $scc
+    ; MUBUFW64-NEXT: SI_RETURN implicit $sgpr7, implicit $scc
+    ;
+    ; MUBUFW32-LABEL: name: s_or_b32_disjoint__sgpr__fi_literal_offset
+    ; MUBUFW32: liveins: $sgpr8
+    ; MUBUFW32-NEXT: {{  $}}
+    ; MUBUFW32-NEXT: renamable $sgpr7 = S_LSHR_B32 $sgpr32, 5, implicit-def dead $scc
+    ; MUBUFW32-NEXT: renamable $sgpr7 = S_OR_B32 killed $sgpr7, $sgpr8, implicit-def $scc
+    ; MUBUFW32-NEXT: renamable $sgpr7 = disjoint S_OR_B32 killed renamable $sgpr7, 80, implicit-def $scc
+    ; MUBUFW32-NEXT: SI_RETURN implicit $sgpr7, implicit $scc
+    ;
+    ; FLATSCRW64-LABEL: name: s_or_b32_disjoint__sgpr__fi_literal_offset
+    ; FLATSCRW64: liveins: $sgpr8
+    ; FLATSCRW64-NEXT: {{  $}}
+    ; FLATSCRW64-NEXT: renamable $sgpr7 = S_OR_B32 killed $sgpr32, $sgpr8, implicit-def $scc
+    ; FLATSCRW64-NEXT: renamable $sgpr7 = disjoint S_OR_B32 killed renamable $sgpr7, 80, implicit-def $scc
+    ; FLATSCRW64-NEXT: SI_RETURN implicit $sgpr7, implicit $scc
+    ;
+    ; FLATSCRW32-LABEL: name: s_or_b32_disjoint__sgpr__fi_literal_offset
+    ; FLATSCRW32: liveins: $sgpr8
+    ; FLATSCRW32-NEXT: {{  $}}
+    ; FLATSCRW32-NEXT: renamable $sgpr7 = S_OR_B32 killed $sgpr32, $sgpr8, implicit-def $scc
----------------
rovka wrote:

Nit: Should this have disjoint on it too?

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


More information about the llvm-commits mailing list