[llvm] [AMDGPU][GlobalIsel] RegBankLegalizeRules for amdgcn_s_quadmask (PR #202698)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 9 08:53:44 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-amdgpu
Author: Syadus Sefat (mssefat)
<details>
<summary>Changes</summary>
This patch adds RegBankLegalizeRules for amdgcn_s_quadmask
---
Full diff: https://github.com/llvm/llvm-project/pull/202698.diff
2 Files Affected:
- (modified) llvm/lib/Target/AMDGPU/AMDGPURegBankLegalizeRules.cpp (+6)
- (modified) llvm/test/CodeGen/AMDGPU/llvm.amdgcn.quadmask.ll (+6-6)
``````````diff
diff --git a/llvm/lib/Target/AMDGPU/AMDGPURegBankLegalizeRules.cpp b/llvm/lib/Target/AMDGPU/AMDGPURegBankLegalizeRules.cpp
index e5bab2bbdfa25..f7440db1b041b 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPURegBankLegalizeRules.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPURegBankLegalizeRules.cpp
@@ -2172,6 +2172,12 @@ RegBankLegalizeRules::RegBankLegalizeRules(const GCNSubtarget &_ST,
.Uni(S16, {{UniInVgprS16}, {IntrId, Vgpr32}})
.Div(S16, {{Vgpr16}, {IntrId, Vgpr32}});
+ addRulesForIOpcs({amdgcn_s_quadmask}, Standard)
+ .Uni(S32, {{Sgpr32}, {IntrId, SgprB32_ReadFirstLane}})
+ .Div(S32, {{Sgpr32ToVgprDst}, {IntrId, SgprB32_ReadFirstLane}})
+ .Uni(S64, {{Sgpr64}, {IntrId, SgprB64_ReadFirstLane}})
+ .Div(S64, {{Sgpr64ToVgprDst}, {IntrId, SgprB64_ReadFirstLane}});
+
// TODO: Add handling for GFX90A+ which should use VGPRs instead of AGPRs.
bool HasGFX90AInsts = ST->hasGFX90AInsts();
addRulesForIOpcs({amdgcn_mfma_f32_32x32x1f32, amdgcn_mfma_f32_16x16x1f32,
diff --git a/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.quadmask.ll b/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.quadmask.ll
index eabe746e8b38e..91b99e824dc7e 100644
--- a/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.quadmask.ll
+++ b/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.quadmask.ll
@@ -1,5 +1,5 @@
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
-; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -amdgpu-enable-delay-alu=0 -global-isel=1 < %s | FileCheck -check-prefixes=GFX11,GFX11-GISEL %s
+; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -amdgpu-enable-delay-alu=0 -global-isel=1 -new-reg-bank-select < %s | FileCheck -check-prefixes=GFX11,GFX11-GISEL %s
; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -amdgpu-enable-delay-alu=0 -global-isel=0 < %s | FileCheck -check-prefixes=GFX11,GFX11-SDAG %s
declare i32 @llvm.amdgcn.s.quadmask.i32(i32)
@@ -179,14 +179,15 @@ define amdgpu_kernel void @test_scc_quadmask_32(i32 %val0, i32 %val1, ptr addrsp
; GFX11-GISEL: ; %bb.0:
; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x24
; GFX11-GISEL-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0
+; GFX11-GISEL-NEXT: v_mov_b32_e32 v3, 0
; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)
; GFX11-GISEL-NEXT: s_and_b32 s0, s0, 1
; GFX11-GISEL-NEXT: s_quadmask_b32 s1, s1
; GFX11-GISEL-NEXT: s_cmp_eq_u32 s0, 0
-; GFX11-GISEL-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v3, s1
+; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, s1
; GFX11-GISEL-NEXT: s_cselect_b32 s0, 1, 0
; GFX11-GISEL-NEXT: v_mov_b32_e32 v4, s0
-; GFX11-GISEL-NEXT: global_store_b32 v2, v3, s[2:3]
+; GFX11-GISEL-NEXT: global_store_b32 v3, v2, s[2:3]
; GFX11-GISEL-NEXT: global_store_b32 v[0:1], v4, off
; GFX11-GISEL-NEXT: s_endpgm
;
@@ -220,13 +221,12 @@ define amdgpu_kernel void @test_scc_quadmask_64(i32 %val0, i64 %val1, ptr addrsp
; GFX11-GISEL-NEXT: s_clause 0x1
; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x2c
; GFX11-GISEL-NEXT: s_load_b32 s4, s[4:5], 0x24
-; GFX11-GISEL-NEXT: v_mov_b32_e32 v3, 0
+; GFX11-GISEL-NEXT: v_dual_mov_b32 v4, 0 :: v_dual_mov_b32 v3, 0
; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)
; GFX11-GISEL-NEXT: s_quadmask_b64 s[0:1], s[0:1]
; GFX11-GISEL-NEXT: s_and_b32 s4, s4, 1
-; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, s0
+; GFX11-GISEL-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-GISEL-NEXT: s_cmp_eq_u32 s4, 0
-; GFX11-GISEL-NEXT: v_dual_mov_b32 v4, 0 :: v_dual_mov_b32 v1, s1
; GFX11-GISEL-NEXT: s_cselect_b32 s0, 1, 0
; GFX11-GISEL-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v5, s0
; GFX11-GISEL-NEXT: global_store_b64 v4, v[0:1], s[2:3]
``````````
</details>
https://github.com/llvm/llvm-project/pull/202698
More information about the llvm-commits
mailing list