[llvm] [AMDGPU][GlobalISel] Scale M0/GPR indirect index by element size (PR #216698)
Arseniy Obolenskiy via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 17 05:59:30 PDT 2026
https://github.com/aobolensk updated https://github.com/llvm/llvm-project/pull/216698
>From 26f1ce1fa490148178bd88c6b2f6d9c1b06b3ff0 Mon Sep 17 00:00:00 2001
From: Arseniy Obolenskiy <arseniy.obolenskiy at amd.com>
Date: Mon, 17 Aug 2026 13:23:51 +0200
Subject: [PATCH] [AMDGPU][GlobalISel] Scale M0/GPR indirect index by element
size
M0/GPR-index addressing counts 32-bit registers, not bytes, so extracting/inserting elements wider than 32 bits needs the index scaled by EltSize/4 before use
---
.../AMDGPU/AMDGPUInstructionSelector.cpp | 24 ++++-
.../AMDGPU/GlobalISel/extractelement.ll | 90 ++++++++++---------
.../inst-select-extract-vector-elt.mir | 42 ++++++---
.../inst-select-insert-vector-elt.mir | 24 +++--
4 files changed, 111 insertions(+), 69 deletions(-)
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp b/llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp
index 0a5dbca02fea2..56647c382065e 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp
@@ -3411,6 +3411,23 @@ computeIndirectRegIndex(MachineRegisterInfo &MRI, const SIRegisterInfo &TRI,
return std::pair(IdxBaseReg, SubRegs[Offset]);
}
+/// M0/GPR-index addressing counts 32-bit registers, not EltSize-byte elements.
+static Register scaleIndirectIdxReg(MachineRegisterInfo &MRI,
+ const SIInstrInfo &TII,
+ MachineBasicBlock &BB, MachineInstr &I,
+ const DebugLoc &DL, Register IdxReg,
+ unsigned EltSize) {
+ if (EltSize <= 4)
+ return IdxReg;
+
+ assert(isPowerOf2_32(EltSize) && "cannot scale index by a shift");
+ Register ScaledIdxReg = MRI.createVirtualRegister(&AMDGPU::SReg_32RegClass);
+ BuildMI(BB, I, DL, TII.get(AMDGPU::S_LSHL_B32), ScaledIdxReg)
+ .addReg(IdxReg)
+ .addImm(Log2_32(EltSize / 4));
+ return ScaledIdxReg;
+}
+
bool AMDGPUInstructionSelector::selectG_EXTRACT_VECTOR_ELT(
MachineInstr &MI) const {
Register DstReg = MI.getOperand(0).getReg();
@@ -3452,6 +3469,9 @@ bool AMDGPUInstructionSelector::selectG_EXTRACT_VECTOR_ELT(
if (DstTy.getSizeInBits() != 32 && !Is64)
return false;
+ IdxReg = scaleIndirectIdxReg(*MRI, TII, *BB, MI, DL, IdxReg,
+ DstTy.getSizeInBits() / 8);
+
BuildMI(*BB, &MI, DL, TII.get(AMDGPU::COPY), AMDGPU::M0)
.addReg(IdxReg);
@@ -3463,9 +3483,6 @@ bool AMDGPUInstructionSelector::selectG_EXTRACT_VECTOR_ELT(
return true;
}
- if (SrcRB->getID() != AMDGPU::VGPRRegBankID || DstTy.getSizeInBits() != 32)
- return false;
-
if (!STI.useVGPRIndexMode()) {
BuildMI(*BB, &MI, DL, TII.get(AMDGPU::COPY), AMDGPU::M0)
.addReg(IdxReg);
@@ -3534,6 +3551,7 @@ bool AMDGPUInstructionSelector::selectG_INSERT_VECTOR_ELT(
MachineBasicBlock *BB = MI.getParent();
const DebugLoc &DL = MI.getDebugLoc();
+ IdxReg = scaleIndirectIdxReg(*MRI, TII, *BB, MI, DL, IdxReg, ValSize / 8);
if (!IndexMode) {
BuildMI(*BB, &MI, DL, TII.get(AMDGPU::COPY), AMDGPU::M0)
diff --git a/llvm/test/CodeGen/AMDGPU/GlobalISel/extractelement.ll b/llvm/test/CodeGen/AMDGPU/GlobalISel/extractelement.ll
index bff28f14bbfa5..381c02754cf68 100644
--- a/llvm/test/CodeGen/AMDGPU/GlobalISel/extractelement.ll
+++ b/llvm/test/CodeGen/AMDGPU/GlobalISel/extractelement.ll
@@ -288,7 +288,7 @@ define amdgpu_ps void @dyn_extract_v8i64_const_s_s(i32 inreg %sel) {
; GPRIDX-LABEL: dyn_extract_v8i64_const_s_s:
; GPRIDX: ; %bb.0: ; %entry
; GPRIDX-NEXT: s_mov_b64 s[4:5], 1
-; GPRIDX-NEXT: s_mov_b32 m0, s2
+; GPRIDX-NEXT: s_lshl_b32 m0, s2, 1
; GPRIDX-NEXT: s_mov_b64 s[18:19], 8
; GPRIDX-NEXT: s_mov_b64 s[16:17], 7
; GPRIDX-NEXT: s_mov_b64 s[14:15], 6
@@ -305,7 +305,7 @@ define amdgpu_ps void @dyn_extract_v8i64_const_s_s(i32 inreg %sel) {
; MOVREL-LABEL: dyn_extract_v8i64_const_s_s:
; MOVREL: ; %bb.0: ; %entry
; MOVREL-NEXT: s_mov_b64 s[4:5], 1
-; MOVREL-NEXT: s_mov_b32 m0, s2
+; MOVREL-NEXT: s_lshl_b32 m0, s2, 1
; MOVREL-NEXT: s_mov_b64 s[18:19], 8
; MOVREL-NEXT: s_mov_b64 s[16:17], 7
; MOVREL-NEXT: s_mov_b64 s[14:15], 6
@@ -322,7 +322,7 @@ define amdgpu_ps void @dyn_extract_v8i64_const_s_s(i32 inreg %sel) {
; GFX10-LABEL: dyn_extract_v8i64_const_s_s:
; GFX10: ; %bb.0: ; %entry
; GFX10-NEXT: s_mov_b64 s[4:5], 1
-; GFX10-NEXT: s_mov_b32 m0, s2
+; GFX10-NEXT: s_lshl_b32 m0, s2, 1
; GFX10-NEXT: s_mov_b64 s[18:19], 8
; GFX10-NEXT: s_mov_b64 s[16:17], 7
; GFX10-NEXT: s_mov_b64 s[14:15], 6
@@ -339,7 +339,7 @@ define amdgpu_ps void @dyn_extract_v8i64_const_s_s(i32 inreg %sel) {
; GFX11-LABEL: dyn_extract_v8i64_const_s_s:
; GFX11: ; %bb.0: ; %entry
; GFX11-NEXT: s_mov_b64 s[4:5], 1
-; GFX11-NEXT: s_mov_b32 m0, s2
+; GFX11-NEXT: s_lshl_b32 m0, s2, 1
; GFX11-NEXT: s_mov_b64 s[18:19], 8
; GFX11-NEXT: s_mov_b64 s[16:17], 7
; GFX11-NEXT: s_mov_b64 s[14:15], 6
@@ -623,7 +623,7 @@ define amdgpu_ps void @dyn_extract_v8i64_s_s(<8 x i64> inreg %vec, i32 inreg %se
; GPRIDX: ; %bb.0: ; %entry
; GPRIDX-NEXT: s_mov_b32 s0, s2
; GPRIDX-NEXT: s_mov_b32 s1, s3
-; GPRIDX-NEXT: s_mov_b32 m0, s18
+; GPRIDX-NEXT: s_lshl_b32 m0, s18, 1
; GPRIDX-NEXT: s_mov_b32 s2, s4
; GPRIDX-NEXT: s_mov_b32 s3, s5
; GPRIDX-NEXT: s_mov_b32 s4, s6
@@ -648,7 +648,7 @@ define amdgpu_ps void @dyn_extract_v8i64_s_s(<8 x i64> inreg %vec, i32 inreg %se
; MOVREL: ; %bb.0: ; %entry
; MOVREL-NEXT: s_mov_b32 s0, s2
; MOVREL-NEXT: s_mov_b32 s1, s3
-; MOVREL-NEXT: s_mov_b32 m0, s18
+; MOVREL-NEXT: s_lshl_b32 m0, s18, 1
; MOVREL-NEXT: s_mov_b32 s2, s4
; MOVREL-NEXT: s_mov_b32 s3, s5
; MOVREL-NEXT: s_mov_b32 s4, s6
@@ -673,7 +673,7 @@ define amdgpu_ps void @dyn_extract_v8i64_s_s(<8 x i64> inreg %vec, i32 inreg %se
; GFX10: ; %bb.0: ; %entry
; GFX10-NEXT: s_mov_b32 s0, s2
; GFX10-NEXT: s_mov_b32 s1, s3
-; GFX10-NEXT: s_mov_b32 m0, s18
+; GFX10-NEXT: s_lshl_b32 m0, s18, 1
; GFX10-NEXT: s_mov_b32 s2, s4
; GFX10-NEXT: s_mov_b32 s3, s5
; GFX10-NEXT: s_mov_b32 s4, s6
@@ -698,7 +698,7 @@ define amdgpu_ps void @dyn_extract_v8i64_s_s(<8 x i64> inreg %vec, i32 inreg %se
; GFX11: ; %bb.0: ; %entry
; GFX11-NEXT: s_mov_b32 s0, s2
; GFX11-NEXT: s_mov_b32 s1, s3
-; GFX11-NEXT: s_mov_b32 m0, s18
+; GFX11-NEXT: s_lshl_b32 m0, s18, 1
; GFX11-NEXT: s_mov_b32 s2, s4
; GFX11-NEXT: s_mov_b32 s3, s5
; GFX11-NEXT: s_mov_b32 s4, s6
@@ -832,7 +832,7 @@ define amdgpu_ps double @dyn_extract_v8f64_s_s_offset1(<8 x double> inreg %vec,
; GCN-NEXT: s_mov_b32 s1, s3
; GCN-NEXT: s_mov_b32 s2, s4
; GCN-NEXT: s_mov_b32 s3, s5
-; GCN-NEXT: s_mov_b32 m0, s18
+; GCN-NEXT: s_lshl_b32 m0, s18, 1
; GCN-NEXT: s_mov_b32 s4, s6
; GCN-NEXT: s_mov_b32 s5, s7
; GCN-NEXT: s_mov_b32 s6, s8
@@ -854,7 +854,7 @@ define amdgpu_ps double @dyn_extract_v8f64_s_s_offset1(<8 x double> inreg %vec,
; GFX10PLUS-NEXT: s_mov_b32 s1, s3
; GFX10PLUS-NEXT: s_mov_b32 s2, s4
; GFX10PLUS-NEXT: s_mov_b32 s3, s5
-; GFX10PLUS-NEXT: s_mov_b32 m0, s18
+; GFX10PLUS-NEXT: s_lshl_b32 m0, s18, 1
; GFX10PLUS-NEXT: s_mov_b32 s4, s6
; GFX10PLUS-NEXT: s_mov_b32 s5, s7
; GFX10PLUS-NEXT: s_mov_b32 s6, s8
@@ -884,7 +884,7 @@ define amdgpu_ps double @dyn_extract_v8f64_s_s_offset2(<8 x double> inreg %vec,
; GCN-NEXT: s_mov_b32 s3, s5
; GCN-NEXT: s_mov_b32 s4, s6
; GCN-NEXT: s_mov_b32 s5, s7
-; GCN-NEXT: s_mov_b32 m0, s18
+; GCN-NEXT: s_lshl_b32 m0, s18, 1
; GCN-NEXT: s_mov_b32 s6, s8
; GCN-NEXT: s_mov_b32 s7, s9
; GCN-NEXT: s_mov_b32 s8, s10
@@ -906,7 +906,7 @@ define amdgpu_ps double @dyn_extract_v8f64_s_s_offset2(<8 x double> inreg %vec,
; GFX10PLUS-NEXT: s_mov_b32 s3, s5
; GFX10PLUS-NEXT: s_mov_b32 s4, s6
; GFX10PLUS-NEXT: s_mov_b32 s5, s7
-; GFX10PLUS-NEXT: s_mov_b32 m0, s18
+; GFX10PLUS-NEXT: s_lshl_b32 m0, s18, 1
; GFX10PLUS-NEXT: s_mov_b32 s6, s8
; GFX10PLUS-NEXT: s_mov_b32 s7, s9
; GFX10PLUS-NEXT: s_mov_b32 s8, s10
@@ -936,7 +936,7 @@ define amdgpu_ps double @dyn_extract_v8f64_s_s_offset3(<8 x double> inreg %vec,
; GCN-NEXT: s_mov_b32 s5, s7
; GCN-NEXT: s_mov_b32 s6, s8
; GCN-NEXT: s_mov_b32 s7, s9
-; GCN-NEXT: s_mov_b32 m0, s18
+; GCN-NEXT: s_lshl_b32 m0, s18, 1
; GCN-NEXT: s_mov_b32 s8, s10
; GCN-NEXT: s_mov_b32 s9, s11
; GCN-NEXT: s_mov_b32 s10, s12
@@ -958,7 +958,7 @@ define amdgpu_ps double @dyn_extract_v8f64_s_s_offset3(<8 x double> inreg %vec,
; GFX10PLUS-NEXT: s_mov_b32 s5, s7
; GFX10PLUS-NEXT: s_mov_b32 s6, s8
; GFX10PLUS-NEXT: s_mov_b32 s7, s9
-; GFX10PLUS-NEXT: s_mov_b32 m0, s18
+; GFX10PLUS-NEXT: s_lshl_b32 m0, s18, 1
; GFX10PLUS-NEXT: s_mov_b32 s8, s10
; GFX10PLUS-NEXT: s_mov_b32 s9, s11
; GFX10PLUS-NEXT: s_mov_b32 s10, s12
@@ -988,7 +988,7 @@ define amdgpu_ps double @dyn_extract_v8f64_s_s_offset4(<8 x double> inreg %vec,
; GCN-NEXT: s_mov_b32 s7, s9
; GCN-NEXT: s_mov_b32 s8, s10
; GCN-NEXT: s_mov_b32 s9, s11
-; GCN-NEXT: s_mov_b32 m0, s18
+; GCN-NEXT: s_lshl_b32 m0, s18, 1
; GCN-NEXT: s_mov_b32 s10, s12
; GCN-NEXT: s_mov_b32 s11, s13
; GCN-NEXT: s_mov_b32 s12, s14
@@ -1010,7 +1010,7 @@ define amdgpu_ps double @dyn_extract_v8f64_s_s_offset4(<8 x double> inreg %vec,
; GFX10PLUS-NEXT: s_mov_b32 s7, s9
; GFX10PLUS-NEXT: s_mov_b32 s8, s10
; GFX10PLUS-NEXT: s_mov_b32 s9, s11
-; GFX10PLUS-NEXT: s_mov_b32 m0, s18
+; GFX10PLUS-NEXT: s_lshl_b32 m0, s18, 1
; GFX10PLUS-NEXT: s_mov_b32 s10, s12
; GFX10PLUS-NEXT: s_mov_b32 s11, s13
; GFX10PLUS-NEXT: s_mov_b32 s12, s14
@@ -1040,7 +1040,7 @@ define amdgpu_ps double @dyn_extract_v8f64_s_s_offset5(<8 x double> inreg %vec,
; GCN-NEXT: s_mov_b32 s9, s11
; GCN-NEXT: s_mov_b32 s10, s12
; GCN-NEXT: s_mov_b32 s11, s13
-; GCN-NEXT: s_mov_b32 m0, s18
+; GCN-NEXT: s_lshl_b32 m0, s18, 1
; GCN-NEXT: s_mov_b32 s12, s14
; GCN-NEXT: s_mov_b32 s13, s15
; GCN-NEXT: s_mov_b32 s14, s16
@@ -1062,7 +1062,7 @@ define amdgpu_ps double @dyn_extract_v8f64_s_s_offset5(<8 x double> inreg %vec,
; GFX10PLUS-NEXT: s_mov_b32 s9, s11
; GFX10PLUS-NEXT: s_mov_b32 s10, s12
; GFX10PLUS-NEXT: s_mov_b32 s11, s13
-; GFX10PLUS-NEXT: s_mov_b32 m0, s18
+; GFX10PLUS-NEXT: s_lshl_b32 m0, s18, 1
; GFX10PLUS-NEXT: s_mov_b32 s12, s14
; GFX10PLUS-NEXT: s_mov_b32 s13, s15
; GFX10PLUS-NEXT: s_mov_b32 s14, s16
@@ -1092,7 +1092,7 @@ define amdgpu_ps double @dyn_extract_v8f64_s_s_offset6(<8 x double> inreg %vec,
; GCN-NEXT: s_mov_b32 s11, s13
; GCN-NEXT: s_mov_b32 s12, s14
; GCN-NEXT: s_mov_b32 s13, s15
-; GCN-NEXT: s_mov_b32 m0, s18
+; GCN-NEXT: s_lshl_b32 m0, s18, 1
; GCN-NEXT: s_mov_b32 s14, s16
; GCN-NEXT: s_mov_b32 s15, s17
; GCN-NEXT: s_movrels_b64 s[0:1], s[12:13]
@@ -1114,7 +1114,7 @@ define amdgpu_ps double @dyn_extract_v8f64_s_s_offset6(<8 x double> inreg %vec,
; GFX10PLUS-NEXT: s_mov_b32 s11, s13
; GFX10PLUS-NEXT: s_mov_b32 s12, s14
; GFX10PLUS-NEXT: s_mov_b32 s13, s15
-; GFX10PLUS-NEXT: s_mov_b32 m0, s18
+; GFX10PLUS-NEXT: s_lshl_b32 m0, s18, 1
; GFX10PLUS-NEXT: s_mov_b32 s14, s16
; GFX10PLUS-NEXT: s_mov_b32 s15, s17
; GFX10PLUS-NEXT: s_movrels_b64 s[0:1], s[12:13]
@@ -1144,7 +1144,7 @@ define amdgpu_ps double @dyn_extract_v8f64_s_s_offset7(<8 x double> inreg %vec,
; GPRIDX-NEXT: s_mov_b32 s13, s15
; GPRIDX-NEXT: s_mov_b32 s14, s16
; GPRIDX-NEXT: s_mov_b32 s15, s17
-; GPRIDX-NEXT: s_mov_b32 m0, s18
+; GPRIDX-NEXT: s_lshl_b32 m0, s18, 1
; GPRIDX-NEXT: s_nop 0
; GPRIDX-NEXT: s_movrels_b64 s[0:1], s[14:15]
; GPRIDX-NEXT: ; return to shader part epilog
@@ -1167,7 +1167,7 @@ define amdgpu_ps double @dyn_extract_v8f64_s_s_offset7(<8 x double> inreg %vec,
; MOVREL-NEXT: s_mov_b32 s13, s15
; MOVREL-NEXT: s_mov_b32 s14, s16
; MOVREL-NEXT: s_mov_b32 s15, s17
-; MOVREL-NEXT: s_mov_b32 m0, s18
+; MOVREL-NEXT: s_lshl_b32 m0, s18, 1
; MOVREL-NEXT: s_movrels_b64 s[0:1], s[14:15]
; MOVREL-NEXT: ; return to shader part epilog
;
@@ -1189,7 +1189,7 @@ define amdgpu_ps double @dyn_extract_v8f64_s_s_offset7(<8 x double> inreg %vec,
; GFX10PLUS-NEXT: s_mov_b32 s13, s15
; GFX10PLUS-NEXT: s_mov_b32 s14, s16
; GFX10PLUS-NEXT: s_mov_b32 s15, s17
-; GFX10PLUS-NEXT: s_mov_b32 m0, s18
+; GFX10PLUS-NEXT: s_lshl_b32 m0, s18, 1
; GFX10PLUS-NEXT: s_movrels_b64 s[0:1], s[14:15]
; GFX10PLUS-NEXT: ; return to shader part epilog
entry:
@@ -1201,9 +1201,10 @@ entry:
define amdgpu_ps double @dyn_extract_v8f64_s_s_offsetm1(<8 x double> inreg %vec, i32 inreg %sel) {
; GCN-LABEL: dyn_extract_v8f64_s_s_offsetm1:
; GCN: ; %bb.0: ; %entry
+; GCN-NEXT: s_add_i32 s18, s18, -1
; GCN-NEXT: s_mov_b32 s0, s2
; GCN-NEXT: s_mov_b32 s1, s3
-; GCN-NEXT: s_add_i32 m0, s18, -1
+; GCN-NEXT: s_lshl_b32 m0, s18, 1
; GCN-NEXT: s_mov_b32 s2, s4
; GCN-NEXT: s_mov_b32 s3, s5
; GCN-NEXT: s_mov_b32 s4, s6
@@ -1223,9 +1224,10 @@ define amdgpu_ps double @dyn_extract_v8f64_s_s_offsetm1(<8 x double> inreg %vec,
;
; GFX10PLUS-LABEL: dyn_extract_v8f64_s_s_offsetm1:
; GFX10PLUS: ; %bb.0: ; %entry
+; GFX10PLUS-NEXT: s_add_i32 s18, s18, -1
; GFX10PLUS-NEXT: s_mov_b32 s0, s2
; GFX10PLUS-NEXT: s_mov_b32 s1, s3
-; GFX10PLUS-NEXT: s_add_i32 m0, s18, -1
+; GFX10PLUS-NEXT: s_lshl_b32 m0, s18, 1
; GFX10PLUS-NEXT: s_mov_b32 s2, s4
; GFX10PLUS-NEXT: s_mov_b32 s3, s5
; GFX10PLUS-NEXT: s_mov_b32 s4, s6
@@ -1550,7 +1552,7 @@ define amdgpu_ps void @dyn_extract_v8p1_s_s(<8 x ptr addrspace(1)> inreg %vec, i
; GPRIDX: ; %bb.0: ; %entry
; GPRIDX-NEXT: s_mov_b32 s0, s2
; GPRIDX-NEXT: s_mov_b32 s1, s3
-; GPRIDX-NEXT: s_mov_b32 m0, s18
+; GPRIDX-NEXT: s_lshl_b32 m0, s18, 1
; GPRIDX-NEXT: s_mov_b32 s2, s4
; GPRIDX-NEXT: s_mov_b32 s3, s5
; GPRIDX-NEXT: s_mov_b32 s4, s6
@@ -1575,7 +1577,7 @@ define amdgpu_ps void @dyn_extract_v8p1_s_s(<8 x ptr addrspace(1)> inreg %vec, i
; MOVREL: ; %bb.0: ; %entry
; MOVREL-NEXT: s_mov_b32 s0, s2
; MOVREL-NEXT: s_mov_b32 s1, s3
-; MOVREL-NEXT: s_mov_b32 m0, s18
+; MOVREL-NEXT: s_lshl_b32 m0, s18, 1
; MOVREL-NEXT: s_mov_b32 s2, s4
; MOVREL-NEXT: s_mov_b32 s3, s5
; MOVREL-NEXT: s_mov_b32 s4, s6
@@ -1600,7 +1602,7 @@ define amdgpu_ps void @dyn_extract_v8p1_s_s(<8 x ptr addrspace(1)> inreg %vec, i
; GFX10: ; %bb.0: ; %entry
; GFX10-NEXT: s_mov_b32 s0, s2
; GFX10-NEXT: s_mov_b32 s1, s3
-; GFX10-NEXT: s_mov_b32 m0, s18
+; GFX10-NEXT: s_lshl_b32 m0, s18, 1
; GFX10-NEXT: s_mov_b32 s2, s4
; GFX10-NEXT: s_mov_b32 s3, s5
; GFX10-NEXT: s_mov_b32 s4, s6
@@ -1625,7 +1627,7 @@ define amdgpu_ps void @dyn_extract_v8p1_s_s(<8 x ptr addrspace(1)> inreg %vec, i
; GFX11: ; %bb.0: ; %entry
; GFX11-NEXT: s_mov_b32 s0, s2
; GFX11-NEXT: s_mov_b32 s1, s3
-; GFX11-NEXT: s_mov_b32 m0, s18
+; GFX11-NEXT: s_lshl_b32 m0, s18, 1
; GFX11-NEXT: s_mov_b32 s2, s4
; GFX11-NEXT: s_mov_b32 s3, s5
; GFX11-NEXT: s_mov_b32 s4, s6
@@ -1870,7 +1872,7 @@ define amdgpu_ps double @dyn_extract_v16f64_s_s(i32 inreg %sel) {
; GCN-LABEL: dyn_extract_v16f64_s_s:
; GCN: ; %bb.0: ; %entry
; GCN-NEXT: s_mov_b64 s[36:37], 1.0
-; GCN-NEXT: s_mov_b32 m0, s2
+; GCN-NEXT: s_lshl_b32 m0, s2, 1
; GCN-NEXT: s_mov_b32 s66, 0
; GCN-NEXT: s_mov_b32 s67, 0x40300000
; GCN-NEXT: s_mov_b32 s64, 0
@@ -1905,7 +1907,7 @@ define amdgpu_ps double @dyn_extract_v16f64_s_s(i32 inreg %sel) {
; GFX10PLUS-LABEL: dyn_extract_v16f64_s_s:
; GFX10PLUS: ; %bb.0: ; %entry
; GFX10PLUS-NEXT: s_mov_b64 s[36:37], 1.0
-; GFX10PLUS-NEXT: s_mov_b32 m0, s2
+; GFX10PLUS-NEXT: s_lshl_b32 m0, s2, 1
; GFX10PLUS-NEXT: s_mov_b32 s66, 0
; GFX10PLUS-NEXT: s_mov_b32 s67, 0x40300000
; GFX10PLUS-NEXT: s_mov_b32 s64, 0
@@ -2394,7 +2396,7 @@ define amdgpu_ps double @dyn_extract_v6f64_s_s(<6 x double> inreg %vec, i32 inre
; GCN: ; %bb.0: ; %entry
; GCN-NEXT: s_mov_b32 s0, s2
; GCN-NEXT: s_mov_b32 s1, s3
-; GCN-NEXT: s_mov_b32 m0, s14
+; GCN-NEXT: s_lshl_b32 m0, s14, 1
; GCN-NEXT: s_mov_b32 s2, s4
; GCN-NEXT: s_mov_b32 s3, s5
; GCN-NEXT: s_mov_b32 s4, s6
@@ -2412,7 +2414,7 @@ define amdgpu_ps double @dyn_extract_v6f64_s_s(<6 x double> inreg %vec, i32 inre
; GFX10PLUS: ; %bb.0: ; %entry
; GFX10PLUS-NEXT: s_mov_b32 s0, s2
; GFX10PLUS-NEXT: s_mov_b32 s1, s3
-; GFX10PLUS-NEXT: s_mov_b32 m0, s14
+; GFX10PLUS-NEXT: s_lshl_b32 m0, s14, 1
; GFX10PLUS-NEXT: s_mov_b32 s2, s4
; GFX10PLUS-NEXT: s_mov_b32 s3, s5
; GFX10PLUS-NEXT: s_mov_b32 s4, s6
@@ -2780,7 +2782,7 @@ define amdgpu_ps double @dyn_extract_v7f64_s_s(<7 x double> inreg %vec, i32 inre
; GCN: ; %bb.0: ; %entry
; GCN-NEXT: s_mov_b32 s0, s2
; GCN-NEXT: s_mov_b32 s1, s3
-; GCN-NEXT: s_mov_b32 m0, s16
+; GCN-NEXT: s_lshl_b32 m0, s16, 1
; GCN-NEXT: s_mov_b32 s2, s4
; GCN-NEXT: s_mov_b32 s3, s5
; GCN-NEXT: s_mov_b32 s4, s6
@@ -2800,7 +2802,7 @@ define amdgpu_ps double @dyn_extract_v7f64_s_s(<7 x double> inreg %vec, i32 inre
; GFX10PLUS: ; %bb.0: ; %entry
; GFX10PLUS-NEXT: s_mov_b32 s0, s2
; GFX10PLUS-NEXT: s_mov_b32 s1, s3
-; GFX10PLUS-NEXT: s_mov_b32 m0, s16
+; GFX10PLUS-NEXT: s_lshl_b32 m0, s16, 1
; GFX10PLUS-NEXT: s_mov_b32 s2, s4
; GFX10PLUS-NEXT: s_mov_b32 s3, s5
; GFX10PLUS-NEXT: s_mov_b32 s4, s6
@@ -2898,7 +2900,7 @@ define amdgpu_kernel void @dyn_extract_v5f64_s_s(ptr addrspace(1) %out, i32 %sel
; GPRIDX-NEXT: s_mov_b32 s13, 0x40140000
; GPRIDX-NEXT: s_mov_b64 s[10:11], 4.0
; GPRIDX-NEXT: s_waitcnt lgkmcnt(0)
-; GPRIDX-NEXT: s_mov_b32 m0, s2
+; GPRIDX-NEXT: s_lshl_b32 m0, s2, 1
; GPRIDX-NEXT: s_mov_b32 s8, 0
; GPRIDX-NEXT: s_mov_b32 s9, 0x40080000
; GPRIDX-NEXT: s_mov_b64 s[6:7], 2.0
@@ -2986,7 +2988,7 @@ define amdgpu_kernel void @dyn_extract_v5f64_s_s(ptr addrspace(1) %out, i32 %sel
; MOVREL-NEXT: s_mov_b32 flat_scratch_lo, s13
; MOVREL-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8
; MOVREL-NEXT: s_waitcnt lgkmcnt(0)
-; MOVREL-NEXT: s_mov_b32 m0, s2
+; MOVREL-NEXT: s_lshl_b32 m0, s2, 1
; MOVREL-NEXT: s_mov_b32 s12, 0
; MOVREL-NEXT: s_mov_b32 s13, 0x40140000
; MOVREL-NEXT: s_mov_b64 s[10:11], 4.0
@@ -3083,7 +3085,7 @@ define amdgpu_kernel void @dyn_extract_v5f64_s_s(ptr addrspace(1) %out, i32 %sel
; GFX10-NEXT: s_mov_b64 s[2:3], 2.0
; GFX10-NEXT: v_mov_b32_e32 v2, 0
; GFX10-NEXT: s_waitcnt lgkmcnt(0)
-; GFX10-NEXT: s_mov_b32 m0, s12
+; GFX10-NEXT: s_lshl_b32 m0, s12, 1
; GFX10-NEXT: s_movrels_b64 s[0:1], s[0:1]
; GFX10-NEXT: v_mov_b32_e32 v0, s0
; GFX10-NEXT: v_mov_b32_e32 v1, s1
@@ -3172,7 +3174,7 @@ define amdgpu_kernel void @dyn_extract_v5f64_s_s(ptr addrspace(1) %out, i32 %sel
; GFX11-NEXT: s_mov_b64 s[2:3], 2.0
; GFX11-NEXT: v_mov_b32_e32 v2, 0
; GFX11-NEXT: s_waitcnt lgkmcnt(0)
-; GFX11-NEXT: s_mov_b32 m0, s12
+; GFX11-NEXT: s_lshl_b32 m0, s12, 1
; GFX11-NEXT: s_movrels_b64 s[0:1], s[0:1]
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: global_store_b64 v2, v[0:1], s[10:11]
@@ -4252,7 +4254,7 @@ define amdgpu_kernel void @dyn_extract_v4f64_s_s_s(ptr addrspace(1) %out, i32 %s
; GPRIDX-NEXT: s_mov_b32 s4, 0
; GPRIDX-NEXT: s_mov_b32 s5, 0x40080000
; GPRIDX-NEXT: s_waitcnt lgkmcnt(0)
-; GPRIDX-NEXT: s_mov_b32 m0, s12
+; GPRIDX-NEXT: s_lshl_b32 m0, s12, 1
; GPRIDX-NEXT: s_mov_b64 s[2:3], 2.0
; GPRIDX-NEXT: s_movrels_b64 s[0:1], s[0:1]
; GPRIDX-NEXT: v_mov_b32_e32 v0, s0
@@ -4333,12 +4335,12 @@ define amdgpu_kernel void @dyn_extract_v4f64_s_s_s(ptr addrspace(1) %out, i32 %s
; MOVREL-NEXT: ; %bb.0: ; %entry
; MOVREL-NEXT: s_load_dwordx2 s[10:11], s[8:9], 0x0
; MOVREL-NEXT: s_load_dword s8, s[8:9], 0x8
-; MOVREL-NEXT: s_mov_b64 s[0:1], 1.0
; MOVREL-NEXT: s_add_i32 s12, s12, s17
+; MOVREL-NEXT: s_mov_b64 s[0:1], 1.0
; MOVREL-NEXT: s_mov_b64 s[6:7], 4.0
; MOVREL-NEXT: s_mov_b32 s4, 0
; MOVREL-NEXT: s_waitcnt lgkmcnt(0)
-; MOVREL-NEXT: s_mov_b32 m0, s8
+; MOVREL-NEXT: s_lshl_b32 m0, s8, 1
; MOVREL-NEXT: s_mov_b32 s5, 0x40080000
; MOVREL-NEXT: s_mov_b64 s[2:3], 2.0
; MOVREL-NEXT: s_movrels_b64 s[0:1], s[0:1]
@@ -4431,7 +4433,7 @@ define amdgpu_kernel void @dyn_extract_v4f64_s_s_s(ptr addrspace(1) %out, i32 %s
; GFX10-NEXT: s_mov_b64 s[2:3], 2.0
; GFX10-NEXT: v_mov_b32_e32 v2, 0
; GFX10-NEXT: s_waitcnt lgkmcnt(0)
-; GFX10-NEXT: s_mov_b32 m0, s12
+; GFX10-NEXT: s_lshl_b32 m0, s12, 1
; GFX10-NEXT: s_movrels_b64 s[0:1], s[0:1]
; GFX10-NEXT: v_mov_b32_e32 v0, s0
; GFX10-NEXT: v_mov_b32_e32 v1, s1
@@ -4518,7 +4520,7 @@ define amdgpu_kernel void @dyn_extract_v4f64_s_s_s(ptr addrspace(1) %out, i32 %s
; GFX11-NEXT: s_mov_b64 s[2:3], 2.0
; GFX11-NEXT: v_mov_b32_e32 v2, 0
; GFX11-NEXT: s_waitcnt lgkmcnt(0)
-; GFX11-NEXT: s_mov_b32 m0, s10
+; GFX11-NEXT: s_lshl_b32 m0, s10, 1
; GFX11-NEXT: s_movrels_b64 s[0:1], s[0:1]
; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
; GFX11-NEXT: global_store_b64 v2, v[0:1], s[8:9]
diff --git a/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-extract-vector-elt.mir b/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-extract-vector-elt.mir
index 2caf9a6fc6cde..7053ff71e710a 100644
--- a/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-extract-vector-elt.mir
+++ b/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-extract-vector-elt.mir
@@ -212,7 +212,8 @@ body: |
; MOVREL-NEXT: {{ $}}
; MOVREL-NEXT: [[COPY:%[0-9]+]]:sgpr_128 = COPY $sgpr0_sgpr1_sgpr2_sgpr3
; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr4
- ; MOVREL-NEXT: $m0 = COPY [[COPY1]]
+ ; MOVREL-NEXT: [[S_LSHL_B32_:%[0-9]+]]:sreg_32 = S_LSHL_B32 [[COPY1]], 1, implicit-def $scc
+ ; MOVREL-NEXT: $m0 = COPY [[S_LSHL_B32_]]
; MOVREL-NEXT: [[S_MOVRELS_B64_:%[0-9]+]]:sreg_64 = S_MOVRELS_B64 [[COPY]].sub0_sub1, implicit $m0, implicit [[COPY]]
; MOVREL-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B64_]]
;
@@ -221,7 +222,8 @@ body: |
; GPRIDX-NEXT: {{ $}}
; GPRIDX-NEXT: [[COPY:%[0-9]+]]:sgpr_128 = COPY $sgpr0_sgpr1_sgpr2_sgpr3
; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr4
- ; GPRIDX-NEXT: $m0 = COPY [[COPY1]]
+ ; GPRIDX-NEXT: [[S_LSHL_B32_:%[0-9]+]]:sreg_32 = S_LSHL_B32 [[COPY1]], 1, implicit-def $scc
+ ; GPRIDX-NEXT: $m0 = COPY [[S_LSHL_B32_]]
; GPRIDX-NEXT: [[S_MOVRELS_B64_:%[0-9]+]]:sreg_64 = S_MOVRELS_B64 [[COPY]].sub0_sub1, implicit $m0, implicit [[COPY]]
; GPRIDX-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B64_]]
%0:sgpr(<2 x s64>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3
@@ -244,7 +246,8 @@ body: |
; MOVREL-NEXT: {{ $}}
; MOVREL-NEXT: [[COPY:%[0-9]+]]:sgpr_256 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7
; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
- ; MOVREL-NEXT: $m0 = COPY [[COPY1]]
+ ; MOVREL-NEXT: [[S_LSHL_B32_:%[0-9]+]]:sreg_32 = S_LSHL_B32 [[COPY1]], 1, implicit-def $scc
+ ; MOVREL-NEXT: $m0 = COPY [[S_LSHL_B32_]]
; MOVREL-NEXT: [[S_MOVRELS_B64_:%[0-9]+]]:sreg_64 = S_MOVRELS_B64 [[COPY]].sub0_sub1, implicit $m0, implicit [[COPY]]
; MOVREL-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B64_]]
;
@@ -253,7 +256,8 @@ body: |
; GPRIDX-NEXT: {{ $}}
; GPRIDX-NEXT: [[COPY:%[0-9]+]]:sgpr_256 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7
; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
- ; GPRIDX-NEXT: $m0 = COPY [[COPY1]]
+ ; GPRIDX-NEXT: [[S_LSHL_B32_:%[0-9]+]]:sreg_32 = S_LSHL_B32 [[COPY1]], 1, implicit-def $scc
+ ; GPRIDX-NEXT: $m0 = COPY [[S_LSHL_B32_]]
; GPRIDX-NEXT: [[S_MOVRELS_B64_:%[0-9]+]]:sreg_64 = S_MOVRELS_B64 [[COPY]].sub0_sub1, implicit $m0, implicit [[COPY]]
; GPRIDX-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B64_]]
%0:sgpr(<4 x s64>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7
@@ -276,7 +280,8 @@ body: |
; MOVREL-NEXT: {{ $}}
; MOVREL-NEXT: [[COPY:%[0-9]+]]:sgpr_512 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
- ; MOVREL-NEXT: $m0 = COPY [[COPY1]]
+ ; MOVREL-NEXT: [[S_LSHL_B32_:%[0-9]+]]:sreg_32 = S_LSHL_B32 [[COPY1]], 1, implicit-def $scc
+ ; MOVREL-NEXT: $m0 = COPY [[S_LSHL_B32_]]
; MOVREL-NEXT: [[S_MOVRELS_B64_:%[0-9]+]]:sreg_64 = S_MOVRELS_B64 [[COPY]].sub0_sub1, implicit $m0, implicit [[COPY]]
; MOVREL-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B64_]]
;
@@ -285,7 +290,8 @@ body: |
; GPRIDX-NEXT: {{ $}}
; GPRIDX-NEXT: [[COPY:%[0-9]+]]:sgpr_512 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
- ; GPRIDX-NEXT: $m0 = COPY [[COPY1]]
+ ; GPRIDX-NEXT: [[S_LSHL_B32_:%[0-9]+]]:sreg_32 = S_LSHL_B32 [[COPY1]], 1, implicit-def $scc
+ ; GPRIDX-NEXT: $m0 = COPY [[S_LSHL_B32_]]
; GPRIDX-NEXT: [[S_MOVRELS_B64_:%[0-9]+]]:sreg_64 = S_MOVRELS_B64 [[COPY]].sub0_sub1, implicit $m0, implicit [[COPY]]
; GPRIDX-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B64_]]
%0:sgpr(<8 x s64>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
@@ -308,7 +314,8 @@ body: |
; MOVREL-NEXT: {{ $}}
; MOVREL-NEXT: [[COPY:%[0-9]+]]:sgpr_1024 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19_sgpr20_sgpr21_sgpr22_sgpr23_sgpr24_sgpr25_sgpr26_sgpr27_sgpr28_sgpr29_sgpr30_sgpr31
; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr40
- ; MOVREL-NEXT: $m0 = COPY [[COPY1]]
+ ; MOVREL-NEXT: [[S_LSHL_B32_:%[0-9]+]]:sreg_32 = S_LSHL_B32 [[COPY1]], 1, implicit-def $scc
+ ; MOVREL-NEXT: $m0 = COPY [[S_LSHL_B32_]]
; MOVREL-NEXT: [[S_MOVRELS_B64_:%[0-9]+]]:sreg_64 = S_MOVRELS_B64 [[COPY]].sub0_sub1, implicit $m0, implicit [[COPY]]
; MOVREL-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B64_]]
;
@@ -317,7 +324,8 @@ body: |
; GPRIDX-NEXT: {{ $}}
; GPRIDX-NEXT: [[COPY:%[0-9]+]]:sgpr_1024 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19_sgpr20_sgpr21_sgpr22_sgpr23_sgpr24_sgpr25_sgpr26_sgpr27_sgpr28_sgpr29_sgpr30_sgpr31
; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr40
- ; GPRIDX-NEXT: $m0 = COPY [[COPY1]]
+ ; GPRIDX-NEXT: [[S_LSHL_B32_:%[0-9]+]]:sreg_32 = S_LSHL_B32 [[COPY1]], 1, implicit-def $scc
+ ; GPRIDX-NEXT: $m0 = COPY [[S_LSHL_B32_]]
; GPRIDX-NEXT: [[S_MOVRELS_B64_:%[0-9]+]]:sreg_64 = S_MOVRELS_B64 [[COPY]].sub0_sub1, implicit $m0, implicit [[COPY]]
; GPRIDX-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B64_]]
%0:sgpr(<16 x s64>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19_sgpr20_sgpr21_sgpr22_sgpr23_sgpr24_sgpr25_sgpr26_sgpr27_sgpr28_sgpr29_sgpr30_sgpr31
@@ -484,7 +492,8 @@ body: |
; MOVREL-NEXT: {{ $}}
; MOVREL-NEXT: [[COPY:%[0-9]+]]:sgpr_512 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
- ; MOVREL-NEXT: $m0 = COPY [[COPY1]]
+ ; MOVREL-NEXT: [[S_LSHL_B32_:%[0-9]+]]:sreg_32 = S_LSHL_B32 [[COPY1]], 1, implicit-def $scc
+ ; MOVREL-NEXT: $m0 = COPY [[S_LSHL_B32_]]
; MOVREL-NEXT: [[S_MOVRELS_B64_:%[0-9]+]]:sreg_64 = S_MOVRELS_B64 [[COPY]].sub2_sub3, implicit $m0, implicit [[COPY]]
; MOVREL-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B64_]]
;
@@ -493,7 +502,8 @@ body: |
; GPRIDX-NEXT: {{ $}}
; GPRIDX-NEXT: [[COPY:%[0-9]+]]:sgpr_512 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
- ; GPRIDX-NEXT: $m0 = COPY [[COPY1]]
+ ; GPRIDX-NEXT: [[S_LSHL_B32_:%[0-9]+]]:sreg_32 = S_LSHL_B32 [[COPY1]], 1, implicit-def $scc
+ ; GPRIDX-NEXT: $m0 = COPY [[S_LSHL_B32_]]
; GPRIDX-NEXT: [[S_MOVRELS_B64_:%[0-9]+]]:sreg_64 = S_MOVRELS_B64 [[COPY]].sub2_sub3, implicit $m0, implicit [[COPY]]
; GPRIDX-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B64_]]
%0:sgpr(<8 x s64>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
@@ -518,7 +528,8 @@ body: |
; MOVREL-NEXT: {{ $}}
; MOVREL-NEXT: [[COPY:%[0-9]+]]:sgpr_512 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
- ; MOVREL-NEXT: $m0 = COPY [[COPY1]]
+ ; MOVREL-NEXT: [[S_LSHL_B32_:%[0-9]+]]:sreg_32 = S_LSHL_B32 [[COPY1]], 1, implicit-def $scc
+ ; MOVREL-NEXT: $m0 = COPY [[S_LSHL_B32_]]
; MOVREL-NEXT: [[S_MOVRELS_B64_:%[0-9]+]]:sreg_64 = S_MOVRELS_B64 [[COPY]].sub4_sub5, implicit $m0, implicit [[COPY]]
; MOVREL-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B64_]]
;
@@ -527,7 +538,8 @@ body: |
; GPRIDX-NEXT: {{ $}}
; GPRIDX-NEXT: [[COPY:%[0-9]+]]:sgpr_512 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
- ; GPRIDX-NEXT: $m0 = COPY [[COPY1]]
+ ; GPRIDX-NEXT: [[S_LSHL_B32_:%[0-9]+]]:sreg_32 = S_LSHL_B32 [[COPY1]], 1, implicit-def $scc
+ ; GPRIDX-NEXT: $m0 = COPY [[S_LSHL_B32_]]
; GPRIDX-NEXT: [[S_MOVRELS_B64_:%[0-9]+]]:sreg_64 = S_MOVRELS_B64 [[COPY]].sub4_sub5, implicit $m0, implicit [[COPY]]
; GPRIDX-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B64_]]
%0:sgpr(<8 x s64>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
@@ -554,7 +566,8 @@ body: |
; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
; MOVREL-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 -1
; MOVREL-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY1]], [[S_MOV_B32_]], implicit-def dead $scc
- ; MOVREL-NEXT: $m0 = COPY [[S_ADD_U32_]]
+ ; MOVREL-NEXT: [[S_LSHL_B32_:%[0-9]+]]:sreg_32 = S_LSHL_B32 [[S_ADD_U32_]], 1, implicit-def $scc
+ ; MOVREL-NEXT: $m0 = COPY [[S_LSHL_B32_]]
; MOVREL-NEXT: [[S_MOVRELS_B64_:%[0-9]+]]:sreg_64 = S_MOVRELS_B64 [[COPY]].sub0_sub1, implicit $m0, implicit [[COPY]]
; MOVREL-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B64_]]
;
@@ -565,7 +578,8 @@ body: |
; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr8
; GPRIDX-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 -1
; GPRIDX-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY1]], [[S_MOV_B32_]], implicit-def dead $scc
- ; GPRIDX-NEXT: $m0 = COPY [[S_ADD_U32_]]
+ ; GPRIDX-NEXT: [[S_LSHL_B32_:%[0-9]+]]:sreg_32 = S_LSHL_B32 [[S_ADD_U32_]], 1, implicit-def $scc
+ ; GPRIDX-NEXT: $m0 = COPY [[S_LSHL_B32_]]
; GPRIDX-NEXT: [[S_MOVRELS_B64_:%[0-9]+]]:sreg_64 = S_MOVRELS_B64 [[COPY]].sub0_sub1, implicit $m0, implicit [[COPY]]
; GPRIDX-NEXT: S_ENDPGM 0, implicit [[S_MOVRELS_B64_]]
%0:sgpr(<8 x s64>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
diff --git a/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-insert-vector-elt.mir b/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-insert-vector-elt.mir
index ca13894aeb701..74f1ed45a7400 100644
--- a/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-insert-vector-elt.mir
+++ b/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-insert-vector-elt.mir
@@ -404,7 +404,8 @@ body: |
; MOVREL-NEXT: [[COPY:%[0-9]+]]:sgpr_128 = COPY $sgpr0_sgpr1_sgpr2_sgpr3
; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr4_sgpr5
; MOVREL-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr6
- ; MOVREL-NEXT: $m0 = COPY [[COPY2]]
+ ; MOVREL-NEXT: [[S_LSHL_B32_:%[0-9]+]]:sreg_32 = S_LSHL_B32 [[COPY2]], 1, implicit-def $scc
+ ; MOVREL-NEXT: $m0 = COPY [[S_LSHL_B32_]]
; MOVREL-NEXT: [[S_INDIRECT_REG_WRITE_MOVREL_B64_V2_:%[0-9]+]]:sgpr_128 = S_INDIRECT_REG_WRITE_MOVREL_B64_V2 [[COPY]], [[COPY1]], 4, implicit $m0
; MOVREL-NEXT: S_ENDPGM 0, implicit [[S_INDIRECT_REG_WRITE_MOVREL_B64_V2_]]
;
@@ -414,7 +415,8 @@ body: |
; GPRIDX-NEXT: [[COPY:%[0-9]+]]:sgpr_128 = COPY $sgpr0_sgpr1_sgpr2_sgpr3
; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr4_sgpr5
; GPRIDX-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr6
- ; GPRIDX-NEXT: $m0 = COPY [[COPY2]]
+ ; GPRIDX-NEXT: [[S_LSHL_B32_:%[0-9]+]]:sreg_32 = S_LSHL_B32 [[COPY2]], 1, implicit-def $scc
+ ; GPRIDX-NEXT: $m0 = COPY [[S_LSHL_B32_]]
; GPRIDX-NEXT: [[S_INDIRECT_REG_WRITE_MOVREL_B64_V2_:%[0-9]+]]:sgpr_128 = S_INDIRECT_REG_WRITE_MOVREL_B64_V2 [[COPY]], [[COPY1]], 4, implicit $m0
; GPRIDX-NEXT: S_ENDPGM 0, implicit [[S_INDIRECT_REG_WRITE_MOVREL_B64_V2_]]
%0:sgpr(<2 x s64>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3
@@ -439,7 +441,8 @@ body: |
; MOVREL-NEXT: [[COPY:%[0-9]+]]:sgpr_256 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7
; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr8_sgpr9
; MOVREL-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr10
- ; MOVREL-NEXT: $m0 = COPY [[COPY2]]
+ ; MOVREL-NEXT: [[S_LSHL_B32_:%[0-9]+]]:sreg_32 = S_LSHL_B32 [[COPY2]], 1, implicit-def $scc
+ ; MOVREL-NEXT: $m0 = COPY [[S_LSHL_B32_]]
; MOVREL-NEXT: [[S_INDIRECT_REG_WRITE_MOVREL_B64_V4_:%[0-9]+]]:sgpr_256 = S_INDIRECT_REG_WRITE_MOVREL_B64_V4 [[COPY]], [[COPY1]], 4, implicit $m0
; MOVREL-NEXT: S_ENDPGM 0, implicit [[S_INDIRECT_REG_WRITE_MOVREL_B64_V4_]]
;
@@ -449,7 +452,8 @@ body: |
; GPRIDX-NEXT: [[COPY:%[0-9]+]]:sgpr_256 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7
; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr8_sgpr9
; GPRIDX-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr10
- ; GPRIDX-NEXT: $m0 = COPY [[COPY2]]
+ ; GPRIDX-NEXT: [[S_LSHL_B32_:%[0-9]+]]:sreg_32 = S_LSHL_B32 [[COPY2]], 1, implicit-def $scc
+ ; GPRIDX-NEXT: $m0 = COPY [[S_LSHL_B32_]]
; GPRIDX-NEXT: [[S_INDIRECT_REG_WRITE_MOVREL_B64_V4_:%[0-9]+]]:sgpr_256 = S_INDIRECT_REG_WRITE_MOVREL_B64_V4 [[COPY]], [[COPY1]], 4, implicit $m0
; GPRIDX-NEXT: S_ENDPGM 0, implicit [[S_INDIRECT_REG_WRITE_MOVREL_B64_V4_]]
%0:sgpr(<4 x s64>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7
@@ -474,7 +478,8 @@ body: |
; MOVREL-NEXT: [[COPY:%[0-9]+]]:sgpr_512 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr16_sgpr17
; MOVREL-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr18
- ; MOVREL-NEXT: $m0 = COPY [[COPY2]]
+ ; MOVREL-NEXT: [[S_LSHL_B32_:%[0-9]+]]:sreg_32 = S_LSHL_B32 [[COPY2]], 1, implicit-def $scc
+ ; MOVREL-NEXT: $m0 = COPY [[S_LSHL_B32_]]
; MOVREL-NEXT: [[S_INDIRECT_REG_WRITE_MOVREL_B64_V8_:%[0-9]+]]:sgpr_512 = S_INDIRECT_REG_WRITE_MOVREL_B64_V8 [[COPY]], [[COPY1]], 4, implicit $m0
; MOVREL-NEXT: S_ENDPGM 0, implicit [[S_INDIRECT_REG_WRITE_MOVREL_B64_V8_]]
;
@@ -484,7 +489,8 @@ body: |
; GPRIDX-NEXT: [[COPY:%[0-9]+]]:sgpr_512 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr16_sgpr17
; GPRIDX-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr18
- ; GPRIDX-NEXT: $m0 = COPY [[COPY2]]
+ ; GPRIDX-NEXT: [[S_LSHL_B32_:%[0-9]+]]:sreg_32 = S_LSHL_B32 [[COPY2]], 1, implicit-def $scc
+ ; GPRIDX-NEXT: $m0 = COPY [[S_LSHL_B32_]]
; GPRIDX-NEXT: [[S_INDIRECT_REG_WRITE_MOVREL_B64_V8_:%[0-9]+]]:sgpr_512 = S_INDIRECT_REG_WRITE_MOVREL_B64_V8 [[COPY]], [[COPY1]], 4, implicit $m0
; GPRIDX-NEXT: S_ENDPGM 0, implicit [[S_INDIRECT_REG_WRITE_MOVREL_B64_V8_]]
%0:sgpr(<8 x s64>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
@@ -509,7 +515,8 @@ body: |
; MOVREL-NEXT: [[COPY:%[0-9]+]]:sgpr_1024 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19_sgpr20_sgpr21_sgpr22_sgpr23_sgpr24_sgpr25_sgpr26_sgpr27_sgpr28_sgpr29_sgpr30_sgpr31
; MOVREL-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr40_sgpr41
; MOVREL-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr42
- ; MOVREL-NEXT: $m0 = COPY [[COPY2]]
+ ; MOVREL-NEXT: [[S_LSHL_B32_:%[0-9]+]]:sreg_32 = S_LSHL_B32 [[COPY2]], 1, implicit-def $scc
+ ; MOVREL-NEXT: $m0 = COPY [[S_LSHL_B32_]]
; MOVREL-NEXT: [[S_INDIRECT_REG_WRITE_MOVREL_B64_V16_:%[0-9]+]]:sgpr_1024 = S_INDIRECT_REG_WRITE_MOVREL_B64_V16 [[COPY]], [[COPY1]], 4, implicit $m0
; MOVREL-NEXT: S_ENDPGM 0, implicit [[S_INDIRECT_REG_WRITE_MOVREL_B64_V16_]]
;
@@ -519,7 +526,8 @@ body: |
; GPRIDX-NEXT: [[COPY:%[0-9]+]]:sgpr_1024 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19_sgpr20_sgpr21_sgpr22_sgpr23_sgpr24_sgpr25_sgpr26_sgpr27_sgpr28_sgpr29_sgpr30_sgpr31
; GPRIDX-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr40_sgpr41
; GPRIDX-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr42
- ; GPRIDX-NEXT: $m0 = COPY [[COPY2]]
+ ; GPRIDX-NEXT: [[S_LSHL_B32_:%[0-9]+]]:sreg_32 = S_LSHL_B32 [[COPY2]], 1, implicit-def $scc
+ ; GPRIDX-NEXT: $m0 = COPY [[S_LSHL_B32_]]
; GPRIDX-NEXT: [[S_INDIRECT_REG_WRITE_MOVREL_B64_V16_:%[0-9]+]]:sgpr_1024 = S_INDIRECT_REG_WRITE_MOVREL_B64_V16 [[COPY]], [[COPY1]], 4, implicit $m0
; GPRIDX-NEXT: S_ENDPGM 0, implicit [[S_INDIRECT_REG_WRITE_MOVREL_B64_V16_]]
%0:sgpr(<16 x s64>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19_sgpr20_sgpr21_sgpr22_sgpr23_sgpr24_sgpr25_sgpr26_sgpr27_sgpr28_sgpr29_sgpr30_sgpr31
More information about the llvm-commits
mailing list