[llvm] [AMDGPU] Select `V_MOV_B64_e32` directly if a target supports it (PR #206135)
Shilei Tian via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 26 10:48:20 PDT 2026
https://github.com/shiltian created https://github.com/llvm/llvm-project/pull/206135
None
>From 04dfd014fd9784235e17260e3aeb9ff0145f37cc Mon Sep 17 00:00:00 2001
From: Shilei Tian <i at tianshilei.me>
Date: Fri, 26 Jun 2026 13:47:36 -0400
Subject: [PATCH] [AMDGPU] Select `V_MOV_B64_e32` directly if a target supports
it
---
llvm/lib/Target/AMDGPU/SIInstructions.td | 30 ++
.../AMDGPU/llvm.amdgcn.mfma.gfx950.bf16.ll | 32 +-
.../CodeGen/AMDGPU/llvm.amdgcn.mfma.gfx950.ll | 396 +++++++++---------
.../AMDGPU/rewrite-vgpr-mfma-to-agpr.ll | 51 ++-
.../siloadstoreopt-misaligned-regsequence.ll | 5 +-
llvm/test/CodeGen/AMDGPU/v_mov_b64-isel.ll | 119 ++++++
6 files changed, 385 insertions(+), 248 deletions(-)
create mode 100644 llvm/test/CodeGen/AMDGPU/v_mov_b64-isel.ll
diff --git a/llvm/lib/Target/AMDGPU/SIInstructions.td b/llvm/lib/Target/AMDGPU/SIInstructions.td
index 750cb1973e21f..4456a7772828c 100644
--- a/llvm/lib/Target/AMDGPU/SIInstructions.td
+++ b/llvm/lib/Target/AMDGPU/SIInstructions.td
@@ -2635,6 +2635,36 @@ let True16Predicate = UseRealTrue16Insts in {
/// conservative MachineCSE. If we end up with an s_mov_b64 + copy to
/// vgpr pattern, MachineCSE will not perform the CSE which occurs
/// after operand folding.
+let SubtargetPredicate = HasVMovB64Inst, AddedComplexity = 2 in {
+ def : GCNPat <
+ (VGPRImm<(i64 InlineImm64)>:$imm),
+ (V_MOV_B64_e32 InlineImm64:$imm)
+ >;
+
+ def : GCNPat <
+ (VGPRImm<(i64 i64imm_32bit)>:$imm),
+ (V_MOV_B64_e32 i64imm_32bit:$imm)
+ >;
+
+ def : GCNPat <
+ (VGPRImm<(f64 InlineImmFP64)>:$imm),
+ (V_MOV_B64_e32 (i64 (bitcast_fpimm_to_i64 $imm)))
+ >;
+}
+
+let SubtargetPredicate = HasVMovB64Inst, OtherPredicates = [Has64BitLiterals],
+ AddedComplexity = 2 in {
+ def : GCNPat <
+ (VGPRImm<(i64 imm)>:$imm),
+ (V_MOV_B64_e32 imm:$imm)
+ >;
+
+ def : GCNPat <
+ (VGPRImm<(f64 fpimm)>:$imm),
+ (V_MOV_B64_e32 (i64 (bitcast_fpimm_to_i64 $imm)))
+ >;
+}
+
let AddedComplexity = 1 in {
// V_MOV_B64_PSEUDO and S_MOV_B64_IMM_PSEUDO can be used with any 64-bit
// immediate and wil be expanded as needed, but we will only use these patterns
diff --git a/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.mfma.gfx950.bf16.ll b/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.mfma.gfx950.bf16.ll
index 55c076375fac4..eae7c22dcff64 100644
--- a/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.mfma.gfx950.bf16.ll
+++ b/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.mfma.gfx950.bf16.ll
@@ -106,16 +106,16 @@ define amdgpu_kernel void @test_mfma_f32_32x32x16_bf16(<8 x bfloat> %arg0, <8 x
; AGPR-NEXT: v_accvgpr_write_b32 a13, s21
; AGPR-NEXT: v_accvgpr_write_b32 a14, s22
; AGPR-NEXT: v_accvgpr_write_b32 a15, s23
+; AGPR-NEXT: v_mov_b64_e32 v[6:7], 0
; AGPR-NEXT: v_mov_b32_e32 v16, s16
-; AGPR-NEXT: v_mov_b32_e32 v17, s17
; AGPR-NEXT: v_mfma_f32_32x32x16_bf16 a[16:31], v[8:11], v[12:15], a[0:15]
-; AGPR-NEXT: v_mov_b32_e32 v18, s18
-; AGPR-NEXT: v_mov_b32_e32 v19, s19
; AGPR-NEXT: v_mov_b32_e32 v8, s20
; AGPR-NEXT: v_mov_b32_e32 v9, s21
; AGPR-NEXT: v_mov_b32_e32 v10, s22
; AGPR-NEXT: v_mov_b32_e32 v11, s23
-; AGPR-NEXT: v_mov_b64_e32 v[6:7], 0
+; AGPR-NEXT: v_mov_b32_e32 v17, s17
+; AGPR-NEXT: v_mov_b32_e32 v18, s18
+; AGPR-NEXT: v_mov_b32_e32 v19, s19
; AGPR-NEXT: s_nop 4
; AGPR-NEXT: global_store_dwordx4 v[0:1], a[28:31], off sc0 sc1
; AGPR-NEXT: s_waitcnt vmcnt(0)
@@ -164,12 +164,12 @@ define amdgpu_kernel void @test_mfma_f32_32x32x16_bf16(<8 x bfloat> %arg0, <8 x
; VGPR-NEXT: v_mov_b64_e32 v[10:11], s[18:19]
; VGPR-NEXT: v_mov_b64_e32 v[12:13], s[20:21]
; VGPR-NEXT: v_mov_b64_e32 v[14:15], s[22:23]
+; VGPR-NEXT: v_mov_b64_e32 v[38:39], 0
; VGPR-NEXT: v_mov_b32_e32 v48, s16
-; VGPR-NEXT: v_mov_b32_e32 v49, s17
; VGPR-NEXT: v_mfma_f32_32x32x16_bf16 v[16:31], v[40:43], v[44:47], v[0:15]
+; VGPR-NEXT: v_mov_b32_e32 v49, s17
; VGPR-NEXT: v_mov_b32_e32 v50, s18
; VGPR-NEXT: v_mov_b32_e32 v51, s19
-; VGPR-NEXT: v_mov_b64_e32 v[38:39], 0
; VGPR-NEXT: s_nop 8
; VGPR-NEXT: global_store_dwordx4 v[32:33], v[28:31], off sc0 sc1
; VGPR-NEXT: s_waitcnt vmcnt(0)
@@ -179,12 +179,12 @@ define amdgpu_kernel void @test_mfma_f32_32x32x16_bf16(<8 x bfloat> %arg0, <8 x
; VGPR-NEXT: s_waitcnt vmcnt(0)
; VGPR-NEXT: global_store_dwordx4 v[38:39], v[16:19], off sc0 sc1
; VGPR-NEXT: s_waitcnt vmcnt(0)
+; VGPR-NEXT: global_store_dwordx4 v[34:35], v[48:51], off sc0 sc1
+; VGPR-NEXT: s_waitcnt vmcnt(0)
; VGPR-NEXT: v_mov_b32_e32 v0, s20
; VGPR-NEXT: v_mov_b32_e32 v1, s21
; VGPR-NEXT: v_mov_b32_e32 v2, s22
; VGPR-NEXT: v_mov_b32_e32 v3, s23
-; VGPR-NEXT: global_store_dwordx4 v[34:35], v[48:51], off sc0 sc1
-; VGPR-NEXT: s_waitcnt vmcnt(0)
; VGPR-NEXT: global_store_dwordx4 v[32:33], v[0:3], off sc0 sc1
; VGPR-NEXT: s_waitcnt vmcnt(0)
; VGPR-NEXT: s_nop 0
@@ -303,16 +303,16 @@ define amdgpu_kernel void @test_mfma_f32_32x32x16_bf16__flags(<8 x bfloat> %arg0
; AGPR-NEXT: v_accvgpr_write_b32 a13, s21
; AGPR-NEXT: v_accvgpr_write_b32 a14, s22
; AGPR-NEXT: v_accvgpr_write_b32 a15, s23
+; AGPR-NEXT: v_mov_b64_e32 v[6:7], 0
; AGPR-NEXT: v_mov_b32_e32 v16, s16
-; AGPR-NEXT: v_mov_b32_e32 v17, s17
; AGPR-NEXT: v_mfma_f32_32x32x16_bf16 a[16:31], v[8:11], v[12:15], a[0:15] cbsz:2 abid:3 blgp:1
-; AGPR-NEXT: v_mov_b32_e32 v18, s18
-; AGPR-NEXT: v_mov_b32_e32 v19, s19
; AGPR-NEXT: v_mov_b32_e32 v8, s20
; AGPR-NEXT: v_mov_b32_e32 v9, s21
; AGPR-NEXT: v_mov_b32_e32 v10, s22
; AGPR-NEXT: v_mov_b32_e32 v11, s23
-; AGPR-NEXT: v_mov_b64_e32 v[6:7], 0
+; AGPR-NEXT: v_mov_b32_e32 v17, s17
+; AGPR-NEXT: v_mov_b32_e32 v18, s18
+; AGPR-NEXT: v_mov_b32_e32 v19, s19
; AGPR-NEXT: s_nop 4
; AGPR-NEXT: global_store_dwordx4 v[0:1], a[28:31], off sc0 sc1
; AGPR-NEXT: s_waitcnt vmcnt(0)
@@ -361,12 +361,12 @@ define amdgpu_kernel void @test_mfma_f32_32x32x16_bf16__flags(<8 x bfloat> %arg0
; VGPR-NEXT: v_mov_b64_e32 v[10:11], s[18:19]
; VGPR-NEXT: v_mov_b64_e32 v[12:13], s[20:21]
; VGPR-NEXT: v_mov_b64_e32 v[14:15], s[22:23]
+; VGPR-NEXT: v_mov_b64_e32 v[38:39], 0
; VGPR-NEXT: v_mov_b32_e32 v48, s16
-; VGPR-NEXT: v_mov_b32_e32 v49, s17
; VGPR-NEXT: v_mfma_f32_32x32x16_bf16 v[16:31], v[40:43], v[44:47], v[0:15] cbsz:2 abid:3 blgp:1
+; VGPR-NEXT: v_mov_b32_e32 v49, s17
; VGPR-NEXT: v_mov_b32_e32 v50, s18
; VGPR-NEXT: v_mov_b32_e32 v51, s19
-; VGPR-NEXT: v_mov_b64_e32 v[38:39], 0
; VGPR-NEXT: s_nop 8
; VGPR-NEXT: global_store_dwordx4 v[32:33], v[28:31], off sc0 sc1
; VGPR-NEXT: s_waitcnt vmcnt(0)
@@ -376,12 +376,12 @@ define amdgpu_kernel void @test_mfma_f32_32x32x16_bf16__flags(<8 x bfloat> %arg0
; VGPR-NEXT: s_waitcnt vmcnt(0)
; VGPR-NEXT: global_store_dwordx4 v[38:39], v[16:19], off sc0 sc1
; VGPR-NEXT: s_waitcnt vmcnt(0)
+; VGPR-NEXT: global_store_dwordx4 v[34:35], v[48:51], off sc0 sc1
+; VGPR-NEXT: s_waitcnt vmcnt(0)
; VGPR-NEXT: v_mov_b32_e32 v0, s20
; VGPR-NEXT: v_mov_b32_e32 v1, s21
; VGPR-NEXT: v_mov_b32_e32 v2, s22
; VGPR-NEXT: v_mov_b32_e32 v3, s23
-; VGPR-NEXT: global_store_dwordx4 v[34:35], v[48:51], off sc0 sc1
-; VGPR-NEXT: s_waitcnt vmcnt(0)
; VGPR-NEXT: global_store_dwordx4 v[32:33], v[0:3], off sc0 sc1
; VGPR-NEXT: s_waitcnt vmcnt(0)
; VGPR-NEXT: s_nop 0
diff --git a/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.mfma.gfx950.ll b/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.mfma.gfx950.ll
index a1fe463de1c54..1dbe1a9ee86e3 100644
--- a/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.mfma.gfx950.ll
+++ b/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.mfma.gfx950.ll
@@ -378,12 +378,12 @@ define amdgpu_kernel void @test_mfma_f32_32x32x16_f16(<8 x half> %arg0, <8 x hal
; SDAG-NEXT: v_mov_b64_e32 v[10:11], s[18:19]
; SDAG-NEXT: v_mov_b64_e32 v[12:13], s[20:21]
; SDAG-NEXT: v_mov_b64_e32 v[14:15], s[22:23]
+; SDAG-NEXT: v_mov_b64_e32 v[38:39], 0
; SDAG-NEXT: v_mov_b32_e32 v48, s16
-; SDAG-NEXT: v_mov_b32_e32 v49, s17
; SDAG-NEXT: v_mfma_f32_32x32x16_f16 v[16:31], v[40:43], v[44:47], v[0:15]
+; SDAG-NEXT: v_mov_b32_e32 v49, s17
; SDAG-NEXT: v_mov_b32_e32 v50, s18
; SDAG-NEXT: v_mov_b32_e32 v51, s19
-; SDAG-NEXT: v_mov_b64_e32 v[38:39], 0
; SDAG-NEXT: s_nop 8
; SDAG-NEXT: global_store_dwordx4 v[32:33], v[28:31], off sc0 sc1
; SDAG-NEXT: s_waitcnt vmcnt(0)
@@ -393,12 +393,12 @@ define amdgpu_kernel void @test_mfma_f32_32x32x16_f16(<8 x half> %arg0, <8 x hal
; SDAG-NEXT: s_waitcnt vmcnt(0)
; SDAG-NEXT: global_store_dwordx4 v[38:39], v[16:19], off sc0 sc1
; SDAG-NEXT: s_waitcnt vmcnt(0)
+; SDAG-NEXT: global_store_dwordx4 v[34:35], v[48:51], off sc0 sc1
+; SDAG-NEXT: s_waitcnt vmcnt(0)
; SDAG-NEXT: v_mov_b32_e32 v0, s20
; SDAG-NEXT: v_mov_b32_e32 v1, s21
; SDAG-NEXT: v_mov_b32_e32 v2, s22
; SDAG-NEXT: v_mov_b32_e32 v3, s23
-; SDAG-NEXT: global_store_dwordx4 v[34:35], v[48:51], off sc0 sc1
-; SDAG-NEXT: s_waitcnt vmcnt(0)
; SDAG-NEXT: global_store_dwordx4 v[32:33], v[0:3], off sc0 sc1
; SDAG-NEXT: s_waitcnt vmcnt(0)
; SDAG-NEXT: s_nop 0
@@ -496,16 +496,16 @@ define amdgpu_kernel void @test_mfma_f32_32x32x16_f16(<8 x half> %arg0, <8 x hal
; HEURRC-NEXT: v_accvgpr_write_b32 a13, s21
; HEURRC-NEXT: v_accvgpr_write_b32 a14, s22
; HEURRC-NEXT: v_accvgpr_write_b32 a15, s23
+; HEURRC-NEXT: v_mov_b64_e32 v[6:7], 0
; HEURRC-NEXT: v_mov_b32_e32 v16, s16
-; HEURRC-NEXT: v_mov_b32_e32 v17, s17
; HEURRC-NEXT: v_mfma_f32_32x32x16_f16 a[16:31], v[8:11], v[12:15], a[0:15]
-; HEURRC-NEXT: v_mov_b32_e32 v18, s18
-; HEURRC-NEXT: v_mov_b32_e32 v19, s19
; HEURRC-NEXT: v_mov_b32_e32 v8, s20
; HEURRC-NEXT: v_mov_b32_e32 v9, s21
; HEURRC-NEXT: v_mov_b32_e32 v10, s22
; HEURRC-NEXT: v_mov_b32_e32 v11, s23
-; HEURRC-NEXT: v_mov_b64_e32 v[6:7], 0
+; HEURRC-NEXT: v_mov_b32_e32 v17, s17
+; HEURRC-NEXT: v_mov_b32_e32 v18, s18
+; HEURRC-NEXT: v_mov_b32_e32 v19, s19
; HEURRC-NEXT: s_nop 4
; HEURRC-NEXT: global_store_dwordx4 v[0:1], a[28:31], off sc0 sc1
; HEURRC-NEXT: s_waitcnt vmcnt(0)
@@ -554,12 +554,12 @@ define amdgpu_kernel void @test_mfma_f32_32x32x16_f16(<8 x half> %arg0, <8 x hal
; VGPRRC-NEXT: v_mov_b64_e32 v[10:11], s[18:19]
; VGPRRC-NEXT: v_mov_b64_e32 v[12:13], s[20:21]
; VGPRRC-NEXT: v_mov_b64_e32 v[14:15], s[22:23]
+; VGPRRC-NEXT: v_mov_b64_e32 v[38:39], 0
; VGPRRC-NEXT: v_mov_b32_e32 v48, s16
-; VGPRRC-NEXT: v_mov_b32_e32 v49, s17
; VGPRRC-NEXT: v_mfma_f32_32x32x16_f16 v[16:31], v[40:43], v[44:47], v[0:15]
+; VGPRRC-NEXT: v_mov_b32_e32 v49, s17
; VGPRRC-NEXT: v_mov_b32_e32 v50, s18
; VGPRRC-NEXT: v_mov_b32_e32 v51, s19
-; VGPRRC-NEXT: v_mov_b64_e32 v[38:39], 0
; VGPRRC-NEXT: s_nop 8
; VGPRRC-NEXT: global_store_dwordx4 v[32:33], v[28:31], off sc0 sc1
; VGPRRC-NEXT: s_waitcnt vmcnt(0)
@@ -569,12 +569,12 @@ define amdgpu_kernel void @test_mfma_f32_32x32x16_f16(<8 x half> %arg0, <8 x hal
; VGPRRC-NEXT: s_waitcnt vmcnt(0)
; VGPRRC-NEXT: global_store_dwordx4 v[38:39], v[16:19], off sc0 sc1
; VGPRRC-NEXT: s_waitcnt vmcnt(0)
+; VGPRRC-NEXT: global_store_dwordx4 v[34:35], v[48:51], off sc0 sc1
+; VGPRRC-NEXT: s_waitcnt vmcnt(0)
; VGPRRC-NEXT: v_mov_b32_e32 v0, s20
; VGPRRC-NEXT: v_mov_b32_e32 v1, s21
; VGPRRC-NEXT: v_mov_b32_e32 v2, s22
; VGPRRC-NEXT: v_mov_b32_e32 v3, s23
-; VGPRRC-NEXT: global_store_dwordx4 v[34:35], v[48:51], off sc0 sc1
-; VGPRRC-NEXT: s_waitcnt vmcnt(0)
; VGPRRC-NEXT: global_store_dwordx4 v[32:33], v[0:3], off sc0 sc1
; VGPRRC-NEXT: s_waitcnt vmcnt(0)
; VGPRRC-NEXT: s_nop 0
@@ -744,12 +744,12 @@ define amdgpu_kernel void @test_mfma_f32_32x32x16_f16__flags(<8 x half> %arg0, <
; SDAG-NEXT: v_mov_b64_e32 v[10:11], s[18:19]
; SDAG-NEXT: v_mov_b64_e32 v[12:13], s[20:21]
; SDAG-NEXT: v_mov_b64_e32 v[14:15], s[22:23]
+; SDAG-NEXT: v_mov_b64_e32 v[38:39], 0
; SDAG-NEXT: v_mov_b32_e32 v48, s16
-; SDAG-NEXT: v_mov_b32_e32 v49, s17
; SDAG-NEXT: v_mfma_f32_32x32x16_f16 v[16:31], v[40:43], v[44:47], v[0:15] cbsz:2 abid:3 blgp:1
+; SDAG-NEXT: v_mov_b32_e32 v49, s17
; SDAG-NEXT: v_mov_b32_e32 v50, s18
; SDAG-NEXT: v_mov_b32_e32 v51, s19
-; SDAG-NEXT: v_mov_b64_e32 v[38:39], 0
; SDAG-NEXT: s_nop 8
; SDAG-NEXT: global_store_dwordx4 v[32:33], v[28:31], off sc0 sc1
; SDAG-NEXT: s_waitcnt vmcnt(0)
@@ -759,12 +759,12 @@ define amdgpu_kernel void @test_mfma_f32_32x32x16_f16__flags(<8 x half> %arg0, <
; SDAG-NEXT: s_waitcnt vmcnt(0)
; SDAG-NEXT: global_store_dwordx4 v[38:39], v[16:19], off sc0 sc1
; SDAG-NEXT: s_waitcnt vmcnt(0)
+; SDAG-NEXT: global_store_dwordx4 v[34:35], v[48:51], off sc0 sc1
+; SDAG-NEXT: s_waitcnt vmcnt(0)
; SDAG-NEXT: v_mov_b32_e32 v0, s20
; SDAG-NEXT: v_mov_b32_e32 v1, s21
; SDAG-NEXT: v_mov_b32_e32 v2, s22
; SDAG-NEXT: v_mov_b32_e32 v3, s23
-; SDAG-NEXT: global_store_dwordx4 v[34:35], v[48:51], off sc0 sc1
-; SDAG-NEXT: s_waitcnt vmcnt(0)
; SDAG-NEXT: global_store_dwordx4 v[32:33], v[0:3], off sc0 sc1
; SDAG-NEXT: s_waitcnt vmcnt(0)
; SDAG-NEXT: s_nop 0
@@ -862,16 +862,16 @@ define amdgpu_kernel void @test_mfma_f32_32x32x16_f16__flags(<8 x half> %arg0, <
; HEURRC-NEXT: v_accvgpr_write_b32 a13, s21
; HEURRC-NEXT: v_accvgpr_write_b32 a14, s22
; HEURRC-NEXT: v_accvgpr_write_b32 a15, s23
+; HEURRC-NEXT: v_mov_b64_e32 v[6:7], 0
; HEURRC-NEXT: v_mov_b32_e32 v16, s16
-; HEURRC-NEXT: v_mov_b32_e32 v17, s17
; HEURRC-NEXT: v_mfma_f32_32x32x16_f16 a[16:31], v[8:11], v[12:15], a[0:15] cbsz:2 abid:3 blgp:1
-; HEURRC-NEXT: v_mov_b32_e32 v18, s18
-; HEURRC-NEXT: v_mov_b32_e32 v19, s19
; HEURRC-NEXT: v_mov_b32_e32 v8, s20
; HEURRC-NEXT: v_mov_b32_e32 v9, s21
; HEURRC-NEXT: v_mov_b32_e32 v10, s22
; HEURRC-NEXT: v_mov_b32_e32 v11, s23
-; HEURRC-NEXT: v_mov_b64_e32 v[6:7], 0
+; HEURRC-NEXT: v_mov_b32_e32 v17, s17
+; HEURRC-NEXT: v_mov_b32_e32 v18, s18
+; HEURRC-NEXT: v_mov_b32_e32 v19, s19
; HEURRC-NEXT: s_nop 4
; HEURRC-NEXT: global_store_dwordx4 v[0:1], a[28:31], off sc0 sc1
; HEURRC-NEXT: s_waitcnt vmcnt(0)
@@ -920,12 +920,12 @@ define amdgpu_kernel void @test_mfma_f32_32x32x16_f16__flags(<8 x half> %arg0, <
; VGPRRC-NEXT: v_mov_b64_e32 v[10:11], s[18:19]
; VGPRRC-NEXT: v_mov_b64_e32 v[12:13], s[20:21]
; VGPRRC-NEXT: v_mov_b64_e32 v[14:15], s[22:23]
+; VGPRRC-NEXT: v_mov_b64_e32 v[38:39], 0
; VGPRRC-NEXT: v_mov_b32_e32 v48, s16
-; VGPRRC-NEXT: v_mov_b32_e32 v49, s17
; VGPRRC-NEXT: v_mfma_f32_32x32x16_f16 v[16:31], v[40:43], v[44:47], v[0:15] cbsz:2 abid:3 blgp:1
+; VGPRRC-NEXT: v_mov_b32_e32 v49, s17
; VGPRRC-NEXT: v_mov_b32_e32 v50, s18
; VGPRRC-NEXT: v_mov_b32_e32 v51, s19
-; VGPRRC-NEXT: v_mov_b64_e32 v[38:39], 0
; VGPRRC-NEXT: s_nop 8
; VGPRRC-NEXT: global_store_dwordx4 v[32:33], v[28:31], off sc0 sc1
; VGPRRC-NEXT: s_waitcnt vmcnt(0)
@@ -935,12 +935,12 @@ define amdgpu_kernel void @test_mfma_f32_32x32x16_f16__flags(<8 x half> %arg0, <
; VGPRRC-NEXT: s_waitcnt vmcnt(0)
; VGPRRC-NEXT: global_store_dwordx4 v[38:39], v[16:19], off sc0 sc1
; VGPRRC-NEXT: s_waitcnt vmcnt(0)
+; VGPRRC-NEXT: global_store_dwordx4 v[34:35], v[48:51], off sc0 sc1
+; VGPRRC-NEXT: s_waitcnt vmcnt(0)
; VGPRRC-NEXT: v_mov_b32_e32 v0, s20
; VGPRRC-NEXT: v_mov_b32_e32 v1, s21
; VGPRRC-NEXT: v_mov_b32_e32 v2, s22
; VGPRRC-NEXT: v_mov_b32_e32 v3, s23
-; VGPRRC-NEXT: global_store_dwordx4 v[34:35], v[48:51], off sc0 sc1
-; VGPRRC-NEXT: s_waitcnt vmcnt(0)
; VGPRRC-NEXT: global_store_dwordx4 v[32:33], v[0:3], off sc0 sc1
; VGPRRC-NEXT: s_waitcnt vmcnt(0)
; VGPRRC-NEXT: s_nop 0
@@ -2858,39 +2858,36 @@ define amdgpu_kernel void @test_mfma_i32_32x32x32_i8(<4 x i32> %arg0, <4 x i32>
; SDAG-NEXT: s_load_dwordx16 s[8:23], s[4:5], 0x64
; SDAG-NEXT: v_mov_b64_e32 v[32:33], 48
; SDAG-NEXT: v_mov_b64_e32 v[34:35], 32
+; SDAG-NEXT: v_mov_b64_e32 v[36:37], 16
; SDAG-NEXT: s_waitcnt lgkmcnt(0)
-; SDAG-NEXT: v_mov_b32_e32 v36, s24
-; SDAG-NEXT: v_mov_b32_e32 v37, s25
-; SDAG-NEXT: v_mov_b32_e32 v38, s26
-; SDAG-NEXT: v_mov_b32_e32 v39, s27
-; SDAG-NEXT: v_mov_b64_e32 v[30:31], s[22:23]
-; SDAG-NEXT: v_mov_b32_e32 v40, s28
-; SDAG-NEXT: v_mov_b32_e32 v41, s29
-; SDAG-NEXT: v_mov_b32_e32 v42, s30
-; SDAG-NEXT: v_mov_b32_e32 v43, s31
-; SDAG-NEXT: v_mov_b64_e32 v[28:29], s[20:21]
-; SDAG-NEXT: v_mov_b64_e32 v[26:27], s[18:19]
-; SDAG-NEXT: v_mov_b64_e32 v[24:25], s[16:17]
-; SDAG-NEXT: v_mov_b64_e32 v[22:23], s[14:15]
-; SDAG-NEXT: v_mov_b64_e32 v[20:21], s[12:13]
-; SDAG-NEXT: v_mov_b64_e32 v[18:19], s[10:11]
-; SDAG-NEXT: v_mov_b64_e32 v[16:17], s[8:9]
-; SDAG-NEXT: s_nop 1
-; SDAG-NEXT: v_mfma_i32_32x32x32_i8 v[0:15], v[36:39], v[40:43], v[16:31]
+; SDAG-NEXT: v_mov_b32_e32 v40, s24
+; SDAG-NEXT: v_mov_b32_e32 v41, s25
+; SDAG-NEXT: v_mov_b32_e32 v42, s26
+; SDAG-NEXT: v_mov_b32_e32 v43, s27
+; SDAG-NEXT: v_mov_b64_e32 v[0:1], s[8:9]
+; SDAG-NEXT: v_mov_b32_e32 v44, s28
+; SDAG-NEXT: v_mov_b32_e32 v45, s29
+; SDAG-NEXT: v_mov_b32_e32 v46, s30
+; SDAG-NEXT: v_mov_b32_e32 v47, s31
+; SDAG-NEXT: v_mov_b64_e32 v[2:3], s[10:11]
+; SDAG-NEXT: v_mov_b64_e32 v[4:5], s[12:13]
+; SDAG-NEXT: v_mov_b64_e32 v[6:7], s[14:15]
+; SDAG-NEXT: v_mov_b64_e32 v[8:9], s[16:17]
+; SDAG-NEXT: v_mov_b64_e32 v[10:11], s[18:19]
+; SDAG-NEXT: v_mov_b64_e32 v[12:13], s[20:21]
+; SDAG-NEXT: v_mov_b64_e32 v[14:15], s[22:23]
+; SDAG-NEXT: v_mov_b64_e32 v[38:39], 0
+; SDAG-NEXT: s_nop 0
+; SDAG-NEXT: v_mfma_i32_32x32x32_i8 v[16:31], v[40:43], v[44:47], v[0:15]
; SDAG-NEXT: s_nop 11
-; SDAG-NEXT: global_store_dwordx4 v[32:33], v[12:15], off sc0 sc1
+; SDAG-NEXT: global_store_dwordx4 v[32:33], v[28:31], off sc0 sc1
; SDAG-NEXT: s_waitcnt vmcnt(0)
-; SDAG-NEXT: global_store_dwordx4 v[34:35], v[8:11], off sc0 sc1
+; SDAG-NEXT: global_store_dwordx4 v[34:35], v[24:27], off sc0 sc1
; SDAG-NEXT: s_waitcnt vmcnt(0)
-; SDAG-NEXT: s_nop 0
-; SDAG-NEXT: v_mov_b64_e32 v[8:9], 16
-; SDAG-NEXT: global_store_dwordx4 v[8:9], v[4:7], off sc0 sc1
+; SDAG-NEXT: global_store_dwordx4 v[36:37], v[20:23], off sc0 sc1
; SDAG-NEXT: s_waitcnt vmcnt(0)
-; SDAG-NEXT: s_nop 0
-; SDAG-NEXT: v_mov_b64_e32 v[4:5], 0
-; SDAG-NEXT: global_store_dwordx4 v[4:5], v[0:3], off sc0 sc1
+; SDAG-NEXT: global_store_dwordx4 v[38:39], v[16:19], off sc0 sc1
; SDAG-NEXT: s_waitcnt vmcnt(0)
-; SDAG-NEXT: s_nop 0
; SDAG-NEXT: v_mov_b32_e32 v0, s16
; SDAG-NEXT: v_mov_b32_e32 v1, s17
; SDAG-NEXT: v_mov_b32_e32 v2, s18
@@ -2909,14 +2906,14 @@ define amdgpu_kernel void @test_mfma_i32_32x32x32_i8(<4 x i32> %arg0, <4 x i32>
; SDAG-NEXT: v_mov_b32_e32 v1, s9
; SDAG-NEXT: v_mov_b32_e32 v2, s10
; SDAG-NEXT: v_mov_b32_e32 v3, s11
-; SDAG-NEXT: global_store_dwordx4 v[4:5], v[0:3], off sc0 sc1
+; SDAG-NEXT: global_store_dwordx4 v[38:39], v[0:3], off sc0 sc1
; SDAG-NEXT: s_waitcnt vmcnt(0)
; SDAG-NEXT: s_nop 0
; SDAG-NEXT: v_mov_b32_e32 v0, s12
; SDAG-NEXT: v_mov_b32_e32 v1, s13
; SDAG-NEXT: v_mov_b32_e32 v2, s14
; SDAG-NEXT: v_mov_b32_e32 v3, s15
-; SDAG-NEXT: global_store_dwordx4 v[8:9], v[0:3], off sc0 sc1
+; SDAG-NEXT: global_store_dwordx4 v[36:37], v[0:3], off sc0 sc1
; SDAG-NEXT: s_waitcnt vmcnt(0)
; SDAG-NEXT: s_endpgm
;
@@ -2977,47 +2974,47 @@ define amdgpu_kernel void @test_mfma_i32_32x32x32_i8(<4 x i32> %arg0, <4 x i32>
; HEURRC-NEXT: s_load_dwordx16 s[8:23], s[4:5], 0x64
; HEURRC-NEXT: v_mov_b64_e32 v[0:1], 48
; HEURRC-NEXT: v_mov_b64_e32 v[2:3], 32
-; HEURRC-NEXT: s_waitcnt lgkmcnt(0)
-; HEURRC-NEXT: v_mov_b32_e32 v4, s24
-; HEURRC-NEXT: v_mov_b32_e32 v5, s25
-; HEURRC-NEXT: v_mov_b32_e32 v6, s26
-; HEURRC-NEXT: v_mov_b32_e32 v7, s27
-; HEURRC-NEXT: v_accvgpr_write_b32 a31, s23
-; HEURRC-NEXT: v_mov_b32_e32 v8, s28
-; HEURRC-NEXT: v_mov_b32_e32 v9, s29
-; HEURRC-NEXT: v_mov_b32_e32 v10, s30
-; HEURRC-NEXT: v_mov_b32_e32 v11, s31
-; HEURRC-NEXT: v_accvgpr_write_b32 a30, s22
-; HEURRC-NEXT: v_accvgpr_write_b32 a29, s21
-; HEURRC-NEXT: v_accvgpr_write_b32 a28, s20
-; HEURRC-NEXT: v_accvgpr_write_b32 a27, s19
-; HEURRC-NEXT: v_accvgpr_write_b32 a26, s18
-; HEURRC-NEXT: v_accvgpr_write_b32 a25, s17
-; HEURRC-NEXT: v_accvgpr_write_b32 a24, s16
-; HEURRC-NEXT: v_accvgpr_write_b32 a23, s15
-; HEURRC-NEXT: v_accvgpr_write_b32 a22, s14
-; HEURRC-NEXT: v_accvgpr_write_b32 a21, s13
-; HEURRC-NEXT: v_accvgpr_write_b32 a20, s12
-; HEURRC-NEXT: v_accvgpr_write_b32 a19, s11
-; HEURRC-NEXT: v_accvgpr_write_b32 a18, s10
-; HEURRC-NEXT: v_accvgpr_write_b32 a17, s9
-; HEURRC-NEXT: v_accvgpr_write_b32 a16, s8
-; HEURRC-NEXT: s_nop 1
-; HEURRC-NEXT: v_mfma_i32_32x32x32_i8 a[0:15], v[4:7], v[8:11], a[16:31]
; HEURRC-NEXT: v_mov_b64_e32 v[4:5], 16
+; HEURRC-NEXT: s_waitcnt lgkmcnt(0)
+; HEURRC-NEXT: v_mov_b32_e32 v8, s24
+; HEURRC-NEXT: v_mov_b32_e32 v9, s25
+; HEURRC-NEXT: v_mov_b32_e32 v10, s26
+; HEURRC-NEXT: v_mov_b32_e32 v11, s27
+; HEURRC-NEXT: v_accvgpr_write_b32 a0, s8
+; HEURRC-NEXT: v_mov_b32_e32 v12, s28
+; HEURRC-NEXT: v_mov_b32_e32 v13, s29
+; HEURRC-NEXT: v_mov_b32_e32 v14, s30
+; HEURRC-NEXT: v_mov_b32_e32 v15, s31
+; HEURRC-NEXT: v_accvgpr_write_b32 a1, s9
+; HEURRC-NEXT: v_accvgpr_write_b32 a2, s10
+; HEURRC-NEXT: v_accvgpr_write_b32 a3, s11
+; HEURRC-NEXT: v_accvgpr_write_b32 a4, s12
+; HEURRC-NEXT: v_accvgpr_write_b32 a5, s13
+; HEURRC-NEXT: v_accvgpr_write_b32 a6, s14
+; HEURRC-NEXT: v_accvgpr_write_b32 a7, s15
+; HEURRC-NEXT: v_accvgpr_write_b32 a8, s16
+; HEURRC-NEXT: v_accvgpr_write_b32 a9, s17
+; HEURRC-NEXT: v_accvgpr_write_b32 a10, s18
+; HEURRC-NEXT: v_accvgpr_write_b32 a11, s19
+; HEURRC-NEXT: v_accvgpr_write_b32 a12, s20
+; HEURRC-NEXT: v_accvgpr_write_b32 a13, s21
+; HEURRC-NEXT: v_accvgpr_write_b32 a14, s22
+; HEURRC-NEXT: v_accvgpr_write_b32 a15, s23
; HEURRC-NEXT: v_mov_b64_e32 v[6:7], 0
+; HEURRC-NEXT: s_nop 0
+; HEURRC-NEXT: v_mfma_i32_32x32x32_i8 a[16:31], v[8:11], v[12:15], a[0:15]
; HEURRC-NEXT: v_mov_b32_e32 v8, s16
; HEURRC-NEXT: v_mov_b32_e32 v9, s17
; HEURRC-NEXT: v_mov_b32_e32 v10, s18
; HEURRC-NEXT: v_mov_b32_e32 v11, s19
-; HEURRC-NEXT: s_nop 5
-; HEURRC-NEXT: global_store_dwordx4 v[0:1], a[12:15], off sc0 sc1
+; HEURRC-NEXT: s_nop 7
+; HEURRC-NEXT: global_store_dwordx4 v[0:1], a[28:31], off sc0 sc1
; HEURRC-NEXT: s_waitcnt vmcnt(0)
-; HEURRC-NEXT: global_store_dwordx4 v[2:3], a[8:11], off sc0 sc1
+; HEURRC-NEXT: global_store_dwordx4 v[2:3], a[24:27], off sc0 sc1
; HEURRC-NEXT: s_waitcnt vmcnt(0)
-; HEURRC-NEXT: global_store_dwordx4 v[4:5], a[4:7], off sc0 sc1
+; HEURRC-NEXT: global_store_dwordx4 v[4:5], a[20:23], off sc0 sc1
; HEURRC-NEXT: s_waitcnt vmcnt(0)
-; HEURRC-NEXT: global_store_dwordx4 v[6:7], a[0:3], off sc0 sc1
+; HEURRC-NEXT: global_store_dwordx4 v[6:7], a[16:19], off sc0 sc1
; HEURRC-NEXT: s_waitcnt vmcnt(0)
; HEURRC-NEXT: global_store_dwordx4 v[2:3], v[8:11], off sc0 sc1
; HEURRC-NEXT: s_waitcnt vmcnt(0)
@@ -3048,39 +3045,36 @@ define amdgpu_kernel void @test_mfma_i32_32x32x32_i8(<4 x i32> %arg0, <4 x i32>
; VGPRRC-NEXT: s_load_dwordx16 s[8:23], s[4:5], 0x64
; VGPRRC-NEXT: v_mov_b64_e32 v[32:33], 48
; VGPRRC-NEXT: v_mov_b64_e32 v[34:35], 32
+; VGPRRC-NEXT: v_mov_b64_e32 v[36:37], 16
; VGPRRC-NEXT: s_waitcnt lgkmcnt(0)
-; VGPRRC-NEXT: v_mov_b32_e32 v36, s24
-; VGPRRC-NEXT: v_mov_b32_e32 v37, s25
-; VGPRRC-NEXT: v_mov_b32_e32 v38, s26
-; VGPRRC-NEXT: v_mov_b32_e32 v39, s27
-; VGPRRC-NEXT: v_mov_b64_e32 v[30:31], s[22:23]
-; VGPRRC-NEXT: v_mov_b32_e32 v40, s28
-; VGPRRC-NEXT: v_mov_b32_e32 v41, s29
-; VGPRRC-NEXT: v_mov_b32_e32 v42, s30
-; VGPRRC-NEXT: v_mov_b32_e32 v43, s31
-; VGPRRC-NEXT: v_mov_b64_e32 v[28:29], s[20:21]
-; VGPRRC-NEXT: v_mov_b64_e32 v[26:27], s[18:19]
-; VGPRRC-NEXT: v_mov_b64_e32 v[24:25], s[16:17]
-; VGPRRC-NEXT: v_mov_b64_e32 v[22:23], s[14:15]
-; VGPRRC-NEXT: v_mov_b64_e32 v[20:21], s[12:13]
-; VGPRRC-NEXT: v_mov_b64_e32 v[18:19], s[10:11]
-; VGPRRC-NEXT: v_mov_b64_e32 v[16:17], s[8:9]
-; VGPRRC-NEXT: s_nop 1
-; VGPRRC-NEXT: v_mfma_i32_32x32x32_i8 v[0:15], v[36:39], v[40:43], v[16:31]
+; VGPRRC-NEXT: v_mov_b32_e32 v40, s24
+; VGPRRC-NEXT: v_mov_b32_e32 v41, s25
+; VGPRRC-NEXT: v_mov_b32_e32 v42, s26
+; VGPRRC-NEXT: v_mov_b32_e32 v43, s27
+; VGPRRC-NEXT: v_mov_b64_e32 v[0:1], s[8:9]
+; VGPRRC-NEXT: v_mov_b32_e32 v44, s28
+; VGPRRC-NEXT: v_mov_b32_e32 v45, s29
+; VGPRRC-NEXT: v_mov_b32_e32 v46, s30
+; VGPRRC-NEXT: v_mov_b32_e32 v47, s31
+; VGPRRC-NEXT: v_mov_b64_e32 v[2:3], s[10:11]
+; VGPRRC-NEXT: v_mov_b64_e32 v[4:5], s[12:13]
+; VGPRRC-NEXT: v_mov_b64_e32 v[6:7], s[14:15]
+; VGPRRC-NEXT: v_mov_b64_e32 v[8:9], s[16:17]
+; VGPRRC-NEXT: v_mov_b64_e32 v[10:11], s[18:19]
+; VGPRRC-NEXT: v_mov_b64_e32 v[12:13], s[20:21]
+; VGPRRC-NEXT: v_mov_b64_e32 v[14:15], s[22:23]
+; VGPRRC-NEXT: v_mov_b64_e32 v[38:39], 0
+; VGPRRC-NEXT: s_nop 0
+; VGPRRC-NEXT: v_mfma_i32_32x32x32_i8 v[16:31], v[40:43], v[44:47], v[0:15]
; VGPRRC-NEXT: s_nop 11
-; VGPRRC-NEXT: global_store_dwordx4 v[32:33], v[12:15], off sc0 sc1
+; VGPRRC-NEXT: global_store_dwordx4 v[32:33], v[28:31], off sc0 sc1
; VGPRRC-NEXT: s_waitcnt vmcnt(0)
-; VGPRRC-NEXT: global_store_dwordx4 v[34:35], v[8:11], off sc0 sc1
+; VGPRRC-NEXT: global_store_dwordx4 v[34:35], v[24:27], off sc0 sc1
; VGPRRC-NEXT: s_waitcnt vmcnt(0)
-; VGPRRC-NEXT: s_nop 0
-; VGPRRC-NEXT: v_mov_b64_e32 v[8:9], 16
-; VGPRRC-NEXT: global_store_dwordx4 v[8:9], v[4:7], off sc0 sc1
+; VGPRRC-NEXT: global_store_dwordx4 v[36:37], v[20:23], off sc0 sc1
; VGPRRC-NEXT: s_waitcnt vmcnt(0)
-; VGPRRC-NEXT: s_nop 0
-; VGPRRC-NEXT: v_mov_b64_e32 v[4:5], 0
-; VGPRRC-NEXT: global_store_dwordx4 v[4:5], v[0:3], off sc0 sc1
+; VGPRRC-NEXT: global_store_dwordx4 v[38:39], v[16:19], off sc0 sc1
; VGPRRC-NEXT: s_waitcnt vmcnt(0)
-; VGPRRC-NEXT: s_nop 0
; VGPRRC-NEXT: v_mov_b32_e32 v0, s16
; VGPRRC-NEXT: v_mov_b32_e32 v1, s17
; VGPRRC-NEXT: v_mov_b32_e32 v2, s18
@@ -3099,14 +3093,14 @@ define amdgpu_kernel void @test_mfma_i32_32x32x32_i8(<4 x i32> %arg0, <4 x i32>
; VGPRRC-NEXT: v_mov_b32_e32 v1, s9
; VGPRRC-NEXT: v_mov_b32_e32 v2, s10
; VGPRRC-NEXT: v_mov_b32_e32 v3, s11
-; VGPRRC-NEXT: global_store_dwordx4 v[4:5], v[0:3], off sc0 sc1
+; VGPRRC-NEXT: global_store_dwordx4 v[38:39], v[0:3], off sc0 sc1
; VGPRRC-NEXT: s_waitcnt vmcnt(0)
; VGPRRC-NEXT: s_nop 0
; VGPRRC-NEXT: v_mov_b32_e32 v0, s12
; VGPRRC-NEXT: v_mov_b32_e32 v1, s13
; VGPRRC-NEXT: v_mov_b32_e32 v2, s14
; VGPRRC-NEXT: v_mov_b32_e32 v3, s15
-; VGPRRC-NEXT: global_store_dwordx4 v[8:9], v[0:3], off sc0 sc1
+; VGPRRC-NEXT: global_store_dwordx4 v[36:37], v[0:3], off sc0 sc1
; VGPRRC-NEXT: s_waitcnt vmcnt(0)
; VGPRRC-NEXT: s_endpgm
; AGPR-LABEL: test_mfma_i32_32x32x32_i8:
@@ -3259,39 +3253,36 @@ define amdgpu_kernel void @test_mfma_i32_32x32x32_i8__flags(<4 x i32> %arg0, <4
; SDAG-NEXT: s_load_dwordx16 s[8:23], s[4:5], 0x64
; SDAG-NEXT: v_mov_b64_e32 v[32:33], 48
; SDAG-NEXT: v_mov_b64_e32 v[34:35], 32
+; SDAG-NEXT: v_mov_b64_e32 v[36:37], 16
; SDAG-NEXT: s_waitcnt lgkmcnt(0)
-; SDAG-NEXT: v_mov_b32_e32 v36, s24
-; SDAG-NEXT: v_mov_b32_e32 v37, s25
-; SDAG-NEXT: v_mov_b32_e32 v38, s26
-; SDAG-NEXT: v_mov_b32_e32 v39, s27
-; SDAG-NEXT: v_mov_b64_e32 v[30:31], s[22:23]
-; SDAG-NEXT: v_mov_b32_e32 v40, s28
-; SDAG-NEXT: v_mov_b32_e32 v41, s29
-; SDAG-NEXT: v_mov_b32_e32 v42, s30
-; SDAG-NEXT: v_mov_b32_e32 v43, s31
-; SDAG-NEXT: v_mov_b64_e32 v[28:29], s[20:21]
-; SDAG-NEXT: v_mov_b64_e32 v[26:27], s[18:19]
-; SDAG-NEXT: v_mov_b64_e32 v[24:25], s[16:17]
-; SDAG-NEXT: v_mov_b64_e32 v[22:23], s[14:15]
-; SDAG-NEXT: v_mov_b64_e32 v[20:21], s[12:13]
-; SDAG-NEXT: v_mov_b64_e32 v[18:19], s[10:11]
-; SDAG-NEXT: v_mov_b64_e32 v[16:17], s[8:9]
-; SDAG-NEXT: s_nop 1
-; SDAG-NEXT: v_mfma_i32_32x32x32_i8 v[0:15], v[36:39], v[40:43], v[16:31] cbsz:2 abid:3 blgp:1
+; SDAG-NEXT: v_mov_b32_e32 v40, s24
+; SDAG-NEXT: v_mov_b32_e32 v41, s25
+; SDAG-NEXT: v_mov_b32_e32 v42, s26
+; SDAG-NEXT: v_mov_b32_e32 v43, s27
+; SDAG-NEXT: v_mov_b64_e32 v[0:1], s[8:9]
+; SDAG-NEXT: v_mov_b32_e32 v44, s28
+; SDAG-NEXT: v_mov_b32_e32 v45, s29
+; SDAG-NEXT: v_mov_b32_e32 v46, s30
+; SDAG-NEXT: v_mov_b32_e32 v47, s31
+; SDAG-NEXT: v_mov_b64_e32 v[2:3], s[10:11]
+; SDAG-NEXT: v_mov_b64_e32 v[4:5], s[12:13]
+; SDAG-NEXT: v_mov_b64_e32 v[6:7], s[14:15]
+; SDAG-NEXT: v_mov_b64_e32 v[8:9], s[16:17]
+; SDAG-NEXT: v_mov_b64_e32 v[10:11], s[18:19]
+; SDAG-NEXT: v_mov_b64_e32 v[12:13], s[20:21]
+; SDAG-NEXT: v_mov_b64_e32 v[14:15], s[22:23]
+; SDAG-NEXT: v_mov_b64_e32 v[38:39], 0
+; SDAG-NEXT: s_nop 0
+; SDAG-NEXT: v_mfma_i32_32x32x32_i8 v[16:31], v[40:43], v[44:47], v[0:15] cbsz:2 abid:3 blgp:1
; SDAG-NEXT: s_nop 11
-; SDAG-NEXT: global_store_dwordx4 v[32:33], v[12:15], off sc0 sc1
+; SDAG-NEXT: global_store_dwordx4 v[32:33], v[28:31], off sc0 sc1
; SDAG-NEXT: s_waitcnt vmcnt(0)
-; SDAG-NEXT: global_store_dwordx4 v[34:35], v[8:11], off sc0 sc1
+; SDAG-NEXT: global_store_dwordx4 v[34:35], v[24:27], off sc0 sc1
; SDAG-NEXT: s_waitcnt vmcnt(0)
-; SDAG-NEXT: s_nop 0
-; SDAG-NEXT: v_mov_b64_e32 v[8:9], 16
-; SDAG-NEXT: global_store_dwordx4 v[8:9], v[4:7], off sc0 sc1
+; SDAG-NEXT: global_store_dwordx4 v[36:37], v[20:23], off sc0 sc1
; SDAG-NEXT: s_waitcnt vmcnt(0)
-; SDAG-NEXT: s_nop 0
-; SDAG-NEXT: v_mov_b64_e32 v[4:5], 0
-; SDAG-NEXT: global_store_dwordx4 v[4:5], v[0:3], off sc0 sc1
+; SDAG-NEXT: global_store_dwordx4 v[38:39], v[16:19], off sc0 sc1
; SDAG-NEXT: s_waitcnt vmcnt(0)
-; SDAG-NEXT: s_nop 0
; SDAG-NEXT: v_mov_b32_e32 v0, s16
; SDAG-NEXT: v_mov_b32_e32 v1, s17
; SDAG-NEXT: v_mov_b32_e32 v2, s18
@@ -3310,14 +3301,14 @@ define amdgpu_kernel void @test_mfma_i32_32x32x32_i8__flags(<4 x i32> %arg0, <4
; SDAG-NEXT: v_mov_b32_e32 v1, s9
; SDAG-NEXT: v_mov_b32_e32 v2, s10
; SDAG-NEXT: v_mov_b32_e32 v3, s11
-; SDAG-NEXT: global_store_dwordx4 v[4:5], v[0:3], off sc0 sc1
+; SDAG-NEXT: global_store_dwordx4 v[38:39], v[0:3], off sc0 sc1
; SDAG-NEXT: s_waitcnt vmcnt(0)
; SDAG-NEXT: s_nop 0
; SDAG-NEXT: v_mov_b32_e32 v0, s12
; SDAG-NEXT: v_mov_b32_e32 v1, s13
; SDAG-NEXT: v_mov_b32_e32 v2, s14
; SDAG-NEXT: v_mov_b32_e32 v3, s15
-; SDAG-NEXT: global_store_dwordx4 v[8:9], v[0:3], off sc0 sc1
+; SDAG-NEXT: global_store_dwordx4 v[36:37], v[0:3], off sc0 sc1
; SDAG-NEXT: s_waitcnt vmcnt(0)
; SDAG-NEXT: s_endpgm
;
@@ -3378,47 +3369,47 @@ define amdgpu_kernel void @test_mfma_i32_32x32x32_i8__flags(<4 x i32> %arg0, <4
; HEURRC-NEXT: s_load_dwordx16 s[8:23], s[4:5], 0x64
; HEURRC-NEXT: v_mov_b64_e32 v[0:1], 48
; HEURRC-NEXT: v_mov_b64_e32 v[2:3], 32
-; HEURRC-NEXT: s_waitcnt lgkmcnt(0)
-; HEURRC-NEXT: v_mov_b32_e32 v4, s24
-; HEURRC-NEXT: v_mov_b32_e32 v5, s25
-; HEURRC-NEXT: v_mov_b32_e32 v6, s26
-; HEURRC-NEXT: v_mov_b32_e32 v7, s27
-; HEURRC-NEXT: v_accvgpr_write_b32 a31, s23
-; HEURRC-NEXT: v_mov_b32_e32 v8, s28
-; HEURRC-NEXT: v_mov_b32_e32 v9, s29
-; HEURRC-NEXT: v_mov_b32_e32 v10, s30
-; HEURRC-NEXT: v_mov_b32_e32 v11, s31
-; HEURRC-NEXT: v_accvgpr_write_b32 a30, s22
-; HEURRC-NEXT: v_accvgpr_write_b32 a29, s21
-; HEURRC-NEXT: v_accvgpr_write_b32 a28, s20
-; HEURRC-NEXT: v_accvgpr_write_b32 a27, s19
-; HEURRC-NEXT: v_accvgpr_write_b32 a26, s18
-; HEURRC-NEXT: v_accvgpr_write_b32 a25, s17
-; HEURRC-NEXT: v_accvgpr_write_b32 a24, s16
-; HEURRC-NEXT: v_accvgpr_write_b32 a23, s15
-; HEURRC-NEXT: v_accvgpr_write_b32 a22, s14
-; HEURRC-NEXT: v_accvgpr_write_b32 a21, s13
-; HEURRC-NEXT: v_accvgpr_write_b32 a20, s12
-; HEURRC-NEXT: v_accvgpr_write_b32 a19, s11
-; HEURRC-NEXT: v_accvgpr_write_b32 a18, s10
-; HEURRC-NEXT: v_accvgpr_write_b32 a17, s9
-; HEURRC-NEXT: v_accvgpr_write_b32 a16, s8
-; HEURRC-NEXT: s_nop 1
-; HEURRC-NEXT: v_mfma_i32_32x32x32_i8 a[0:15], v[4:7], v[8:11], a[16:31] cbsz:2 abid:3 blgp:1
; HEURRC-NEXT: v_mov_b64_e32 v[4:5], 16
+; HEURRC-NEXT: s_waitcnt lgkmcnt(0)
+; HEURRC-NEXT: v_mov_b32_e32 v8, s24
+; HEURRC-NEXT: v_mov_b32_e32 v9, s25
+; HEURRC-NEXT: v_mov_b32_e32 v10, s26
+; HEURRC-NEXT: v_mov_b32_e32 v11, s27
+; HEURRC-NEXT: v_accvgpr_write_b32 a0, s8
+; HEURRC-NEXT: v_mov_b32_e32 v12, s28
+; HEURRC-NEXT: v_mov_b32_e32 v13, s29
+; HEURRC-NEXT: v_mov_b32_e32 v14, s30
+; HEURRC-NEXT: v_mov_b32_e32 v15, s31
+; HEURRC-NEXT: v_accvgpr_write_b32 a1, s9
+; HEURRC-NEXT: v_accvgpr_write_b32 a2, s10
+; HEURRC-NEXT: v_accvgpr_write_b32 a3, s11
+; HEURRC-NEXT: v_accvgpr_write_b32 a4, s12
+; HEURRC-NEXT: v_accvgpr_write_b32 a5, s13
+; HEURRC-NEXT: v_accvgpr_write_b32 a6, s14
+; HEURRC-NEXT: v_accvgpr_write_b32 a7, s15
+; HEURRC-NEXT: v_accvgpr_write_b32 a8, s16
+; HEURRC-NEXT: v_accvgpr_write_b32 a9, s17
+; HEURRC-NEXT: v_accvgpr_write_b32 a10, s18
+; HEURRC-NEXT: v_accvgpr_write_b32 a11, s19
+; HEURRC-NEXT: v_accvgpr_write_b32 a12, s20
+; HEURRC-NEXT: v_accvgpr_write_b32 a13, s21
+; HEURRC-NEXT: v_accvgpr_write_b32 a14, s22
+; HEURRC-NEXT: v_accvgpr_write_b32 a15, s23
; HEURRC-NEXT: v_mov_b64_e32 v[6:7], 0
+; HEURRC-NEXT: s_nop 0
+; HEURRC-NEXT: v_mfma_i32_32x32x32_i8 a[16:31], v[8:11], v[12:15], a[0:15] cbsz:2 abid:3 blgp:1
; HEURRC-NEXT: v_mov_b32_e32 v8, s16
; HEURRC-NEXT: v_mov_b32_e32 v9, s17
; HEURRC-NEXT: v_mov_b32_e32 v10, s18
; HEURRC-NEXT: v_mov_b32_e32 v11, s19
-; HEURRC-NEXT: s_nop 5
-; HEURRC-NEXT: global_store_dwordx4 v[0:1], a[12:15], off sc0 sc1
+; HEURRC-NEXT: s_nop 7
+; HEURRC-NEXT: global_store_dwordx4 v[0:1], a[28:31], off sc0 sc1
; HEURRC-NEXT: s_waitcnt vmcnt(0)
-; HEURRC-NEXT: global_store_dwordx4 v[2:3], a[8:11], off sc0 sc1
+; HEURRC-NEXT: global_store_dwordx4 v[2:3], a[24:27], off sc0 sc1
; HEURRC-NEXT: s_waitcnt vmcnt(0)
-; HEURRC-NEXT: global_store_dwordx4 v[4:5], a[4:7], off sc0 sc1
+; HEURRC-NEXT: global_store_dwordx4 v[4:5], a[20:23], off sc0 sc1
; HEURRC-NEXT: s_waitcnt vmcnt(0)
-; HEURRC-NEXT: global_store_dwordx4 v[6:7], a[0:3], off sc0 sc1
+; HEURRC-NEXT: global_store_dwordx4 v[6:7], a[16:19], off sc0 sc1
; HEURRC-NEXT: s_waitcnt vmcnt(0)
; HEURRC-NEXT: global_store_dwordx4 v[2:3], v[8:11], off sc0 sc1
; HEURRC-NEXT: s_waitcnt vmcnt(0)
@@ -3449,39 +3440,36 @@ define amdgpu_kernel void @test_mfma_i32_32x32x32_i8__flags(<4 x i32> %arg0, <4
; VGPRRC-NEXT: s_load_dwordx16 s[8:23], s[4:5], 0x64
; VGPRRC-NEXT: v_mov_b64_e32 v[32:33], 48
; VGPRRC-NEXT: v_mov_b64_e32 v[34:35], 32
+; VGPRRC-NEXT: v_mov_b64_e32 v[36:37], 16
; VGPRRC-NEXT: s_waitcnt lgkmcnt(0)
-; VGPRRC-NEXT: v_mov_b32_e32 v36, s24
-; VGPRRC-NEXT: v_mov_b32_e32 v37, s25
-; VGPRRC-NEXT: v_mov_b32_e32 v38, s26
-; VGPRRC-NEXT: v_mov_b32_e32 v39, s27
-; VGPRRC-NEXT: v_mov_b64_e32 v[30:31], s[22:23]
-; VGPRRC-NEXT: v_mov_b32_e32 v40, s28
-; VGPRRC-NEXT: v_mov_b32_e32 v41, s29
-; VGPRRC-NEXT: v_mov_b32_e32 v42, s30
-; VGPRRC-NEXT: v_mov_b32_e32 v43, s31
-; VGPRRC-NEXT: v_mov_b64_e32 v[28:29], s[20:21]
-; VGPRRC-NEXT: v_mov_b64_e32 v[26:27], s[18:19]
-; VGPRRC-NEXT: v_mov_b64_e32 v[24:25], s[16:17]
-; VGPRRC-NEXT: v_mov_b64_e32 v[22:23], s[14:15]
-; VGPRRC-NEXT: v_mov_b64_e32 v[20:21], s[12:13]
-; VGPRRC-NEXT: v_mov_b64_e32 v[18:19], s[10:11]
-; VGPRRC-NEXT: v_mov_b64_e32 v[16:17], s[8:9]
-; VGPRRC-NEXT: s_nop 1
-; VGPRRC-NEXT: v_mfma_i32_32x32x32_i8 v[0:15], v[36:39], v[40:43], v[16:31] cbsz:2 abid:3 blgp:1
+; VGPRRC-NEXT: v_mov_b32_e32 v40, s24
+; VGPRRC-NEXT: v_mov_b32_e32 v41, s25
+; VGPRRC-NEXT: v_mov_b32_e32 v42, s26
+; VGPRRC-NEXT: v_mov_b32_e32 v43, s27
+; VGPRRC-NEXT: v_mov_b64_e32 v[0:1], s[8:9]
+; VGPRRC-NEXT: v_mov_b32_e32 v44, s28
+; VGPRRC-NEXT: v_mov_b32_e32 v45, s29
+; VGPRRC-NEXT: v_mov_b32_e32 v46, s30
+; VGPRRC-NEXT: v_mov_b32_e32 v47, s31
+; VGPRRC-NEXT: v_mov_b64_e32 v[2:3], s[10:11]
+; VGPRRC-NEXT: v_mov_b64_e32 v[4:5], s[12:13]
+; VGPRRC-NEXT: v_mov_b64_e32 v[6:7], s[14:15]
+; VGPRRC-NEXT: v_mov_b64_e32 v[8:9], s[16:17]
+; VGPRRC-NEXT: v_mov_b64_e32 v[10:11], s[18:19]
+; VGPRRC-NEXT: v_mov_b64_e32 v[12:13], s[20:21]
+; VGPRRC-NEXT: v_mov_b64_e32 v[14:15], s[22:23]
+; VGPRRC-NEXT: v_mov_b64_e32 v[38:39], 0
+; VGPRRC-NEXT: s_nop 0
+; VGPRRC-NEXT: v_mfma_i32_32x32x32_i8 v[16:31], v[40:43], v[44:47], v[0:15] cbsz:2 abid:3 blgp:1
; VGPRRC-NEXT: s_nop 11
-; VGPRRC-NEXT: global_store_dwordx4 v[32:33], v[12:15], off sc0 sc1
+; VGPRRC-NEXT: global_store_dwordx4 v[32:33], v[28:31], off sc0 sc1
; VGPRRC-NEXT: s_waitcnt vmcnt(0)
-; VGPRRC-NEXT: global_store_dwordx4 v[34:35], v[8:11], off sc0 sc1
+; VGPRRC-NEXT: global_store_dwordx4 v[34:35], v[24:27], off sc0 sc1
; VGPRRC-NEXT: s_waitcnt vmcnt(0)
-; VGPRRC-NEXT: s_nop 0
-; VGPRRC-NEXT: v_mov_b64_e32 v[8:9], 16
-; VGPRRC-NEXT: global_store_dwordx4 v[8:9], v[4:7], off sc0 sc1
+; VGPRRC-NEXT: global_store_dwordx4 v[36:37], v[20:23], off sc0 sc1
; VGPRRC-NEXT: s_waitcnt vmcnt(0)
-; VGPRRC-NEXT: s_nop 0
-; VGPRRC-NEXT: v_mov_b64_e32 v[4:5], 0
-; VGPRRC-NEXT: global_store_dwordx4 v[4:5], v[0:3], off sc0 sc1
+; VGPRRC-NEXT: global_store_dwordx4 v[38:39], v[16:19], off sc0 sc1
; VGPRRC-NEXT: s_waitcnt vmcnt(0)
-; VGPRRC-NEXT: s_nop 0
; VGPRRC-NEXT: v_mov_b32_e32 v0, s16
; VGPRRC-NEXT: v_mov_b32_e32 v1, s17
; VGPRRC-NEXT: v_mov_b32_e32 v2, s18
@@ -3500,14 +3488,14 @@ define amdgpu_kernel void @test_mfma_i32_32x32x32_i8__flags(<4 x i32> %arg0, <4
; VGPRRC-NEXT: v_mov_b32_e32 v1, s9
; VGPRRC-NEXT: v_mov_b32_e32 v2, s10
; VGPRRC-NEXT: v_mov_b32_e32 v3, s11
-; VGPRRC-NEXT: global_store_dwordx4 v[4:5], v[0:3], off sc0 sc1
+; VGPRRC-NEXT: global_store_dwordx4 v[38:39], v[0:3], off sc0 sc1
; VGPRRC-NEXT: s_waitcnt vmcnt(0)
; VGPRRC-NEXT: s_nop 0
; VGPRRC-NEXT: v_mov_b32_e32 v0, s12
; VGPRRC-NEXT: v_mov_b32_e32 v1, s13
; VGPRRC-NEXT: v_mov_b32_e32 v2, s14
; VGPRRC-NEXT: v_mov_b32_e32 v3, s15
-; VGPRRC-NEXT: global_store_dwordx4 v[8:9], v[0:3], off sc0 sc1
+; VGPRRC-NEXT: global_store_dwordx4 v[36:37], v[0:3], off sc0 sc1
; VGPRRC-NEXT: s_waitcnt vmcnt(0)
; VGPRRC-NEXT: s_endpgm
; AGPR-LABEL: test_mfma_i32_32x32x32_i8__flags:
diff --git a/llvm/test/CodeGen/AMDGPU/rewrite-vgpr-mfma-to-agpr.ll b/llvm/test/CodeGen/AMDGPU/rewrite-vgpr-mfma-to-agpr.ll
index 5aa2cc713a4ec..1144a3d310d02 100644
--- a/llvm/test/CodeGen/AMDGPU/rewrite-vgpr-mfma-to-agpr.ll
+++ b/llvm/test/CodeGen/AMDGPU/rewrite-vgpr-mfma-to-agpr.ll
@@ -377,7 +377,7 @@ define amdgpu_kernel void @illegal_mfma_after_rewrite() #1 {
; CHECK: ; %bb.0: ; %entry
; CHECK-NEXT: s_mov_b32 s4, 0
; CHECK-NEXT: s_mov_b32 s5, s4
-; CHECK-NEXT: v_mov_b64_e32 v[26:27], s[4:5]
+; CHECK-NEXT: v_mov_b64_e32 v[22:23], s[4:5]
; CHECK-NEXT: ;;#ASMSTART
; CHECK-NEXT: ; def s[0:3]
; CHECK-NEXT: ;;#ASMEND
@@ -389,61 +389,60 @@ define amdgpu_kernel void @illegal_mfma_after_rewrite() #1 {
; CHECK-NEXT: v_mov_b64_e32 v[2:3], s[2:3]
; CHECK-NEXT: s_mov_b32 s0, 0x3c003c00
; CHECK-NEXT: s_mov_b32 s1, s0
-; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[4:7], v[26:27], v[26:27], v[0:3]
-; CHECK-NEXT: v_mov_b64_e32 v[28:29], s[0:1]
+; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[4:7], v[22:23], v[22:23], v[0:3]
+; CHECK-NEXT: v_mov_b64_e32 v[24:25], s[0:1]
; CHECK-NEXT: s_mov_b32 s0, 0x7e007e00
; CHECK-NEXT: s_mov_b32 s1, s0
-; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[4:7], v[26:27], v[26:27], v[4:7]
-; CHECK-NEXT: v_mov_b64_e32 v[30:31], s[0:1]
-; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[6:9], v[26:27], v[28:29], v[0:3]
-; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[6:9], v[26:27], v[26:27], v[6:9]
+; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[4:7], v[22:23], v[22:23], v[4:7]
+; CHECK-NEXT: v_mov_b64_e32 v[26:27], s[0:1]
+; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[6:9], v[22:23], v[24:25], v[0:3]
+; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[6:9], v[22:23], v[22:23], v[6:9]
; CHECK-NEXT: s_nop 3
-; CHECK-NEXT: v_cvt_f16_f32_e32 v24, v4
-; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[12:15], v[26:27], v[30:31], v[0:3]
+; CHECK-NEXT: v_cvt_f16_f32_e32 v20, v4
+; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[12:15], v[22:23], v[26:27], v[0:3]
; CHECK-NEXT: s_nop 0
; CHECK-NEXT: v_mov_b32_e32 v8, 0x7fc00000
; CHECK-NEXT: v_mov_b32_e32 v9, v8
; CHECK-NEXT: v_mov_b32_e32 v10, v8
; CHECK-NEXT: v_mov_b32_e32 v11, v8
-; CHECK-NEXT: v_cvt_f16_f32_e32 v2, v6
+; CHECK-NEXT: v_cvt_f16_f32_e32 v6, v6
; CHECK-NEXT: v_mov_b64_e32 v[0:1], 0
-; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[8:11], v[26:27], v[26:27], v[8:11]
-; CHECK-NEXT: global_store_short v[0:1], v2, off
+; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[8:11], v[22:23], v[22:23], v[8:11]
+; CHECK-NEXT: global_store_short v[0:1], v6, off
; CHECK-NEXT: buffer_wbl2 sc0 sc1
; CHECK-NEXT: s_waitcnt vmcnt(0)
; CHECK-NEXT: buffer_inv sc0 sc1
-; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[2:5], v[26:27], v[28:29], v[16:19]
-; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[6:9], v[26:27], v[26:27], v[8:11]
-; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[20:23], v[26:27], v[26:27], v[16:19]
-; CHECK-NEXT: s_nop 5
+; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[6:9], v[22:23], v[22:23], v[8:11]
+; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[2:5], v[22:23], v[22:23], v[16:19]
+; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[16:19], v[22:23], v[24:25], v[16:19]
+; CHECK-NEXT: s_nop 4
; CHECK-NEXT: v_cvt_f16_f32_e32 v10, v6
-; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[6:9], v[26:27], v[26:27], v[12:15]
; CHECK-NEXT: global_store_short v[0:1], v10, off
-; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[2:5], v[26:27], v[26:27], v[2:5]
+; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[6:9], v[22:23], v[22:23], v[12:15]
; CHECK-NEXT: buffer_wbl2 sc0 sc1
; CHECK-NEXT: s_waitcnt vmcnt(0)
; CHECK-NEXT: buffer_inv sc0 sc1
+; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[2:5], v[22:23], v[22:23], v[2:5]
+; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[8:11], v[22:23], v[22:23], v[16:19]
; CHECK-NEXT: s_nop 1
; CHECK-NEXT: v_cvt_f16_f32_e32 v6, v6
; CHECK-NEXT: global_store_short v[0:1], v6, off
-; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[16:19], v[26:27], v[26:27], v[20:23]
+; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[6:9], v[24:25], v[22:23], v[8:11]
; CHECK-NEXT: buffer_wbl2 sc0 sc1
; CHECK-NEXT: s_waitcnt vmcnt(0)
; CHECK-NEXT: buffer_inv sc0 sc1
-; CHECK-NEXT: global_store_short v[0:1], v24, off
+; CHECK-NEXT: global_store_short v[0:1], v20, off
; CHECK-NEXT: buffer_wbl2 sc0 sc1
; CHECK-NEXT: s_waitcnt vmcnt(0)
; CHECK-NEXT: buffer_inv sc0 sc1
-; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[2:5], v[28:29], v[26:27], v[2:5]
-; CHECK-NEXT: s_nop 6
-; CHECK-NEXT: v_cvt_f16_f32_e32 v6, v2
-; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[2:5], v[30:31], v[26:27], v[16:19]
+; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[2:5], v[26:27], v[22:23], v[2:5]
+; CHECK-NEXT: v_cvt_f16_f32_e32 v6, v6
; CHECK-NEXT: global_store_short v[0:1], v6, off
+; CHECK-NEXT: s_nop 4
+; CHECK-NEXT: v_cvt_f16_f32_e32 v2, v2
; CHECK-NEXT: buffer_wbl2 sc0 sc1
; CHECK-NEXT: s_waitcnt vmcnt(0)
; CHECK-NEXT: buffer_inv sc0 sc1
-; CHECK-NEXT: s_nop 2
-; CHECK-NEXT: v_cvt_f16_f32_e32 v2, v2
; CHECK-NEXT: global_store_short v[0:1], v2, off
; CHECK-NEXT: s_endpgm
entry:
diff --git a/llvm/test/CodeGen/AMDGPU/siloadstoreopt-misaligned-regsequence.ll b/llvm/test/CodeGen/AMDGPU/siloadstoreopt-misaligned-regsequence.ll
index 39f594d375b50..e42d62262a203 100644
--- a/llvm/test/CodeGen/AMDGPU/siloadstoreopt-misaligned-regsequence.ll
+++ b/llvm/test/CodeGen/AMDGPU/siloadstoreopt-misaligned-regsequence.ll
@@ -5,9 +5,10 @@ define amdgpu_kernel void @foo(ptr %0) {
; CHECK-LABEL: foo:
; CHECK: ; %bb.0: ; %entry
; CHECK-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x0
+; CHECK-NEXT: v_mov_b64_e32 v[0:1], 0
+; CHECK-NEXT: v_mov_b32_e32 v6, v1
; CHECK-NEXT: v_mov_b32_e32 v4, 0
-; CHECK-NEXT: v_mov_b32_e32 v5, 0
-; CHECK-NEXT: v_mov_b32_e32 v6, 0
+; CHECK-NEXT: v_mov_b32_e32 v5, v0
; CHECK-NEXT: s_waitcnt lgkmcnt(0)
; CHECK-NEXT: v_mov_b64_e32 v[2:3], s[0:1]
; CHECK-NEXT: flat_store_dwordx3 v[2:3], v[4:6]
diff --git a/llvm/test/CodeGen/AMDGPU/v_mov_b64-isel.ll b/llvm/test/CodeGen/AMDGPU/v_mov_b64-isel.ll
new file mode 100644
index 0000000000000..e89dce606dc9d
--- /dev/null
+++ b/llvm/test/CodeGen/AMDGPU/v_mov_b64-isel.ll
@@ -0,0 +1,119 @@
+; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --filter "S_MOV_B32|REG_SEQUENCE|V_MOV_B32_e32|V_MOV_B64|COPY|DS_WRITE_B64" --version 6
+; RUN: llc -mtriple=amdgcn -mcpu=gfx900 -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=NOVMOV %s
+; RUN: llc -mtriple=amdgcn -mcpu=gfx942 -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GFX942 %s
+; RUN: llc -mtriple=amdgcn -mcpu=gfx1250 -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GFX1250 %s
+
+define amdgpu_kernel void @store_i64_inline() {
+ ; NOVMOV-LABEL: name: store_i64_inline
+ ; NOVMOV: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 -1
+ ; NOVMOV-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[S_MOV_B32_]], %subreg.sub0, [[S_MOV_B32_]], %subreg.sub1
+ ; NOVMOV-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
+ ; NOVMOV-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]]
+ ; NOVMOV-NEXT: DS_WRITE_B64_gfx9 killed [[V_MOV_B32_e32_]], killed [[COPY]], 0, 0, implicit $exec :: (volatile store (s64) into `ptr addrspace(3) null`, addrspace 3)
+ ;
+ ; GFX942-LABEL: name: store_i64_inline
+ ; GFX942: [[V_MOV_B64_e32_:%[0-9]+]]:vreg_64_align2 = V_MOV_B64_e32 -1, implicit $exec
+ ; GFX942-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
+ ; GFX942-NEXT: DS_WRITE_B64_gfx9 killed [[V_MOV_B32_e32_]], killed [[V_MOV_B64_e32_]], 0, 0, implicit $exec :: (volatile store (s64) into `ptr addrspace(3) null`, addrspace 3)
+ ;
+ ; GFX1250-LABEL: name: store_i64_inline
+ ; GFX1250: [[V_MOV_B64_e32_:%[0-9]+]]:vreg_64_align2 = V_MOV_B64_e32 -1, implicit $exec
+ ; GFX1250-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
+ ; GFX1250-NEXT: DS_WRITE_B64_gfx9 killed [[V_MOV_B32_e32_]], killed [[V_MOV_B64_e32_]], 0, 0, implicit $exec :: (volatile store (s64) into `ptr addrspace(3) null`, addrspace 3)
+ store volatile i64 -1, ptr addrspace(3) null, align 8
+ ret void
+}
+
+define amdgpu_kernel void @store_i64_u32_lit() {
+ ; NOVMOV-LABEL: name: store_i64_u32_lit
+ ; NOVMOV: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0
+ ; NOVMOV-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 1234567890
+ ; NOVMOV-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE killed [[S_MOV_B32_1]], %subreg.sub0, killed [[S_MOV_B32_]], %subreg.sub1
+ ; NOVMOV-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
+ ; NOVMOV-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]]
+ ; NOVMOV-NEXT: DS_WRITE_B64_gfx9 killed [[V_MOV_B32_e32_]], killed [[COPY]], 0, 0, implicit $exec :: (volatile store (s64) into `ptr addrspace(3) null`, addrspace 3)
+ ;
+ ; GFX942-LABEL: name: store_i64_u32_lit
+ ; GFX942: [[V_MOV_B64_e32_:%[0-9]+]]:vreg_64_align2 = V_MOV_B64_e32 1234567890, implicit $exec
+ ; GFX942-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
+ ; GFX942-NEXT: DS_WRITE_B64_gfx9 killed [[V_MOV_B32_e32_]], killed [[V_MOV_B64_e32_]], 0, 0, implicit $exec :: (volatile store (s64) into `ptr addrspace(3) null`, addrspace 3)
+ ;
+ ; GFX1250-LABEL: name: store_i64_u32_lit
+ ; GFX1250: [[V_MOV_B64_e32_:%[0-9]+]]:vreg_64_align2 = V_MOV_B64_e32 1234567890, implicit $exec
+ ; GFX1250-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
+ ; GFX1250-NEXT: DS_WRITE_B64_gfx9 killed [[V_MOV_B32_e32_]], killed [[V_MOV_B64_e32_]], 0, 0, implicit $exec :: (volatile store (s64) into `ptr addrspace(3) null`, addrspace 3)
+ store volatile i64 1234567890, ptr addrspace(3) null, align 8
+ ret void
+}
+
+define amdgpu_kernel void @store_i64_lit64() {
+ ; NOVMOV-LABEL: name: store_i64_lit64
+ ; NOVMOV: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 305419896
+ ; NOVMOV-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 -1698898192
+ ; NOVMOV-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE killed [[S_MOV_B32_1]], %subreg.sub0, killed [[S_MOV_B32_]], %subreg.sub1
+ ; NOVMOV-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
+ ; NOVMOV-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]]
+ ; NOVMOV-NEXT: DS_WRITE_B64_gfx9 killed [[V_MOV_B32_e32_]], killed [[COPY]], 0, 0, implicit $exec :: (volatile store (s64) into `ptr addrspace(3) null`, addrspace 3)
+ ;
+ ; GFX942-LABEL: name: store_i64_lit64
+ ; GFX942: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 305419896
+ ; GFX942-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 -1698898192
+ ; GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE killed [[S_MOV_B32_1]], %subreg.sub0, killed [[S_MOV_B32_]], %subreg.sub1
+ ; GFX942-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
+ ; GFX942-NEXT: [[COPY:%[0-9]+]]:av_64_align2 = COPY [[REG_SEQUENCE]]
+ ; GFX942-NEXT: DS_WRITE_B64_gfx9 killed [[V_MOV_B32_e32_]], killed [[COPY]], 0, 0, implicit $exec :: (volatile store (s64) into `ptr addrspace(3) null`, addrspace 3)
+ ;
+ ; GFX1250-LABEL: name: store_i64_lit64
+ ; GFX1250: [[V_MOV_B64_e32_:%[0-9]+]]:vreg_64_align2 = V_MOV_B64_e32 1311768467463790320, implicit $exec
+ ; GFX1250-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
+ ; GFX1250-NEXT: DS_WRITE_B64_gfx9 killed [[V_MOV_B32_e32_]], killed [[V_MOV_B64_e32_]], 0, 0, implicit $exec :: (volatile store (s64) into `ptr addrspace(3) null`, addrspace 3)
+ store volatile i64 1311768467463790320, ptr addrspace(3) null, align 8
+ ret void
+}
+
+define amdgpu_kernel void @store_f64_inline() {
+ ; NOVMOV-LABEL: name: store_f64_inline
+ ; NOVMOV: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1072693248
+ ; NOVMOV-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 0
+ ; NOVMOV-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE killed [[S_MOV_B32_1]], %subreg.sub0, killed [[S_MOV_B32_]], %subreg.sub1
+ ; NOVMOV-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
+ ; NOVMOV-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]]
+ ; NOVMOV-NEXT: DS_WRITE_B64_gfx9 killed [[V_MOV_B32_e32_]], killed [[COPY]], 0, 0, implicit $exec :: (volatile store (s64) into `ptr addrspace(3) null`, addrspace 3)
+ ;
+ ; GFX942-LABEL: name: store_f64_inline
+ ; GFX942: [[V_MOV_B64_e32_:%[0-9]+]]:vreg_64_align2 = V_MOV_B64_e32 4607182418800017408, implicit $exec
+ ; GFX942-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
+ ; GFX942-NEXT: DS_WRITE_B64_gfx9 killed [[V_MOV_B32_e32_]], killed [[V_MOV_B64_e32_]], 0, 0, implicit $exec :: (volatile store (s64) into `ptr addrspace(3) null`, addrspace 3)
+ ;
+ ; GFX1250-LABEL: name: store_f64_inline
+ ; GFX1250: [[V_MOV_B64_e32_:%[0-9]+]]:vreg_64_align2 = V_MOV_B64_e32 4607182418800017408, implicit $exec
+ ; GFX1250-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
+ ; GFX1250-NEXT: DS_WRITE_B64_gfx9 killed [[V_MOV_B32_e32_]], killed [[V_MOV_B64_e32_]], 0, 0, implicit $exec :: (volatile store (s64) into `ptr addrspace(3) null`, addrspace 3)
+ store volatile double 1.000000e+00, ptr addrspace(3) null, align 8
+ ret void
+}
+
+define amdgpu_kernel void @store_f64_lit64() {
+ ; NOVMOV-LABEL: name: store_f64_lit64
+ ; NOVMOV: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1074340347
+ ; NOVMOV-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 1413754136
+ ; NOVMOV-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE killed [[S_MOV_B32_1]], %subreg.sub0, killed [[S_MOV_B32_]], %subreg.sub1
+ ; NOVMOV-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
+ ; NOVMOV-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]]
+ ; NOVMOV-NEXT: DS_WRITE_B64_gfx9 killed [[V_MOV_B32_e32_]], killed [[COPY]], 0, 0, implicit $exec :: (volatile store (s64) into `ptr addrspace(3) null`, addrspace 3)
+ ;
+ ; GFX942-LABEL: name: store_f64_lit64
+ ; GFX942: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1074340347
+ ; GFX942-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 1413754136
+ ; GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE killed [[S_MOV_B32_1]], %subreg.sub0, killed [[S_MOV_B32_]], %subreg.sub1
+ ; GFX942-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
+ ; GFX942-NEXT: [[COPY:%[0-9]+]]:av_64_align2 = COPY [[REG_SEQUENCE]]
+ ; GFX942-NEXT: DS_WRITE_B64_gfx9 killed [[V_MOV_B32_e32_]], killed [[COPY]], 0, 0, implicit $exec :: (volatile store (s64) into `ptr addrspace(3) null`, addrspace 3)
+ ;
+ ; GFX1250-LABEL: name: store_f64_lit64
+ ; GFX1250: [[V_MOV_B64_e32_:%[0-9]+]]:vreg_64_align2 = V_MOV_B64_e32 4614256656552045848, implicit $exec
+ ; GFX1250-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
+ ; GFX1250-NEXT: DS_WRITE_B64_gfx9 killed [[V_MOV_B32_e32_]], killed [[V_MOV_B64_e32_]], 0, 0, implicit $exec :: (volatile store (s64) into `ptr addrspace(3) null`, addrspace 3)
+ store volatile double 0x400921FB54442D18, ptr addrspace(3) null, align 8
+ ret void
+}
More information about the llvm-commits
mailing list