[llvm] [AMDGPU] Legalize 64bit elements for BUILD_VECTOR (PR #145052)
Janek van Oirschot via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 1 05:52:52 PDT 2026
https://github.com/JanekvO updated https://github.com/llvm/llvm-project/pull/145052
>From aadb9e21abbb59f87f064e6ba520702f15d08b84 Mon Sep 17 00:00:00 2001
From: Janek van Oirschot <Janek.vanOirschot at amd.com>
Date: Fri, 20 Jun 2025 03:24:29 -0700
Subject: [PATCH] [AMDGPU] Legalize 64bit elements for BUILD_VECTOR on gfx942
---
llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp | 9 +-
llvm/lib/Target/AMDGPU/SIISelLowering.cpp | 156 +-
llvm/lib/Target/AMDGPU/SIISelLowering.h | 1 +
llvm/test/CodeGen/AMDGPU/bf16.ll | 1288 +-
.../AMDGPU/buffer-atomic-fadd.f32-no-rtn.ll | 239 +-
.../AMDGPU/buffer-atomic-fadd.f32-rtn.ll | 251 +-
.../CodeGen/AMDGPU/buffer-atomic-fadd.f64.ll | 614 +-
.../AMDGPU/buffer-atomic-fadd.v2f16-no-rtn.ll | 239 +-
.../AMDGPU/buffer-atomic-fadd.v2f16-rtn.ll | 251 +-
.../AMDGPU/buffer-fat-pointers-memcpy.ll | 44 +-
llvm/test/CodeGen/AMDGPU/coexec-scheduler.ll | 104 +-
llvm/test/CodeGen/AMDGPU/ds_write2.ll | 9 +-
.../test/CodeGen/AMDGPU/fcanonicalize.bf16.ll | 7 +-
llvm/test/CodeGen/AMDGPU/flat-scratch.ll | 42 +-
llvm/test/CodeGen/AMDGPU/fmaximum3.ll | 2 +-
llvm/test/CodeGen/AMDGPU/fminimum3.ll | 2 +-
llvm/test/CodeGen/AMDGPU/global-load-xcnt.ll | 103 +-
.../AMDGPU/inline-asm-vgpr-sgpr-copy.ll | 13 +-
.../issue153808-extract-subvector-legalize.ll | 18 +-
.../legalize-amdgcn.raw.ptr.buffer.load.ll | 340 +-
.../AMDGPU/llvm.amdgcn.make.buffer.rsrc.ll | 88 +-
.../CodeGen/AMDGPU/llvm.amdgcn.mfma.gfx90a.ll | 416 +-
llvm/test/CodeGen/AMDGPU/llvm.amdgcn.mfma.ll | 170 +-
.../llvm.amdgcn.wmma.imm.gfx1251.w32.ll | 36 +-
llvm/test/CodeGen/AMDGPU/llvm.maximum.f64.ll | 639 +-
llvm/test/CodeGen/AMDGPU/llvm.minimum.f64.ll | 639 +-
llvm/test/CodeGen/AMDGPU/load-constant-i1.ll | 1119 +-
llvm/test/CodeGen/AMDGPU/load-constant-i32.ll | 198 +-
...uffer-fat-pointers-nontemporal-metadata.ll | 8 +-
.../CodeGen/AMDGPU/masked-load-vectortypes.ll | 58 +-
llvm/test/CodeGen/AMDGPU/maximumnum.ll | 102 +-
.../AMDGPU/memory-legalizer-buffer-atomics.ll | 60 +-
.../AMDGPU/memset-param-combinations.ll | 44 +-
llvm/test/CodeGen/AMDGPU/memset-pattern.ll | 3 +-
llvm/test/CodeGen/AMDGPU/mfma-loop.ll | 59 +-
llvm/test/CodeGen/AMDGPU/minimumnum.ll | 102 +-
llvm/test/CodeGen/AMDGPU/mul.ll | 38 +-
.../CodeGen/AMDGPU/no-fold-accvgpr-mov.ll | 34 +-
llvm/test/CodeGen/AMDGPU/packed-fp32.ll | 49 +-
llvm/test/CodeGen/AMDGPU/packed-fp64.ll | 528 +-
llvm/test/CodeGen/AMDGPU/packed-u64.ll | 308 +-
llvm/test/CodeGen/AMDGPU/preload-kernargs.ll | 10 +-
...-alloca-vector-dynamic-idx-bitcasts-llc.ll | 47 +-
.../AMDGPU/ptradd-sdag-optimizations.ll | 3 +-
.../AMDGPU/regalloc-spill-wmma-scale.ll | 6 +-
...ite-vgpr-mfma-to-agpr-reserved-wwm-vgpr.ll | 116 +-
...write-vgpr-mfma-to-agpr-spill-joint-dom.ll | 17 +-
.../AMDGPU/rewrite-vgpr-mfma-to-agpr.ll | 82 +-
.../select-nsz-known-values-to-fmin-fmax.ll | 41 +-
llvm/test/CodeGen/AMDGPU/shl.v2i64.ll | 799 +-
.../AMDGPU/shufflevector.v2i64.v2i64.ll | 210 +-
.../AMDGPU/shufflevector.v2i64.v3i64.ll | 697 +-
.../AMDGPU/shufflevector.v2i64.v4i64.ll | 1237 +-
.../AMDGPU/shufflevector.v2i64.v8i64.ll | 4363 +++---
.../CodeGen/AMDGPU/shufflevector.v2p0.v2p0.ll | 210 +-
.../CodeGen/AMDGPU/shufflevector.v2p0.v3p0.ll | 697 +-
.../CodeGen/AMDGPU/shufflevector.v2p0.v4p0.ll | 1237 +-
.../AMDGPU/shufflevector.v3i64.v2i64.ll | 1034 +-
.../AMDGPU/shufflevector.v3i64.v3i64.ll | 3313 +++--
.../AMDGPU/shufflevector.v3i64.v4i64.ll | 6091 +++++---
.../CodeGen/AMDGPU/shufflevector.v3p0.v2p0.ll | 1034 +-
.../CodeGen/AMDGPU/shufflevector.v3p0.v3p0.ll | 3313 +++--
.../CodeGen/AMDGPU/shufflevector.v3p0.v4p0.ll | 6091 +++++---
.../AMDGPU/shufflevector.v4i64.v2i64.ll | 2213 ++-
.../AMDGPU/shufflevector.v4i64.v3i64.ll | 7709 ++++++----
.../AMDGPU/shufflevector.v4i64.v4i64.ll | 11910 ++++++++++------
.../CodeGen/AMDGPU/shufflevector.v4p0.v2p0.ll | 2213 ++-
.../CodeGen/AMDGPU/shufflevector.v4p0.v3p0.ll | 7709 ++++++----
.../CodeGen/AMDGPU/shufflevector.v4p0.v4p0.ll | 11910 ++++++++++------
llvm/test/CodeGen/AMDGPU/smfmac_no_agprs.ll | 21 +-
.../AMDGPU/swp-amdgpu-pipeline-minimal.ll | 45 +-
llvm/test/CodeGen/AMDGPU/uint_to_fp.f64.ll | 32 +-
.../test/CodeGen/AMDGPU/vni8-across-blocks.ll | 6 +-
73 files changed, 51846 insertions(+), 31000 deletions(-)
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp b/llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp
index ff58f560314ab..e3b1503fbb5b6 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp
@@ -508,6 +508,8 @@ void AMDGPUDAGToDAGISel::SelectBuildVector(SDNode *N, unsigned RegClassID) {
EVT EltVT = VT.getVectorElementType();
SDLoc DL(N);
SDValue RegClass = CurDAG->getTargetConstant(RegClassID, DL, MVT::i32);
+ unsigned NumRegs = EltVT.getSizeInBits() / 32;
+ bool IsGCN = TM.getTargetTriple().isAMDGCN();
if (NumVectorElts == 1) {
CurDAG->SelectNodeTo(N, AMDGPU::COPY_TO_REGCLASS, EltVT, N->getOperand(0),
@@ -515,7 +517,6 @@ void AMDGPUDAGToDAGISel::SelectBuildVector(SDNode *N, unsigned RegClassID) {
return;
}
- bool IsGCN = CurDAG->getSubtarget().getTargetTriple().isAMDGCN();
if (IsGCN && Subtarget->has64BitLiterals() && VT.getSizeInBits() == 64 &&
CurDAG->isConstantValueOfAnyType(SDValue(N, 0))) {
uint64_t C = 0;
@@ -544,8 +545,10 @@ void AMDGPUDAGToDAGISel::SelectBuildVector(SDNode *N, unsigned RegClassID) {
}
}
- assert(NumVectorElts <= 32 && "Vectors with more than 32 elements not "
- "supported yet");
+ assert(NumVectorElts <= 32 &&
+ "Vectors with more than 32 elements are not supported yet");
+ assert((IsGCN || (!IsGCN && NumRegs == 1)) &&
+ "R600 does not support 64-bit reg_seq elements");
// 32 = Max Num Vector Elements
// 2 = 2 REG_SEQUENCE operands per element (value, subreg index)
// 1 = Vector Register Class
diff --git a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
index be0424dc379b4..fd6502a918f09 100644
--- a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
+++ b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
@@ -390,9 +390,10 @@ SITargetLowering::SITargetLowering(const TargetMachine &TM,
// Most operations are naturally 32-bit vector operations. We only support
// load and store of i64 vectors, so promote v2i64 vector operations to v4i32.
for (MVT Vec64 : {MVT::v2i64, MVT::v2f64}) {
- setOperationAction(ISD::BUILD_VECTOR, Vec64, Promote);
- AddPromotedToType(ISD::BUILD_VECTOR, Vec64, MVT::v4i32);
-
+ if (!STI.hasVMovB64Inst()) {
+ setOperationAction(ISD::BUILD_VECTOR, Vec64, Promote);
+ AddPromotedToType(ISD::BUILD_VECTOR, Vec64, MVT::v4i32);
+ }
setOperationAction(ISD::EXTRACT_VECTOR_ELT, Vec64, Promote);
AddPromotedToType(ISD::EXTRACT_VECTOR_ELT, Vec64, MVT::v4i32);
@@ -404,9 +405,10 @@ SITargetLowering::SITargetLowering(const TargetMachine &TM,
}
for (MVT Vec64 : {MVT::v3i64, MVT::v3f64}) {
- setOperationAction(ISD::BUILD_VECTOR, Vec64, Promote);
- AddPromotedToType(ISD::BUILD_VECTOR, Vec64, MVT::v6i32);
-
+ if (!STI.hasVMovB64Inst()) {
+ setOperationAction(ISD::BUILD_VECTOR, Vec64, Promote);
+ AddPromotedToType(ISD::BUILD_VECTOR, Vec64, MVT::v6i32);
+ }
setOperationAction(ISD::EXTRACT_VECTOR_ELT, Vec64, Promote);
AddPromotedToType(ISD::EXTRACT_VECTOR_ELT, Vec64, MVT::v6i32);
@@ -418,9 +420,10 @@ SITargetLowering::SITargetLowering(const TargetMachine &TM,
}
for (MVT Vec64 : {MVT::v4i64, MVT::v4f64}) {
- setOperationAction(ISD::BUILD_VECTOR, Vec64, Promote);
- AddPromotedToType(ISD::BUILD_VECTOR, Vec64, MVT::v8i32);
-
+ if (!STI.hasVMovB64Inst()) {
+ setOperationAction(ISD::BUILD_VECTOR, Vec64, Promote);
+ AddPromotedToType(ISD::BUILD_VECTOR, Vec64, MVT::v8i32);
+ }
setOperationAction(ISD::EXTRACT_VECTOR_ELT, Vec64, Promote);
AddPromotedToType(ISD::EXTRACT_VECTOR_ELT, Vec64, MVT::v8i32);
@@ -432,9 +435,10 @@ SITargetLowering::SITargetLowering(const TargetMachine &TM,
}
for (MVT Vec64 : {MVT::v8i64, MVT::v8f64}) {
- setOperationAction(ISD::BUILD_VECTOR, Vec64, Promote);
- AddPromotedToType(ISD::BUILD_VECTOR, Vec64, MVT::v16i32);
-
+ if (!STI.hasVMovB64Inst()) {
+ setOperationAction(ISD::BUILD_VECTOR, Vec64, Promote);
+ AddPromotedToType(ISD::BUILD_VECTOR, Vec64, MVT::v16i32);
+ }
setOperationAction(ISD::EXTRACT_VECTOR_ELT, Vec64, Promote);
AddPromotedToType(ISD::EXTRACT_VECTOR_ELT, Vec64, MVT::v16i32);
@@ -446,9 +450,10 @@ SITargetLowering::SITargetLowering(const TargetMachine &TM,
}
for (MVT Vec64 : {MVT::v16i64, MVT::v16f64}) {
- setOperationAction(ISD::BUILD_VECTOR, Vec64, Promote);
- AddPromotedToType(ISD::BUILD_VECTOR, Vec64, MVT::v32i32);
-
+ if (!STI.hasVMovB64Inst()) {
+ setOperationAction(ISD::BUILD_VECTOR, Vec64, Promote);
+ AddPromotedToType(ISD::BUILD_VECTOR, Vec64, MVT::v32i32);
+ }
setOperationAction(ISD::EXTRACT_VECTOR_ELT, Vec64, Promote);
AddPromotedToType(ISD::EXTRACT_VECTOR_ELT, Vec64, MVT::v32i32);
@@ -1141,7 +1146,10 @@ SITargetLowering::SITargetLowering(const TargetMachine &TM,
setTargetDAGCombine({ISD::ADD,
ISD::PTRADD,
+ ISD::BUILD_VECTOR,
+ ISD::UADDO_CARRY,
ISD::SUB,
+ ISD::USUBO_CARRY,
ISD::MUL,
ISD::FADD,
ISD::FSUB,
@@ -17090,6 +17098,18 @@ bool SITargetLowering::shouldExpandVectorDynExt(SDNode *N) const {
EltSize, NumElem, Idx->isDivergent(), getSubtarget());
}
+static unsigned getMappedVectorIndex(unsigned Idx, EVT From, EVT To) {
+ assert(From.isVector() && To.isVector() &&
+ "Expected From and To types to be vector types.");
+ assert(From.getSizeInBits() == To.getSizeInBits() &&
+ "Expected From and To vector types require to have the same size.");
+
+ unsigned FromNumElts = From.getVectorNumElements();
+ unsigned ToNumElts = To.getVectorNumElements();
+
+ return (Idx * ToNumElts) / FromNumElts;
+}
+
SDValue
SITargetLowering::performExtractVectorEltCombine(SDNode *N,
DAGCombinerInfo &DCI) const {
@@ -17173,6 +17193,28 @@ SITargetLowering::performExtractVectorEltCombine(SDNode *N,
}
}
+ // if PeekThroughBitcast(Vec)[MapIdx(CIdx)] is a undef/poison &&
+ // VecEltSize < PeekThroughEltSize, then
+ // EXTRACT_VECTOR_ELT(bitcast(build_vector(..., undef/poison, ...)), CIdx) =>
+ // undef/poison (inherits the undef or poison from the element)
+ auto *IndexC = dyn_cast<ConstantSDNode>(N->getOperand(1));
+ SDValue PeekThroughVec = peekThroughBitcasts(Vec);
+ EVT PeekThroughVecVT = PeekThroughVec.getValueType();
+ if (IndexC && PeekThroughVec.getOpcode() == ISD::BUILD_VECTOR &&
+ PeekThroughVecVT.isFixedLengthVector()) {
+ EVT PeekThroughVecEltVT = PeekThroughVecVT.getVectorElementType();
+ // Small elt size vectors to big elt size vectors are the cases covered for
+ // now (e.g., v4i32 bitcast(v2i64)) which may be conservative.
+ if (VecEltSize < PeekThroughVecEltVT.getSizeInBits()) {
+ unsigned IndexVal = IndexC->getZExtValue();
+ unsigned MappedIndexVal =
+ getMappedVectorIndex(IndexVal, VecVT, PeekThroughVecVT);
+ SDValue PeekThroughElt = PeekThroughVec.getOperand(MappedIndexVal);
+ if (PeekThroughElt.isUndef())
+ return DAG.getNode(PeekThroughElt.getOpcode(), SDLoc(), VecEltVT);
+ }
+ }
+
// EXTRACT_VECTOR_ELT (<n x e>, var-idx) => n x select (e, const-idx)
if (shouldExpandVectorDynExt(N)) {
SDLoc SL(N);
@@ -19245,6 +19287,88 @@ SDValue SITargetLowering::performSelectCombine(SDNode *N,
SelectLHS, SelectRHS);
}
+SDValue
+SITargetLowering::performBuildVectorCombine(SDNode *N,
+ DAGCombinerInfo &DCI) const {
+ // TODO: Perform for all targets instead of just v_mov_b64 enabled ones,
+ // lower could still enable s_mov_b64 which is supported on all targets.
+ const GCNSubtarget *ST = getSubtarget();
+ if (DCI.Level < AfterLegalizeDAG || !ST->hasVMovB64Inst())
+ return SDValue();
+
+ SelectionDAG &DAG = DCI.DAG;
+ SDLoc SL(N);
+
+ EVT VT = N->getValueType(0);
+ EVT EltVT = VT.getVectorElementType();
+ unsigned SizeBits = VT.getSizeInBits();
+ unsigned EltSize = EltVT.getSizeInBits();
+
+ // Skip if:
+ // - Value type isn't multiple of 64 bit (e.g., v3i32), or
+ // - Element type has already been combined into 64b elements
+ if ((SizeBits % 64) != 0 || EltSize == 64)
+ return SDValue();
+
+ SmallVector<APInt, 8> SrcBits;
+ BitVector SrcUndef(N->getNumOperands(), false);
+ for (SDValue Operand : N->ops()) {
+ // Build_vector with constants only.
+ ConstantSDNode *C = dyn_cast<ConstantSDNode>(Operand);
+ ConstantFPSDNode *FPC = dyn_cast<ConstantFPSDNode>(Operand);
+ BuildVectorSDNode *BV =
+ dyn_cast<BuildVectorSDNode>(peekThroughBitcasts(Operand));
+
+ if (!C && !FPC && !BV && !Operand->isUndef())
+ return SDValue();
+
+ APInt Elt(EltSize, 0);
+ if (BV) {
+ BitVector Undef;
+ SmallVector<APInt> Elts;
+ if (!BV->getConstantRawBits(/*IsLittleEndian=*/true, EltSize, Elts,
+ Undef))
+ return SDValue();
+ assert(Elts.size() == 1 &&
+ "BuildVector constant value retrieval expected 1 element");
+ Elt = Elts[0];
+ } else if (C || FPC) {
+ Elt = C ? C->getAPIntValue().trunc(EltSize)
+ : FPC->getValueAPF().bitcastToAPInt();
+ }
+ SrcBits.push_back(Elt);
+ }
+
+ BitVector UndefElts;
+ SmallVector<APInt, 4> RawBits;
+ BuildVectorSDNode::recastRawBits(/*IsLittleEndian=*/true,
+ /*DstEltSizeInBits=*/64, RawBits, SrcBits,
+ UndefElts, SrcUndef);
+
+ for (const APInt &Bits : RawBits)
+ if (!isUInt<32>(Bits.getZExtValue()))
+ return SDValue();
+
+ // Avoid emitting build_vector with 1 element and directly emit value.
+ if (RawBits.size() == 1) {
+ SDValue Val = DAG.getConstant(RawBits[0], SL, MVT::i64);
+ return DAG.getBitcast(VT, Val);
+ }
+
+ // Construct and return build_vector with 64b elements.
+ if (!RawBits.empty()) {
+ SmallVector<SDValue, 8> VectorConsts(RawBits.size());
+ for (unsigned i = 0; i < RawBits.size(); ++i)
+ VectorConsts[i] = DAG.getConstant(RawBits[i], SL, MVT::i64);
+ unsigned NewNumElts = SizeBits / 64;
+ LLVMContext &Ctx = *DAG.getContext();
+ EVT NewVT = EVT::getVectorVT(Ctx, MVT::i64, NewNumElts);
+ SDValue BV = DAG.getBuildVector(NewVT, SL, VectorConsts);
+ return DAG.getBitcast(VT, BV);
+ }
+ return SDValue();
+}
+
SDValue SITargetLowering::PerformDAGCombine(SDNode *N,
DAGCombinerInfo &DCI) const {
switch (N->getOpcode()) {
@@ -19344,6 +19468,8 @@ SDValue SITargetLowering::PerformDAGCombine(SDNode *N,
return performFCanonicalizeCombine(N, DCI);
case AMDGPUISD::RCP:
return performRcpCombine(N, DCI);
+ case ISD::BUILD_VECTOR:
+ return performBuildVectorCombine(N, DCI);
case ISD::FLDEXP:
case AMDGPUISD::FRACT:
case AMDGPUISD::RSQ:
diff --git a/llvm/lib/Target/AMDGPU/SIISelLowering.h b/llvm/lib/Target/AMDGPU/SIISelLowering.h
index 7de2c529028c3..36cc91a4f04b4 100644
--- a/llvm/lib/Target/AMDGPU/SIISelLowering.h
+++ b/llvm/lib/Target/AMDGPU/SIISelLowering.h
@@ -267,6 +267,7 @@ class SITargetLowering final : public AMDGPUTargetLowering {
SDValue performCvtF32UByteNCombine(SDNode *N, DAGCombinerInfo &DCI) const;
SDValue performClampCombine(SDNode *N, DAGCombinerInfo &DCI) const;
SDValue performRcpCombine(SDNode *N, DAGCombinerInfo &DCI) const;
+ SDValue performBuildVectorCombine(SDNode *N, DAGCombinerInfo &DCI) const;
bool isLegalMUBUFAddressingMode(const AddrMode &AM) const;
diff --git a/llvm/test/CodeGen/AMDGPU/bf16.ll b/llvm/test/CodeGen/AMDGPU/bf16.ll
index 4d9cfe5acd1f6..e366eb0352a6b 100644
--- a/llvm/test/CodeGen/AMDGPU/bf16.ll
+++ b/llvm/test/CodeGen/AMDGPU/bf16.ll
@@ -6436,50 +6436,95 @@ define <32 x float> @global_extload_v32bf16_to_v32f32(ptr addrspace(1) %ptr) #0
; GFX8-NEXT: v_and_b32_e32 v31, 0xffff0000, v31
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
-; GFX9-LABEL: global_extload_v32bf16_to_v32f32:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: global_load_dwordx4 v[4:7], v[0:1], off
-; GFX9-NEXT: global_load_dwordx4 v[12:15], v[0:1], off offset:16
-; GFX9-NEXT: global_load_dwordx4 v[20:23], v[0:1], off offset:32
-; GFX9-NEXT: global_load_dwordx4 v[28:31], v[0:1], off offset:48
-; GFX9-NEXT: s_waitcnt vmcnt(3)
-; GFX9-NEXT: v_lshlrev_b32_e32 v0, 16, v4
-; GFX9-NEXT: v_and_b32_e32 v1, 0xffff0000, v4
-; GFX9-NEXT: v_lshlrev_b32_e32 v2, 16, v5
-; GFX9-NEXT: v_and_b32_e32 v3, 0xffff0000, v5
-; GFX9-NEXT: v_lshlrev_b32_e32 v4, 16, v6
-; GFX9-NEXT: v_and_b32_e32 v5, 0xffff0000, v6
-; GFX9-NEXT: v_lshlrev_b32_e32 v6, 16, v7
-; GFX9-NEXT: v_and_b32_e32 v7, 0xffff0000, v7
-; GFX9-NEXT: s_waitcnt vmcnt(2)
-; GFX9-NEXT: v_lshlrev_b32_e32 v8, 16, v12
-; GFX9-NEXT: v_and_b32_e32 v9, 0xffff0000, v12
-; GFX9-NEXT: v_lshlrev_b32_e32 v10, 16, v13
-; GFX9-NEXT: v_and_b32_e32 v11, 0xffff0000, v13
-; GFX9-NEXT: v_lshlrev_b32_e32 v12, 16, v14
-; GFX9-NEXT: v_and_b32_e32 v13, 0xffff0000, v14
-; GFX9-NEXT: v_lshlrev_b32_e32 v14, 16, v15
-; GFX9-NEXT: v_and_b32_e32 v15, 0xffff0000, v15
-; GFX9-NEXT: s_waitcnt vmcnt(1)
-; GFX9-NEXT: v_lshlrev_b32_e32 v16, 16, v20
-; GFX9-NEXT: v_and_b32_e32 v17, 0xffff0000, v20
-; GFX9-NEXT: v_lshlrev_b32_e32 v18, 16, v21
-; GFX9-NEXT: v_and_b32_e32 v19, 0xffff0000, v21
-; GFX9-NEXT: v_lshlrev_b32_e32 v20, 16, v22
-; GFX9-NEXT: v_and_b32_e32 v21, 0xffff0000, v22
-; GFX9-NEXT: v_lshlrev_b32_e32 v22, 16, v23
-; GFX9-NEXT: v_and_b32_e32 v23, 0xffff0000, v23
-; GFX9-NEXT: s_waitcnt vmcnt(0)
-; GFX9-NEXT: v_lshlrev_b32_e32 v24, 16, v28
-; GFX9-NEXT: v_and_b32_e32 v25, 0xffff0000, v28
-; GFX9-NEXT: v_lshlrev_b32_e32 v26, 16, v29
-; GFX9-NEXT: v_and_b32_e32 v27, 0xffff0000, v29
-; GFX9-NEXT: v_lshlrev_b32_e32 v28, 16, v30
-; GFX9-NEXT: v_and_b32_e32 v29, 0xffff0000, v30
-; GFX9-NEXT: v_lshlrev_b32_e32 v30, 16, v31
-; GFX9-NEXT: v_and_b32_e32 v31, 0xffff0000, v31
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: global_extload_v32bf16_to_v32f32:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: global_load_dwordx4 v[4:7], v[0:1], off
+; GFX900-NEXT: global_load_dwordx4 v[12:15], v[0:1], off offset:16
+; GFX900-NEXT: global_load_dwordx4 v[20:23], v[0:1], off offset:32
+; GFX900-NEXT: global_load_dwordx4 v[28:31], v[0:1], off offset:48
+; GFX900-NEXT: s_waitcnt vmcnt(3)
+; GFX900-NEXT: v_lshlrev_b32_e32 v0, 16, v4
+; GFX900-NEXT: v_and_b32_e32 v1, 0xffff0000, v4
+; GFX900-NEXT: v_lshlrev_b32_e32 v2, 16, v5
+; GFX900-NEXT: v_and_b32_e32 v3, 0xffff0000, v5
+; GFX900-NEXT: v_lshlrev_b32_e32 v4, 16, v6
+; GFX900-NEXT: v_and_b32_e32 v5, 0xffff0000, v6
+; GFX900-NEXT: v_lshlrev_b32_e32 v6, 16, v7
+; GFX900-NEXT: v_and_b32_e32 v7, 0xffff0000, v7
+; GFX900-NEXT: s_waitcnt vmcnt(2)
+; GFX900-NEXT: v_lshlrev_b32_e32 v8, 16, v12
+; GFX900-NEXT: v_and_b32_e32 v9, 0xffff0000, v12
+; GFX900-NEXT: v_lshlrev_b32_e32 v10, 16, v13
+; GFX900-NEXT: v_and_b32_e32 v11, 0xffff0000, v13
+; GFX900-NEXT: v_lshlrev_b32_e32 v12, 16, v14
+; GFX900-NEXT: v_and_b32_e32 v13, 0xffff0000, v14
+; GFX900-NEXT: v_lshlrev_b32_e32 v14, 16, v15
+; GFX900-NEXT: v_and_b32_e32 v15, 0xffff0000, v15
+; GFX900-NEXT: s_waitcnt vmcnt(1)
+; GFX900-NEXT: v_lshlrev_b32_e32 v16, 16, v20
+; GFX900-NEXT: v_and_b32_e32 v17, 0xffff0000, v20
+; GFX900-NEXT: v_lshlrev_b32_e32 v18, 16, v21
+; GFX900-NEXT: v_and_b32_e32 v19, 0xffff0000, v21
+; GFX900-NEXT: v_lshlrev_b32_e32 v20, 16, v22
+; GFX900-NEXT: v_and_b32_e32 v21, 0xffff0000, v22
+; GFX900-NEXT: v_lshlrev_b32_e32 v22, 16, v23
+; GFX900-NEXT: v_and_b32_e32 v23, 0xffff0000, v23
+; GFX900-NEXT: s_waitcnt vmcnt(0)
+; GFX900-NEXT: v_lshlrev_b32_e32 v24, 16, v28
+; GFX900-NEXT: v_and_b32_e32 v25, 0xffff0000, v28
+; GFX900-NEXT: v_lshlrev_b32_e32 v26, 16, v29
+; GFX900-NEXT: v_and_b32_e32 v27, 0xffff0000, v29
+; GFX900-NEXT: v_lshlrev_b32_e32 v28, 16, v30
+; GFX900-NEXT: v_and_b32_e32 v29, 0xffff0000, v30
+; GFX900-NEXT: v_lshlrev_b32_e32 v30, 16, v31
+; GFX900-NEXT: v_and_b32_e32 v31, 0xffff0000, v31
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX950-LABEL: global_extload_v32bf16_to_v32f32:
+; GFX950: ; %bb.0:
+; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX950-NEXT: global_load_dwordx4 v[2:5], v[0:1], off offset:16
+; GFX950-NEXT: global_load_dwordx4 v[20:23], v[0:1], off offset:32
+; GFX950-NEXT: global_load_dwordx4 v[28:31], v[0:1], off offset:48
+; GFX950-NEXT: global_load_dwordx4 v[32:35], v[0:1], off
+; GFX950-NEXT: s_waitcnt vmcnt(3)
+; GFX950-NEXT: v_lshlrev_b32_e32 v8, 16, v2
+; GFX950-NEXT: v_and_b32_e32 v9, 0xffff0000, v2
+; GFX950-NEXT: v_lshlrev_b32_e32 v10, 16, v3
+; GFX950-NEXT: v_and_b32_e32 v11, 0xffff0000, v3
+; GFX950-NEXT: v_lshlrev_b32_e32 v12, 16, v4
+; GFX950-NEXT: v_and_b32_e32 v13, 0xffff0000, v4
+; GFX950-NEXT: v_lshlrev_b32_e32 v14, 16, v5
+; GFX950-NEXT: v_and_b32_e32 v15, 0xffff0000, v5
+; GFX950-NEXT: s_waitcnt vmcnt(2)
+; GFX950-NEXT: v_lshlrev_b32_e32 v16, 16, v20
+; GFX950-NEXT: v_and_b32_e32 v17, 0xffff0000, v20
+; GFX950-NEXT: v_lshlrev_b32_e32 v18, 16, v21
+; GFX950-NEXT: v_and_b32_e32 v19, 0xffff0000, v21
+; GFX950-NEXT: v_lshlrev_b32_e32 v20, 16, v22
+; GFX950-NEXT: v_and_b32_e32 v21, 0xffff0000, v22
+; GFX950-NEXT: v_lshlrev_b32_e32 v22, 16, v23
+; GFX950-NEXT: v_and_b32_e32 v23, 0xffff0000, v23
+; GFX950-NEXT: s_waitcnt vmcnt(1)
+; GFX950-NEXT: v_lshlrev_b32_e32 v24, 16, v28
+; GFX950-NEXT: v_and_b32_e32 v25, 0xffff0000, v28
+; GFX950-NEXT: v_lshlrev_b32_e32 v26, 16, v29
+; GFX950-NEXT: v_and_b32_e32 v27, 0xffff0000, v29
+; GFX950-NEXT: v_lshlrev_b32_e32 v28, 16, v30
+; GFX950-NEXT: v_and_b32_e32 v29, 0xffff0000, v30
+; GFX950-NEXT: v_lshlrev_b32_e32 v30, 16, v31
+; GFX950-NEXT: v_and_b32_e32 v31, 0xffff0000, v31
+; GFX950-NEXT: s_waitcnt vmcnt(0)
+; GFX950-NEXT: v_lshlrev_b32_e32 v0, 16, v32
+; GFX950-NEXT: v_and_b32_e32 v1, 0xffff0000, v32
+; GFX950-NEXT: v_lshlrev_b32_e32 v2, 16, v33
+; GFX950-NEXT: v_and_b32_e32 v3, 0xffff0000, v33
+; GFX950-NEXT: v_lshlrev_b32_e32 v4, 16, v34
+; GFX950-NEXT: v_and_b32_e32 v5, 0xffff0000, v34
+; GFX950-NEXT: v_lshlrev_b32_e32 v6, 16, v35
+; GFX950-NEXT: v_and_b32_e32 v7, 0xffff0000, v35
+; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: global_extload_v32bf16_to_v32f32:
; GFX10: ; %bb.0:
@@ -6578,53 +6623,54 @@ define <32 x float> @global_extload_v32bf16_to_v32f32(ptr addrspace(1) %ptr) #0
; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0
; GFX1250-NEXT: s_wait_kmcnt 0x0
; GFX1250-NEXT: s_clause 0x3
-; GFX1250-NEXT: global_load_b128 v[4:7], v[0:1], off
-; GFX1250-NEXT: global_load_b128 v[12:15], v[0:1], off offset:16
+; GFX1250-NEXT: global_load_b128 v[2:5], v[0:1], off offset:16
; GFX1250-NEXT: global_load_b128 v[20:23], v[0:1], off offset:32
; GFX1250-NEXT: global_load_b128 v[28:31], v[0:1], off offset:48
+; GFX1250-NEXT: global_load_b128 v[32:35], v[0:1], off
; GFX1250-NEXT: s_mov_b32 s0, 0xffff0000
; GFX1250-NEXT: s_wait_loadcnt 0x3
-; GFX1250-NEXT: s_wait_xcnt 0x0
-; GFX1250-NEXT: v_dual_lshlrev_b32 v0, 16, v4 :: v_dual_bitop2_b32 v1, s0, v4 bitop3:0x40
+; GFX1250-NEXT: v_dual_lshlrev_b32 v8, 16, v2 :: v_dual_bitop2_b32 v9, s0, v2 bitop3:0x40
; GFX1250-NEXT: s_mov_b32 s0, 0xffff0000
; GFX1250-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
-; GFX1250-NEXT: v_dual_lshlrev_b32 v2, 16, v5 :: v_dual_bitop2_b32 v3, s0, v5 bitop3:0x40
+; GFX1250-NEXT: v_dual_lshlrev_b32 v10, 16, v3 :: v_dual_bitop2_b32 v11, s0, v3 bitop3:0x40
; GFX1250-NEXT: s_mov_b32 s0, 0xffff0000
-; GFX1250-NEXT: v_dual_lshlrev_b32 v4, 16, v6 :: v_dual_bitop2_b32 v5, s0, v6 bitop3:0x40
+; GFX1250-NEXT: v_dual_lshlrev_b32 v12, 16, v4 :: v_dual_bitop2_b32 v13, s0, v4 bitop3:0x40
; GFX1250-NEXT: s_mov_b32 s0, 0xffff0000
; GFX1250-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_4) | instid1(SALU_CYCLE_1)
-; GFX1250-NEXT: v_dual_lshlrev_b32 v6, 16, v7 :: v_dual_bitop2_b32 v7, s0, v7 bitop3:0x40
+; GFX1250-NEXT: v_dual_lshlrev_b32 v14, 16, v5 :: v_dual_bitop2_b32 v15, s0, v5 bitop3:0x40
; GFX1250-NEXT: s_mov_b32 s0, 0xffff0000
; GFX1250-NEXT: s_wait_loadcnt 0x2
-; GFX1250-NEXT: v_dual_lshlrev_b32 v8, 16, v12 :: v_dual_bitop2_b32 v9, s0, v12 bitop3:0x40
-; GFX1250-NEXT: s_mov_b32 s0, 0xffff0000
-; GFX1250-NEXT: v_dual_lshlrev_b32 v10, 16, v13 :: v_dual_bitop2_b32 v11, s0, v13 bitop3:0x40
-; GFX1250-NEXT: s_mov_b32 s0, 0xffff0000
-; GFX1250-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
-; GFX1250-NEXT: v_dual_lshlrev_b32 v12, 16, v14 :: v_dual_bitop2_b32 v13, s0, v14 bitop3:0x40
-; GFX1250-NEXT: s_mov_b32 s0, 0xffff0000
-; GFX1250-NEXT: v_dual_lshlrev_b32 v14, 16, v15 :: v_dual_bitop2_b32 v15, s0, v15 bitop3:0x40
-; GFX1250-NEXT: s_mov_b32 s0, 0xffff0000
-; GFX1250-NEXT: s_wait_loadcnt 0x1
; GFX1250-NEXT: v_dual_lshlrev_b32 v16, 16, v20 :: v_dual_bitop2_b32 v17, s0, v20 bitop3:0x40
; GFX1250-NEXT: s_mov_b32 s0, 0xffff0000
-; GFX1250-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
; GFX1250-NEXT: v_dual_lshlrev_b32 v18, 16, v21 :: v_dual_bitop2_b32 v19, s0, v21 bitop3:0x40
; GFX1250-NEXT: s_mov_b32 s0, 0xffff0000
+; GFX1250-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
; GFX1250-NEXT: v_dual_lshlrev_b32 v20, 16, v22 :: v_dual_bitop2_b32 v21, s0, v22 bitop3:0x40
; GFX1250-NEXT: s_mov_b32 s0, 0xffff0000
-; GFX1250-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_4) | instid1(SALU_CYCLE_1)
; GFX1250-NEXT: v_dual_lshlrev_b32 v22, 16, v23 :: v_dual_bitop2_b32 v23, s0, v23 bitop3:0x40
; GFX1250-NEXT: s_mov_b32 s0, 0xffff0000
-; GFX1250-NEXT: s_wait_loadcnt 0x0
+; GFX1250-NEXT: s_wait_loadcnt 0x1
; GFX1250-NEXT: v_dual_lshlrev_b32 v24, 16, v28 :: v_dual_bitop2_b32 v25, s0, v28 bitop3:0x40
; GFX1250-NEXT: s_mov_b32 s0, 0xffff0000
+; GFX1250-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
; GFX1250-NEXT: v_dual_lshlrev_b32 v26, 16, v29 :: v_dual_bitop2_b32 v27, s0, v29 bitop3:0x40
; GFX1250-NEXT: s_mov_b32 s0, 0xffff0000
-; GFX1250-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
; GFX1250-NEXT: v_dual_lshlrev_b32 v28, 16, v30 :: v_dual_bitop2_b32 v29, s0, v30 bitop3:0x40
; GFX1250-NEXT: s_mov_b32 s0, 0xffff0000
+; GFX1250-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
; GFX1250-NEXT: v_dual_lshlrev_b32 v30, 16, v31 :: v_dual_bitop2_b32 v31, s0, v31 bitop3:0x40
+; GFX1250-NEXT: s_mov_b32 s0, 0xffff0000
+; GFX1250-NEXT: s_wait_loadcnt 0x0
+; GFX1250-NEXT: s_wait_xcnt 0x0
+; GFX1250-NEXT: v_dual_lshlrev_b32 v0, 16, v32 :: v_dual_bitop2_b32 v1, s0, v32 bitop3:0x40
+; GFX1250-NEXT: s_mov_b32 s0, 0xffff0000
+; GFX1250-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
+; GFX1250-NEXT: v_dual_lshlrev_b32 v2, 16, v33 :: v_dual_bitop2_b32 v3, s0, v33 bitop3:0x40
+; GFX1250-NEXT: s_mov_b32 s0, 0xffff0000
+; GFX1250-NEXT: v_dual_lshlrev_b32 v4, 16, v34 :: v_dual_bitop2_b32 v5, s0, v34 bitop3:0x40
+; GFX1250-NEXT: s_mov_b32 s0, 0xffff0000
+; GFX1250-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX1250-NEXT: v_dual_lshlrev_b32 v6, 16, v35 :: v_dual_bitop2_b32 v7, s0, v35 bitop3:0x40
; GFX1250-NEXT: s_set_pc_i64 s[30:31]
%load = load <32 x bfloat>, ptr addrspace(1) %ptr
%fpext = fpext <32 x bfloat> %load to <32 x float>
@@ -6689,10 +6735,10 @@ define <2 x double> @global_extload_v2bf16_to_v2f64(ptr addrspace(1) %ptr) #0 {
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX950-NEXT: global_load_dword v0, v[0:1], off
; GFX950-NEXT: s_waitcnt vmcnt(0)
-; GFX950-NEXT: v_lshlrev_b32_e32 v1, 16, v0
-; GFX950-NEXT: v_and_b32_e32 v2, 0xffff0000, v0
-; GFX950-NEXT: v_cvt_f64_f32_e32 v[0:1], v1
-; GFX950-NEXT: v_cvt_f64_f32_e32 v[2:3], v2
+; GFX950-NEXT: v_and_b32_e32 v1, 0xffff0000, v0
+; GFX950-NEXT: v_lshlrev_b32_e32 v0, 16, v0
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[2:3], v1
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[0:1], v0
; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: global_extload_v2bf16_to_v2f64:
@@ -6802,12 +6848,12 @@ define <3 x double> @global_extload_v3bf16_to_v3f64(ptr addrspace(1) %ptr) #0 {
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX950-NEXT: global_load_dwordx2 v[0:1], v[0:1], off
; GFX950-NEXT: s_waitcnt vmcnt(0)
-; GFX950-NEXT: v_lshlrev_b32_e32 v2, 16, v0
-; GFX950-NEXT: v_and_b32_e32 v3, 0xffff0000, v0
-; GFX950-NEXT: v_lshlrev_b32_e32 v4, 16, v1
-; GFX950-NEXT: v_cvt_f64_f32_e32 v[0:1], v2
-; GFX950-NEXT: v_cvt_f64_f32_e32 v[2:3], v3
-; GFX950-NEXT: v_cvt_f64_f32_e32 v[4:5], v4
+; GFX950-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX950-NEXT: v_and_b32_e32 v2, 0xffff0000, v0
+; GFX950-NEXT: v_lshlrev_b32_e32 v0, 16, v0
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[4:5], v1
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[2:3], v2
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[0:1], v0
; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: global_extload_v3bf16_to_v3f64:
@@ -6913,20 +6959,35 @@ define <4 x double> @global_extload_v4bf16_to_v4f64(ptr addrspace(1) %ptr) #0 {
; GFX8-NEXT: v_cvt_f64_f32_e32 v[6:7], v6
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
-; GFX9-LABEL: global_extload_v4bf16_to_v4f64:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off
-; GFX9-NEXT: s_waitcnt vmcnt(0)
-; GFX9-NEXT: v_lshlrev_b32_e32 v2, 16, v0
-; GFX9-NEXT: v_and_b32_e32 v3, 0xffff0000, v0
-; GFX9-NEXT: v_lshlrev_b32_e32 v4, 16, v1
-; GFX9-NEXT: v_and_b32_e32 v6, 0xffff0000, v1
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[0:1], v2
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[2:3], v3
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[4:5], v4
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[6:7], v6
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: global_extload_v4bf16_to_v4f64:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: global_load_dwordx2 v[0:1], v[0:1], off
+; GFX900-NEXT: s_waitcnt vmcnt(0)
+; GFX900-NEXT: v_lshlrev_b32_e32 v2, 16, v0
+; GFX900-NEXT: v_and_b32_e32 v3, 0xffff0000, v0
+; GFX900-NEXT: v_lshlrev_b32_e32 v4, 16, v1
+; GFX900-NEXT: v_and_b32_e32 v6, 0xffff0000, v1
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[0:1], v2
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[2:3], v3
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[4:5], v4
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[6:7], v6
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX950-LABEL: global_extload_v4bf16_to_v4f64:
+; GFX950: ; %bb.0:
+; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX950-NEXT: global_load_dwordx2 v[0:1], v[0:1], off
+; GFX950-NEXT: s_waitcnt vmcnt(0)
+; GFX950-NEXT: v_and_b32_e32 v2, 0xffff0000, v1
+; GFX950-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX950-NEXT: v_and_b32_e32 v3, 0xffff0000, v0
+; GFX950-NEXT: v_lshlrev_b32_e32 v0, 16, v0
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[6:7], v2
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[4:5], v1
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[2:3], v3
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[0:1], v0
+; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: global_extload_v4bf16_to_v4f64:
; GFX10: ; %bb.0:
@@ -7048,22 +7109,39 @@ define <5 x double> @global_extload_v5bf16_to_v5f64(ptr addrspace(1) %ptr) #0 {
; GFX8-NEXT: v_cvt_f64_f32_e32 v[8:9], v8
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
-; GFX9-LABEL: global_extload_v5bf16_to_v5f64:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off
-; GFX9-NEXT: s_waitcnt vmcnt(0)
-; GFX9-NEXT: v_lshlrev_b32_e32 v3, 16, v0
-; GFX9-NEXT: v_and_b32_e32 v4, 0xffff0000, v0
-; GFX9-NEXT: v_lshlrev_b32_e32 v5, 16, v1
-; GFX9-NEXT: v_and_b32_e32 v6, 0xffff0000, v1
-; GFX9-NEXT: v_lshlrev_b32_e32 v8, 16, v2
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[0:1], v3
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[2:3], v4
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[4:5], v5
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[6:7], v6
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[8:9], v8
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: global_extload_v5bf16_to_v5f64:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: global_load_dwordx4 v[0:3], v[0:1], off
+; GFX900-NEXT: s_waitcnt vmcnt(0)
+; GFX900-NEXT: v_lshlrev_b32_e32 v3, 16, v0
+; GFX900-NEXT: v_and_b32_e32 v4, 0xffff0000, v0
+; GFX900-NEXT: v_lshlrev_b32_e32 v5, 16, v1
+; GFX900-NEXT: v_and_b32_e32 v6, 0xffff0000, v1
+; GFX900-NEXT: v_lshlrev_b32_e32 v8, 16, v2
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[0:1], v3
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[2:3], v4
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[4:5], v5
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[6:7], v6
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[8:9], v8
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX950-LABEL: global_extload_v5bf16_to_v5f64:
+; GFX950: ; %bb.0:
+; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX950-NEXT: global_load_dwordx4 v[0:3], v[0:1], off
+; GFX950-NEXT: s_waitcnt vmcnt(0)
+; GFX950-NEXT: v_lshlrev_b32_e32 v2, 16, v2
+; GFX950-NEXT: v_and_b32_e32 v3, 0xffff0000, v1
+; GFX950-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX950-NEXT: v_and_b32_e32 v10, 0xffff0000, v0
+; GFX950-NEXT: v_lshlrev_b32_e32 v0, 16, v0
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[8:9], v2
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[6:7], v3
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[4:5], v1
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[2:3], v10
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[0:1], v0
+; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: global_extload_v5bf16_to_v5f64:
; GFX10: ; %bb.0:
@@ -7190,24 +7268,43 @@ define <6 x double> @global_extload_v6bf16_to_v6f64(ptr addrspace(1) %ptr) #0 {
; GFX8-NEXT: v_cvt_f64_f32_e32 v[10:11], v10
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
-; GFX9-LABEL: global_extload_v6bf16_to_v6f64:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: global_load_dwordx3 v[0:2], v[0:1], off
-; GFX9-NEXT: s_waitcnt vmcnt(0)
-; GFX9-NEXT: v_lshlrev_b32_e32 v3, 16, v0
-; GFX9-NEXT: v_and_b32_e32 v4, 0xffff0000, v0
-; GFX9-NEXT: v_lshlrev_b32_e32 v5, 16, v1
-; GFX9-NEXT: v_and_b32_e32 v6, 0xffff0000, v1
-; GFX9-NEXT: v_lshlrev_b32_e32 v8, 16, v2
-; GFX9-NEXT: v_and_b32_e32 v10, 0xffff0000, v2
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[0:1], v3
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[2:3], v4
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[4:5], v5
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[6:7], v6
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[8:9], v8
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[10:11], v10
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: global_extload_v6bf16_to_v6f64:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: global_load_dwordx3 v[0:2], v[0:1], off
+; GFX900-NEXT: s_waitcnt vmcnt(0)
+; GFX900-NEXT: v_lshlrev_b32_e32 v3, 16, v0
+; GFX900-NEXT: v_and_b32_e32 v4, 0xffff0000, v0
+; GFX900-NEXT: v_lshlrev_b32_e32 v5, 16, v1
+; GFX900-NEXT: v_and_b32_e32 v6, 0xffff0000, v1
+; GFX900-NEXT: v_lshlrev_b32_e32 v8, 16, v2
+; GFX900-NEXT: v_and_b32_e32 v10, 0xffff0000, v2
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[0:1], v3
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[2:3], v4
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[4:5], v5
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[6:7], v6
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[8:9], v8
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[10:11], v10
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX950-LABEL: global_extload_v6bf16_to_v6f64:
+; GFX950: ; %bb.0:
+; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX950-NEXT: global_load_dwordx3 v[0:2], v[0:1], off
+; GFX950-NEXT: s_waitcnt vmcnt(0)
+; GFX950-NEXT: v_and_b32_e32 v3, 0xffff0000, v2
+; GFX950-NEXT: v_lshlrev_b32_e32 v2, 16, v2
+; GFX950-NEXT: v_and_b32_e32 v4, 0xffff0000, v1
+; GFX950-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX950-NEXT: v_and_b32_e32 v12, 0xffff0000, v0
+; GFX950-NEXT: v_lshlrev_b32_e32 v0, 16, v0
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[10:11], v3
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[8:9], v2
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[6:7], v4
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[4:5], v1
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[2:3], v12
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[0:1], v0
+; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: global_extload_v6bf16_to_v6f64:
; GFX10: ; %bb.0:
@@ -7351,28 +7448,51 @@ define <8 x double> @global_extload_v8bf16_to_v8f64(ptr addrspace(1) %ptr) #0 {
; GFX8-NEXT: v_cvt_f64_f32_e32 v[14:15], v14
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
-; GFX9-LABEL: global_extload_v8bf16_to_v8f64:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off
-; GFX9-NEXT: s_waitcnt vmcnt(0)
-; GFX9-NEXT: v_lshlrev_b32_e32 v4, 16, v0
-; GFX9-NEXT: v_and_b32_e32 v5, 0xffff0000, v0
-; GFX9-NEXT: v_lshlrev_b32_e32 v6, 16, v1
-; GFX9-NEXT: v_and_b32_e32 v7, 0xffff0000, v1
-; GFX9-NEXT: v_lshlrev_b32_e32 v8, 16, v2
-; GFX9-NEXT: v_and_b32_e32 v10, 0xffff0000, v2
-; GFX9-NEXT: v_lshlrev_b32_e32 v12, 16, v3
-; GFX9-NEXT: v_and_b32_e32 v14, 0xffff0000, v3
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[0:1], v4
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[2:3], v5
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[4:5], v6
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[6:7], v7
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[8:9], v8
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[10:11], v10
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[12:13], v12
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[14:15], v14
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: global_extload_v8bf16_to_v8f64:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: global_load_dwordx4 v[0:3], v[0:1], off
+; GFX900-NEXT: s_waitcnt vmcnt(0)
+; GFX900-NEXT: v_lshlrev_b32_e32 v4, 16, v0
+; GFX900-NEXT: v_and_b32_e32 v5, 0xffff0000, v0
+; GFX900-NEXT: v_lshlrev_b32_e32 v6, 16, v1
+; GFX900-NEXT: v_and_b32_e32 v7, 0xffff0000, v1
+; GFX900-NEXT: v_lshlrev_b32_e32 v8, 16, v2
+; GFX900-NEXT: v_and_b32_e32 v10, 0xffff0000, v2
+; GFX900-NEXT: v_lshlrev_b32_e32 v12, 16, v3
+; GFX900-NEXT: v_and_b32_e32 v14, 0xffff0000, v3
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[0:1], v4
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[2:3], v5
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[4:5], v6
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[6:7], v7
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[8:9], v8
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[10:11], v10
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[12:13], v12
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[14:15], v14
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX950-LABEL: global_extload_v8bf16_to_v8f64:
+; GFX950: ; %bb.0:
+; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX950-NEXT: global_load_dwordx4 v[0:3], v[0:1], off
+; GFX950-NEXT: s_waitcnt vmcnt(0)
+; GFX950-NEXT: v_and_b32_e32 v4, 0xffff0000, v3
+; GFX950-NEXT: v_lshlrev_b32_e32 v3, 16, v3
+; GFX950-NEXT: v_and_b32_e32 v5, 0xffff0000, v2
+; GFX950-NEXT: v_lshlrev_b32_e32 v2, 16, v2
+; GFX950-NEXT: v_and_b32_e32 v6, 0xffff0000, v1
+; GFX950-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX950-NEXT: v_and_b32_e32 v16, 0xffff0000, v0
+; GFX950-NEXT: v_lshlrev_b32_e32 v0, 16, v0
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[14:15], v4
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[12:13], v3
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[10:11], v5
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[8:9], v2
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[6:7], v6
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[4:5], v1
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[2:3], v16
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[0:1], v0
+; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: global_extload_v8bf16_to_v8f64:
; GFX10: ; %bb.0:
@@ -7585,46 +7705,87 @@ define <16 x double> @global_extload_v16bf16_to_v16f64(ptr addrspace(1) %ptr) #0
; GFX8-NEXT: v_cvt_f64_f32_e32 v[30:31], v30
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
-; GFX9-LABEL: global_extload_v16bf16_to_v16f64:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: global_load_dwordx4 v[2:5], v[0:1], off
-; GFX9-NEXT: global_load_dwordx4 v[6:9], v[0:1], off offset:16
-; GFX9-NEXT: s_waitcnt vmcnt(1)
-; GFX9-NEXT: v_lshlrev_b32_e32 v0, 16, v2
-; GFX9-NEXT: v_and_b32_e32 v2, 0xffff0000, v2
-; GFX9-NEXT: v_lshlrev_b32_e32 v10, 16, v3
-; GFX9-NEXT: v_and_b32_e32 v11, 0xffff0000, v3
-; GFX9-NEXT: v_lshlrev_b32_e32 v12, 16, v4
-; GFX9-NEXT: v_and_b32_e32 v13, 0xffff0000, v4
-; GFX9-NEXT: v_lshlrev_b32_e32 v14, 16, v5
-; GFX9-NEXT: v_and_b32_e32 v15, 0xffff0000, v5
-; GFX9-NEXT: s_waitcnt vmcnt(0)
-; GFX9-NEXT: v_lshlrev_b32_e32 v16, 16, v6
-; GFX9-NEXT: v_and_b32_e32 v18, 0xffff0000, v6
-; GFX9-NEXT: v_lshlrev_b32_e32 v20, 16, v7
-; GFX9-NEXT: v_and_b32_e32 v22, 0xffff0000, v7
-; GFX9-NEXT: v_lshlrev_b32_e32 v24, 16, v8
-; GFX9-NEXT: v_and_b32_e32 v26, 0xffff0000, v8
-; GFX9-NEXT: v_lshlrev_b32_e32 v28, 16, v9
-; GFX9-NEXT: v_and_b32_e32 v30, 0xffff0000, v9
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[0:1], v0
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[2:3], v2
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[4:5], v10
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[6:7], v11
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[8:9], v12
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[10:11], v13
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[12:13], v14
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[14:15], v15
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[16:17], v16
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[18:19], v18
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[20:21], v20
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[22:23], v22
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[24:25], v24
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[26:27], v26
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[28:29], v28
-; GFX9-NEXT: v_cvt_f64_f32_e32 v[30:31], v30
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: global_extload_v16bf16_to_v16f64:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: global_load_dwordx4 v[2:5], v[0:1], off
+; GFX900-NEXT: global_load_dwordx4 v[6:9], v[0:1], off offset:16
+; GFX900-NEXT: s_waitcnt vmcnt(1)
+; GFX900-NEXT: v_lshlrev_b32_e32 v0, 16, v2
+; GFX900-NEXT: v_and_b32_e32 v2, 0xffff0000, v2
+; GFX900-NEXT: v_lshlrev_b32_e32 v10, 16, v3
+; GFX900-NEXT: v_and_b32_e32 v11, 0xffff0000, v3
+; GFX900-NEXT: v_lshlrev_b32_e32 v12, 16, v4
+; GFX900-NEXT: v_and_b32_e32 v13, 0xffff0000, v4
+; GFX900-NEXT: v_lshlrev_b32_e32 v14, 16, v5
+; GFX900-NEXT: v_and_b32_e32 v15, 0xffff0000, v5
+; GFX900-NEXT: s_waitcnt vmcnt(0)
+; GFX900-NEXT: v_lshlrev_b32_e32 v16, 16, v6
+; GFX900-NEXT: v_and_b32_e32 v18, 0xffff0000, v6
+; GFX900-NEXT: v_lshlrev_b32_e32 v20, 16, v7
+; GFX900-NEXT: v_and_b32_e32 v22, 0xffff0000, v7
+; GFX900-NEXT: v_lshlrev_b32_e32 v24, 16, v8
+; GFX900-NEXT: v_and_b32_e32 v26, 0xffff0000, v8
+; GFX900-NEXT: v_lshlrev_b32_e32 v28, 16, v9
+; GFX900-NEXT: v_and_b32_e32 v30, 0xffff0000, v9
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[0:1], v0
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[2:3], v2
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[4:5], v10
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[6:7], v11
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[8:9], v12
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[10:11], v13
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[12:13], v14
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[14:15], v15
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[16:17], v16
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[18:19], v18
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[20:21], v20
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[22:23], v22
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[24:25], v24
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[26:27], v26
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[28:29], v28
+; GFX900-NEXT: v_cvt_f64_f32_e32 v[30:31], v30
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX950-LABEL: global_extload_v16bf16_to_v16f64:
+; GFX950: ; %bb.0:
+; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX950-NEXT: global_load_dwordx4 v[2:5], v[0:1], off offset:16
+; GFX950-NEXT: global_load_dwordx4 v[6:9], v[0:1], off
+; GFX950-NEXT: s_waitcnt vmcnt(1)
+; GFX950-NEXT: v_and_b32_e32 v0, 0xffff0000, v5
+; GFX950-NEXT: v_lshlrev_b32_e32 v1, 16, v5
+; GFX950-NEXT: v_and_b32_e32 v5, 0xffff0000, v4
+; GFX950-NEXT: v_lshlrev_b32_e32 v4, 16, v4
+; GFX950-NEXT: v_and_b32_e32 v10, 0xffff0000, v3
+; GFX950-NEXT: v_lshlrev_b32_e32 v3, 16, v3
+; GFX950-NEXT: v_and_b32_e32 v11, 0xffff0000, v2
+; GFX950-NEXT: v_lshlrev_b32_e32 v2, 16, v2
+; GFX950-NEXT: s_waitcnt vmcnt(0)
+; GFX950-NEXT: v_and_b32_e32 v12, 0xffff0000, v9
+; GFX950-NEXT: v_lshlrev_b32_e32 v9, 16, v9
+; GFX950-NEXT: v_and_b32_e32 v32, 0xffff0000, v8
+; GFX950-NEXT: v_lshlrev_b32_e32 v8, 16, v8
+; GFX950-NEXT: v_and_b32_e32 v33, 0xffff0000, v7
+; GFX950-NEXT: v_lshlrev_b32_e32 v34, 16, v7
+; GFX950-NEXT: v_and_b32_e32 v35, 0xffff0000, v6
+; GFX950-NEXT: v_lshlrev_b32_e32 v36, 16, v6
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[30:31], v0
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[28:29], v1
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[26:27], v5
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[24:25], v4
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[22:23], v10
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[20:21], v3
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[18:19], v11
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[16:17], v2
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[14:15], v12
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[12:13], v9
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[10:11], v32
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[8:9], v8
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[6:7], v33
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[4:5], v34
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[2:3], v35
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[0:1], v36
+; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: global_extload_v16bf16_to_v16f64:
; GFX10: ; %bb.0:
@@ -8563,136 +8724,142 @@ define <32 x double> @global_extload_v32bf16_to_v32f64(ptr addrspace(1) %ptr) #0
; GFX950-NEXT: v_accvgpr_write_b32 a10, v58 ; Reload Reuse
; GFX950-NEXT: v_accvgpr_write_b32 a11, v59 ; Reload Reuse
; GFX950-NEXT: v_accvgpr_write_b32 a12, v60 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_write_b32 a13, v61 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_write_b32 a14, v62 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_write_b32 a15, v63 ; Reload Reuse
; GFX950-NEXT: v_mov_b32_e32 v3, v2
; GFX950-NEXT: v_mov_b32_e32 v2, v1
-; GFX950-NEXT: global_load_ushort v1, v[2:3], off offset:2
-; GFX950-NEXT: global_load_ushort v4, v[2:3], off offset:12
-; GFX950-NEXT: global_load_ushort v5, v[2:3], off offset:8
-; GFX950-NEXT: global_load_ushort v6, v[2:3], off offset:4
-; GFX950-NEXT: global_load_ushort v7, v[2:3], off
-; GFX950-NEXT: global_load_ushort v8, v[2:3], off offset:6
-; GFX950-NEXT: global_load_ushort v9, v[2:3], off offset:10
-; GFX950-NEXT: global_load_ushort v10, v[2:3], off offset:14
-; GFX950-NEXT: global_load_ushort v11, v[2:3], off offset:18
-; GFX950-NEXT: global_load_ushort v12, v[2:3], off offset:28
-; GFX950-NEXT: global_load_ushort v13, v[2:3], off offset:24
-; GFX950-NEXT: global_load_ushort v14, v[2:3], off offset:20
-; GFX950-NEXT: global_load_ushort v15, v[2:3], off offset:16
-; GFX950-NEXT: global_load_ushort v16, v[2:3], off offset:22
-; GFX950-NEXT: global_load_ushort v17, v[2:3], off offset:26
-; GFX950-NEXT: global_load_ushort v18, v[2:3], off offset:30
-; GFX950-NEXT: global_load_ushort v19, v[2:3], off offset:34
-; GFX950-NEXT: global_load_ushort v20, v[2:3], off offset:44
-; GFX950-NEXT: global_load_ushort v21, v[2:3], off offset:40
-; GFX950-NEXT: global_load_ushort v22, v[2:3], off offset:36
-; GFX950-NEXT: global_load_ushort v23, v[2:3], off offset:32
-; GFX950-NEXT: global_load_ushort v24, v[2:3], off offset:38
-; GFX950-NEXT: global_load_ushort v25, v[2:3], off offset:42
-; GFX950-NEXT: global_load_ushort v26, v[2:3], off offset:46
-; GFX950-NEXT: global_load_ushort v42, v[2:3], off offset:50
-; GFX950-NEXT: global_load_ushort v43, v[2:3], off offset:62
-; GFX950-NEXT: global_load_ushort v46, v[2:3], off offset:60
-; GFX950-NEXT: global_load_ushort v47, v[2:3], off offset:56
-; GFX950-NEXT: global_load_ushort v60, v[2:3], off offset:52
-; GFX950-NEXT: global_load_ushort v56, v[2:3], off offset:48
-; GFX950-NEXT: global_load_ushort v57, v[2:3], off offset:54
-; GFX950-NEXT: global_load_ushort v58, v[2:3], off offset:58
+; GFX950-NEXT: global_load_ushort v1, v[2:3], off offset:30
+; GFX950-NEXT: global_load_ushort v4, v[2:3], off offset:28
+; GFX950-NEXT: global_load_ushort v5, v[2:3], off offset:26
+; GFX950-NEXT: global_load_ushort v6, v[2:3], off offset:24
+; GFX950-NEXT: global_load_ushort v7, v[2:3], off offset:22
+; GFX950-NEXT: global_load_ushort v8, v[2:3], off offset:20
+; GFX950-NEXT: global_load_ushort v9, v[2:3], off offset:18
+; GFX950-NEXT: global_load_ushort v10, v[2:3], off offset:16
+; GFX950-NEXT: global_load_ushort v11, v[2:3], off offset:14
+; GFX950-NEXT: global_load_ushort v12, v[2:3], off offset:12
+; GFX950-NEXT: global_load_ushort v13, v[2:3], off offset:10
+; GFX950-NEXT: global_load_ushort v14, v[2:3], off offset:8
+; GFX950-NEXT: global_load_ushort v15, v[2:3], off offset:6
+; GFX950-NEXT: global_load_ushort v16, v[2:3], off offset:4
+; GFX950-NEXT: global_load_ushort v17, v[2:3], off offset:2
+; GFX950-NEXT: global_load_ushort v18, v[2:3], off
+; GFX950-NEXT: global_load_ushort v19, v[2:3], off offset:62
+; GFX950-NEXT: global_load_ushort v20, v[2:3], off offset:60
+; GFX950-NEXT: global_load_ushort v21, v[2:3], off offset:58
+; GFX950-NEXT: global_load_ushort v22, v[2:3], off offset:56
+; GFX950-NEXT: global_load_ushort v23, v[2:3], off offset:54
+; GFX950-NEXT: global_load_ushort v24, v[2:3], off offset:52
+; GFX950-NEXT: global_load_ushort v25, v[2:3], off offset:50
+; GFX950-NEXT: global_load_ushort v26, v[2:3], off offset:48
+; GFX950-NEXT: global_load_ushort v34, v[2:3], off offset:46
+; GFX950-NEXT: global_load_ushort v35, v[2:3], off offset:44
+; GFX950-NEXT: global_load_ushort v46, v[2:3], off offset:42
+; GFX950-NEXT: global_load_ushort v47, v[2:3], off offset:40
+; GFX950-NEXT: global_load_ushort v60, v[2:3], off offset:38
+; GFX950-NEXT: global_load_ushort v61, v[2:3], off offset:36
+; GFX950-NEXT: global_load_ushort v62, v[2:3], off offset:34
+; GFX950-NEXT: global_load_ushort v63, v[2:3], off offset:32
; GFX950-NEXT: s_waitcnt vmcnt(31)
; GFX950-NEXT: v_lshlrev_b32_e32 v1, 16, v1
; GFX950-NEXT: s_waitcnt vmcnt(30)
-; GFX950-NEXT: v_lshlrev_b32_e32 v30, 16, v4
+; GFX950-NEXT: v_lshlrev_b32_e32 v2, 16, v4
; GFX950-NEXT: s_waitcnt vmcnt(29)
-; GFX950-NEXT: v_lshlrev_b32_e32 v28, 16, v5
-; GFX950-NEXT: v_cvt_f64_f32_e32 v[4:5], v1
+; GFX950-NEXT: v_lshlrev_b32_e32 v3, 16, v5
+; GFX950-NEXT: s_waitcnt vmcnt(28)
+; GFX950-NEXT: v_lshlrev_b32_e32 v4, 16, v6
; GFX950-NEXT: s_waitcnt vmcnt(27)
-; GFX950-NEXT: v_lshlrev_b32_e32 v2, 16, v7
+; GFX950-NEXT: v_lshlrev_b32_e32 v5, 16, v7
; GFX950-NEXT: s_waitcnt vmcnt(26)
-; GFX950-NEXT: v_lshlrev_b32_e32 v7, 16, v8
+; GFX950-NEXT: v_lshlrev_b32_e32 v6, 16, v8
; GFX950-NEXT: s_waitcnt vmcnt(25)
-; GFX950-NEXT: v_lshlrev_b32_e32 v27, 16, v9
+; GFX950-NEXT: v_lshlrev_b32_e32 v7, 16, v9
; GFX950-NEXT: s_waitcnt vmcnt(24)
-; GFX950-NEXT: v_lshlrev_b32_e32 v29, 16, v10
+; GFX950-NEXT: v_lshlrev_b32_e32 v8, 16, v10
; GFX950-NEXT: s_waitcnt vmcnt(23)
-; GFX950-NEXT: v_lshlrev_b32_e32 v31, 16, v11
+; GFX950-NEXT: v_lshlrev_b32_e32 v9, 16, v11
; GFX950-NEXT: s_waitcnt vmcnt(22)
-; GFX950-NEXT: v_lshlrev_b32_e32 v38, 16, v12
+; GFX950-NEXT: v_lshlrev_b32_e32 v10, 16, v12
; GFX950-NEXT: s_waitcnt vmcnt(21)
-; GFX950-NEXT: v_lshlrev_b32_e32 v36, 16, v13
+; GFX950-NEXT: v_lshlrev_b32_e32 v11, 16, v13
; GFX950-NEXT: s_waitcnt vmcnt(20)
-; GFX950-NEXT: v_lshlrev_b32_e32 v34, 16, v14
+; GFX950-NEXT: v_lshlrev_b32_e32 v36, 16, v14
; GFX950-NEXT: s_waitcnt vmcnt(19)
-; GFX950-NEXT: v_lshlrev_b32_e32 v32, 16, v15
+; GFX950-NEXT: v_lshlrev_b32_e32 v37, 16, v15
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[32:33], v1
; GFX950-NEXT: s_waitcnt vmcnt(18)
-; GFX950-NEXT: v_lshlrev_b32_e32 v33, 16, v16
-; GFX950-NEXT: v_cvt_f64_f32_e32 v[12:13], v27
+; GFX950-NEXT: v_lshlrev_b32_e32 v38, 16, v16
+; GFX950-NEXT: s_waitcnt vmcnt(17)
+; GFX950-NEXT: v_lshlrev_b32_e32 v39, 16, v17
; GFX950-NEXT: s_waitcnt vmcnt(16)
-; GFX950-NEXT: v_lshlrev_b32_e32 v37, 16, v18
+; GFX950-NEXT: v_lshlrev_b32_e32 v48, 16, v18
; GFX950-NEXT: s_waitcnt vmcnt(15)
-; GFX950-NEXT: v_lshlrev_b32_e32 v39, 16, v19
-; GFX950-NEXT: s_waitcnt vmcnt(14)
-; GFX950-NEXT: v_lshlrev_b32_e32 v44, 16, v20
-; GFX950-NEXT: s_waitcnt vmcnt(13)
-; GFX950-NEXT: v_lshlrev_b32_e32 v40, 16, v21
-; GFX950-NEXT: v_cvt_f64_f32_e32 v[14:15], v30
-; GFX950-NEXT: v_cvt_f64_f32_e32 v[20:21], v31
-; GFX950-NEXT: s_waitcnt vmcnt(10)
-; GFX950-NEXT: v_lshlrev_b32_e32 v49, 16, v24
-; GFX950-NEXT: s_waitcnt vmcnt(9)
-; GFX950-NEXT: v_lshlrev_b32_e32 v53, 16, v25
-; GFX950-NEXT: s_waitcnt vmcnt(8)
-; GFX950-NEXT: v_lshlrev_b32_e32 v41, 16, v26
+; GFX950-NEXT: v_lshlrev_b32_e32 v49, 16, v19
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[18:19], v8
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[16:17], v9
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[14:15], v10
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[12:13], v11
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[10:11], v36
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[8:9], v37
; GFX950-NEXT: s_waitcnt vmcnt(7)
-; GFX950-NEXT: v_lshlrev_b32_e32 v1, 16, v42
+; GFX950-NEXT: v_lshlrev_b32_e32 v1, 16, v34
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[36:37], v1
; GFX950-NEXT: s_waitcnt vmcnt(6)
-; GFX950-NEXT: v_lshlrev_b32_e32 v42, 16, v43
-; GFX950-NEXT: v_cvt_f64_f32_e32 v[18:19], v32
-; GFX950-NEXT: v_cvt_f64_f32_e32 v[24:25], v33
-; GFX950-NEXT: v_cvt_f64_f32_e32 v[26:27], v36
-; GFX950-NEXT: v_cvt_f64_f32_e32 v[32:33], v37
-; GFX950-NEXT: v_cvt_f64_f32_e32 v[30:31], v38
-; GFX950-NEXT: v_cvt_f64_f32_e32 v[36:37], v39
-; GFX950-NEXT: v_cvt_f64_f32_e32 v[38:39], v44
-; GFX950-NEXT: v_cvt_f64_f32_e32 v[44:45], v42
+; GFX950-NEXT: v_lshlrev_b32_e32 v1, 16, v35
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[34:35], v1
; GFX950-NEXT: s_waitcnt vmcnt(5)
-; GFX950-NEXT: v_lshlrev_b32_e32 v42, 16, v46
-; GFX950-NEXT: v_cvt_f64_f32_e32 v[42:43], v42
-; GFX950-NEXT: s_waitcnt vmcnt(0)
-; GFX950-NEXT: v_lshlrev_b32_e32 v46, 16, v58
-; GFX950-NEXT: scratch_store_dwordx4 v0, v[42:45], off offset:240
-; GFX950-NEXT: v_cvt_f64_f32_e32 v[58:59], v46
-; GFX950-NEXT: v_lshlrev_b32_e32 v46, 16, v47
-; GFX950-NEXT: v_cvt_f64_f32_e32 v[44:45], v1
-; GFX950-NEXT: v_lshlrev_b32_e32 v1, 16, v56
-; GFX950-NEXT: v_cvt_f64_f32_e32 v[42:43], v1
-; GFX950-NEXT: v_lshlrev_b32_e32 v1, 16, v57
-; GFX950-NEXT: v_cvt_f64_f32_e32 v[56:57], v46
-; GFX950-NEXT: v_lshlrev_b32_e32 v35, 16, v17
-; GFX950-NEXT: v_lshlrev_b32_e32 v48, 16, v23
-; GFX950-NEXT: v_lshlrev_b32_e32 v52, 16, v22
-; GFX950-NEXT: scratch_store_dwordx4 v0, v[56:59], off offset:224
-; GFX950-NEXT: v_lshlrev_b32_e32 v6, 16, v6
-; GFX950-NEXT: v_cvt_f64_f32_e32 v[10:11], v28
+; GFX950-NEXT: v_lshlrev_b32_e32 v1, 16, v46
+; GFX950-NEXT: v_lshlrev_b32_e32 v52, 16, v20
+; GFX950-NEXT: v_lshlrev_b32_e32 v42, 16, v24
+; GFX950-NEXT: v_lshlrev_b32_e32 v43, 16, v25
+; GFX950-NEXT: v_lshlrev_b32_e32 v56, 16, v26
; GFX950-NEXT: v_cvt_f64_f32_e32 v[58:59], v1
-; GFX950-NEXT: v_lshlrev_b32_e32 v1, 16, v60
-; GFX950-NEXT: v_cvt_f64_f32_e32 v[16:17], v29
-; GFX950-NEXT: v_cvt_f64_f32_e32 v[22:23], v34
-; GFX950-NEXT: v_cvt_f64_f32_e32 v[28:29], v35
-; GFX950-NEXT: v_cvt_f64_f32_e32 v[34:35], v48
+; GFX950-NEXT: s_waitcnt vmcnt(4)
+; GFX950-NEXT: v_lshlrev_b32_e32 v1, 16, v47
+; GFX950-NEXT: v_lshlrev_b32_e32 v53, 16, v21
+; GFX950-NEXT: v_lshlrev_b32_e32 v40, 16, v22
+; GFX950-NEXT: v_lshlrev_b32_e32 v41, 16, v23
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[30:31], v2
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[28:29], v3
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[26:27], v4
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[24:25], v5
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[22:23], v6
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[20:21], v7
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[6:7], v38
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[4:5], v39
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[2:3], v48
; GFX950-NEXT: v_cvt_f64_f32_e32 v[50:51], v49
; GFX950-NEXT: v_cvt_f64_f32_e32 v[48:49], v52
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[38:39], v42
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[44:45], v43
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[42:43], v56
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[56:57], v1
+; GFX950-NEXT: s_waitcnt vmcnt(3)
+; GFX950-NEXT: v_lshlrev_b32_e32 v1, 16, v60
+; GFX950-NEXT: scratch_store_dwordx4 v0, v[48:51], off offset:240
; GFX950-NEXT: v_cvt_f64_f32_e32 v[54:55], v53
; GFX950-NEXT: v_cvt_f64_f32_e32 v[52:53], v40
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[50:51], v1
+; GFX950-NEXT: s_waitcnt vmcnt(3)
+; GFX950-NEXT: v_lshlrev_b32_e32 v1, 16, v61
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[48:49], v1
+; GFX950-NEXT: s_waitcnt vmcnt(2)
+; GFX950-NEXT: v_lshlrev_b32_e32 v1, 16, v62
; GFX950-NEXT: v_cvt_f64_f32_e32 v[40:41], v41
-; GFX950-NEXT: v_cvt_f64_f32_e32 v[56:57], v1
-; GFX950-NEXT: v_cvt_f64_f32_e32 v[2:3], v2
-; GFX950-NEXT: v_cvt_f64_f32_e32 v[8:9], v7
-; GFX950-NEXT: v_cvt_f64_f32_e32 v[6:7], v6
-; GFX950-NEXT: scratch_store_dwordx4 v0, v[56:59], off offset:208
+; GFX950-NEXT: scratch_store_dwordx4 v0, v[52:55], off offset:224
+; GFX950-NEXT: v_accvgpr_read_b32 v62, a14 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_read_b32 v61, a13 ; Reload Reuse
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[54:55], v1
+; GFX950-NEXT: s_waitcnt vmcnt(2)
+; GFX950-NEXT: v_lshlrev_b32_e32 v1, 16, v63
+; GFX950-NEXT: v_cvt_f64_f32_e32 v[52:53], v1
+; GFX950-NEXT: scratch_store_dwordx4 v0, v[38:41], off offset:208
; GFX950-NEXT: scratch_store_dwordx4 v0, v[42:45], off offset:192
-; GFX950-NEXT: scratch_store_dwordx4 v0, v[38:41], off offset:176
-; GFX950-NEXT: scratch_store_dwordx4 v0, v[52:55], off offset:160
+; GFX950-NEXT: scratch_store_dwordx4 v0, v[34:37], off offset:176
+; GFX950-NEXT: scratch_store_dwordx4 v0, v[56:59], off offset:160
; GFX950-NEXT: scratch_store_dwordx4 v0, v[48:51], off offset:144
-; GFX950-NEXT: scratch_store_dwordx4 v0, v[34:37], off offset:128
+; GFX950-NEXT: scratch_store_dwordx4 v0, v[52:55], off offset:128
; GFX950-NEXT: scratch_store_dwordx4 v0, v[30:33], off offset:112
; GFX950-NEXT: scratch_store_dwordx4 v0, v[26:29], off offset:96
; GFX950-NEXT: scratch_store_dwordx4 v0, v[22:25], off offset:80
@@ -8701,6 +8868,7 @@ define <32 x double> @global_extload_v32bf16_to_v32f64(ptr addrspace(1) %ptr) #0
; GFX950-NEXT: scratch_store_dwordx4 v0, v[10:13], off offset:32
; GFX950-NEXT: scratch_store_dwordx4 v0, v[6:9], off offset:16
; GFX950-NEXT: scratch_store_dwordx4 v0, v[2:5], off
+; GFX950-NEXT: v_accvgpr_read_b32 v63, a15 ; Reload Reuse
; GFX950-NEXT: v_accvgpr_read_b32 v60, a12 ; Reload Reuse
; GFX950-NEXT: v_accvgpr_read_b32 v59, a11 ; Reload Reuse
; GFX950-NEXT: v_accvgpr_read_b32 v58, a10 ; Reload Reuse
@@ -9067,122 +9235,123 @@ define <32 x double> @global_extload_v32bf16_to_v32f64(ptr addrspace(1) %ptr) #0
; GFX1250-NEXT: s_wait_kmcnt 0x0
; GFX1250-NEXT: v_dual_mov_b32 v3, v2 :: v_dual_mov_b32 v2, v1
; GFX1250-NEXT: s_clause 0x1f
-; GFX1250-NEXT: global_load_u16 v1, v[2:3], off offset:2
-; GFX1250-NEXT: global_load_u16 v4, v[2:3], off offset:12
-; GFX1250-NEXT: global_load_u16 v5, v[2:3], off offset:8
-; GFX1250-NEXT: global_load_u16 v6, v[2:3], off offset:4
-; GFX1250-NEXT: global_load_u16 v7, v[2:3], off
-; GFX1250-NEXT: global_load_u16 v8, v[2:3], off offset:6
-; GFX1250-NEXT: global_load_u16 v9, v[2:3], off offset:62
-; GFX1250-NEXT: global_load_u16 v10, v[2:3], off offset:60
-; GFX1250-NEXT: global_load_u16 v11, v[2:3], off offset:58
-; GFX1250-NEXT: global_load_u16 v12, v[2:3], off offset:56
+; GFX1250-NEXT: global_load_u16 v1, v[2:3], off offset:30
+; GFX1250-NEXT: global_load_u16 v4, v[2:3], off offset:28
+; GFX1250-NEXT: global_load_u16 v5, v[2:3], off offset:26
+; GFX1250-NEXT: global_load_u16 v6, v[2:3], off offset:24
+; GFX1250-NEXT: global_load_u16 v7, v[2:3], off offset:22
+; GFX1250-NEXT: global_load_u16 v8, v[2:3], off offset:20
+; GFX1250-NEXT: global_load_u16 v9, v[2:3], off offset:18
+; GFX1250-NEXT: global_load_u16 v10, v[2:3], off offset:16
+; GFX1250-NEXT: global_load_u16 v11, v[2:3], off offset:14
+; GFX1250-NEXT: global_load_u16 v12, v[2:3], off offset:12
; GFX1250-NEXT: global_load_u16 v13, v[2:3], off offset:10
-; GFX1250-NEXT: global_load_u16 v14, v[2:3], off offset:14
-; GFX1250-NEXT: global_load_u16 v15, v[2:3], off offset:18
-; GFX1250-NEXT: global_load_u16 v16, v[2:3], off offset:28
-; GFX1250-NEXT: global_load_u16 v17, v[2:3], off offset:24
-; GFX1250-NEXT: global_load_u16 v18, v[2:3], off offset:20
-; GFX1250-NEXT: global_load_u16 v19, v[2:3], off offset:16
-; GFX1250-NEXT: global_load_u16 v20, v[2:3], off offset:22
-; GFX1250-NEXT: global_load_u16 v21, v[2:3], off offset:26
-; GFX1250-NEXT: global_load_u16 v30, v[2:3], off offset:30
-; GFX1250-NEXT: global_load_u16 v31, v[2:3], off offset:34
-; GFX1250-NEXT: global_load_u16 v32, v[2:3], off offset:44
-; GFX1250-NEXT: global_load_u16 v33, v[2:3], off offset:40
-; GFX1250-NEXT: global_load_u16 v34, v[2:3], off offset:36
-; GFX1250-NEXT: global_load_u16 v35, v[2:3], off offset:32
-; GFX1250-NEXT: global_load_u16 v36, v[2:3], off offset:38
-; GFX1250-NEXT: global_load_u16 v37, v[2:3], off offset:42
-; GFX1250-NEXT: global_load_u16 v38, v[2:3], off offset:46
-; GFX1250-NEXT: global_load_u16 v39, v[2:3], off offset:50
-; GFX1250-NEXT: global_load_u16 v48, v[2:3], off offset:52
-; GFX1250-NEXT: global_load_u16 v49, v[2:3], off offset:48
-; GFX1250-NEXT: global_load_u16 v50, v[2:3], off offset:54
-; GFX1250-NEXT: s_wait_loadcnt 0x1f
-; GFX1250-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX1250-NEXT: global_load_u16 v14, v[2:3], off offset:8
+; GFX1250-NEXT: global_load_u16 v15, v[2:3], off offset:6
+; GFX1250-NEXT: global_load_u16 v16, v[2:3], off offset:4
+; GFX1250-NEXT: global_load_u16 v17, v[2:3], off offset:2
+; GFX1250-NEXT: global_load_u16 v18, v[2:3], off offset:62
+; GFX1250-NEXT: global_load_u16 v19, v[2:3], off offset:60
+; GFX1250-NEXT: global_load_u16 v20, v[2:3], off
+; GFX1250-NEXT: global_load_u16 v21, v[2:3], off offset:58
+; GFX1250-NEXT: global_load_u16 v22, v[2:3], off offset:56
+; GFX1250-NEXT: global_load_u16 v23, v[2:3], off offset:54
+; GFX1250-NEXT: global_load_u16 v24, v[2:3], off offset:52
+; GFX1250-NEXT: global_load_u16 v25, v[2:3], off offset:50
+; GFX1250-NEXT: global_load_u16 v26, v[2:3], off offset:48
+; GFX1250-NEXT: global_load_u16 v27, v[2:3], off offset:46
+; GFX1250-NEXT: global_load_u16 v28, v[2:3], off offset:44
+; GFX1250-NEXT: global_load_u16 v29, v[2:3], off offset:42
+; GFX1250-NEXT: global_load_u16 v30, v[2:3], off offset:40
+; GFX1250-NEXT: global_load_u16 v31, v[2:3], off offset:38
+; GFX1250-NEXT: global_load_u16 v32, v[2:3], off offset:36
+; GFX1250-NEXT: global_load_u16 v33, v[2:3], off offset:34
+; GFX1250-NEXT: global_load_u16 v34, v[2:3], off offset:32
+; GFX1250-NEXT: s_wait_loadcnt 0x1e
+; GFX1250-NEXT: s_wait_xcnt 0x0
+; GFX1250-NEXT: v_dual_lshlrev_b32 v1, 16, v1 :: v_dual_lshlrev_b32 v2, 16, v4
; GFX1250-NEXT: s_wait_loadcnt 0x1c
-; GFX1250-NEXT: v_dual_lshlrev_b32 v80, 16, v5 :: v_dual_lshlrev_b32 v6, 16, v6
+; GFX1250-NEXT: v_dual_lshlrev_b32 v3, 16, v5 :: v_dual_lshlrev_b32 v4, 16, v6
; GFX1250-NEXT: s_wait_loadcnt 0x1a
-; GFX1250-NEXT: s_wait_xcnt 0x0
-; GFX1250-NEXT: v_dual_lshlrev_b32 v2, 16, v7 :: v_dual_lshlrev_b32 v3, 16, v8
+; GFX1250-NEXT: v_dual_lshlrev_b32 v5, 16, v7 :: v_dual_lshlrev_b32 v35, 16, v8
; GFX1250-NEXT: s_wait_loadcnt 0x18
-; GFX1250-NEXT: v_dual_lshlrev_b32 v7, 16, v9 :: v_dual_lshlrev_b32 v8, 16, v10
+; GFX1250-NEXT: v_dual_lshlrev_b32 v36, 16, v9 :: v_dual_lshlrev_b32 v10, 16, v10
; GFX1250-NEXT: s_wait_loadcnt 0x16
-; GFX1250-NEXT: v_dual_lshlrev_b32 v9, 16, v11 :: v_dual_lshlrev_b32 v10, 16, v12
-; GFX1250-NEXT: v_lshlrev_b32_e32 v11, 16, v4
-; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_4)
-; GFX1250-NEXT: v_cvt_f64_f32_e32 v[24:25], v7
-; GFX1250-NEXT: v_cvt_f64_f32_e32 v[22:23], v8
-; GFX1250-NEXT: v_cvt_f64_f32_e32 v[28:29], v9
-; GFX1250-NEXT: v_cvt_f64_f32_e32 v[26:27], v10
-; GFX1250-NEXT: s_wait_loadcnt 0x11
-; GFX1250-NEXT: v_dual_lshlrev_b32 v69, 16, v17 :: v_dual_lshlrev_b32 v51, 16, v16
-; GFX1250-NEXT: v_dual_lshlrev_b32 v7, 16, v13 :: v_dual_lshlrev_b32 v10, 16, v14
+; GFX1250-NEXT: v_dual_lshlrev_b32 v37, 16, v11 :: v_dual_lshlrev_b32 v38, 16, v12
+; GFX1250-NEXT: s_wait_loadcnt 0x14
+; GFX1250-NEXT: v_dual_lshlrev_b32 v39, 16, v13 :: v_dual_lshlrev_b32 v84, 16, v14
+; GFX1250-NEXT: s_wait_loadcnt 0x12
+; GFX1250-NEXT: v_dual_lshlrev_b32 v85, 16, v15 :: v_dual_lshlrev_b32 v86, 16, v16
+; GFX1250-NEXT: s_wait_loadcnt 0x10
+; GFX1250-NEXT: v_dual_lshlrev_b32 v87, 16, v17 :: v_dual_lshlrev_b32 v6, 16, v18
+; GFX1250-NEXT: s_wait_loadcnt 0xe
+; GFX1250-NEXT: v_dual_lshlrev_b32 v7, 16, v19 :: v_dual_lshlrev_b32 v96, 16, v20
; GFX1250-NEXT: s_wait_loadcnt 0xc
-; GFX1250-NEXT: v_dual_lshlrev_b32 v68, 16, v21 :: v_dual_lshlrev_b32 v30, 16, v30
-; GFX1250-NEXT: s_wait_loadcnt 0x9
-; GFX1250-NEXT: v_dual_lshlrev_b32 v52, 16, v31 :: v_dual_lshlrev_b32 v65, 16, v33
-; GFX1250-NEXT: s_wait_loadcnt 0x7
-; GFX1250-NEXT: v_dual_lshlrev_b32 v54, 16, v32 :: v_dual_lshlrev_b32 v35, 16, v35
+; GFX1250-NEXT: v_dual_lshlrev_b32 v11, 16, v21 :: v_dual_lshlrev_b32 v12, 16, v22
+; GFX1250-NEXT: v_cvt_f64_f32_e32 v[8:9], v6
+; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX1250-NEXT: v_cvt_f64_f32_e32 v[6:7], v7
+; GFX1250-NEXT: s_wait_loadcnt 0xa
+; GFX1250-NEXT: v_dual_lshlrev_b32 v18, 16, v23 :: v_dual_lshlrev_b32 v19, 16, v24
+; GFX1250-NEXT: v_cvt_f64_f32_e32 v[16:17], v11
+; GFX1250-NEXT: v_cvt_f64_f32_e32 v[14:15], v12
+; GFX1250-NEXT: s_wait_loadcnt 0x8
+; GFX1250-NEXT: v_dual_lshlrev_b32 v20, 16, v25 :: v_dual_lshlrev_b32 v21, 16, v26
; GFX1250-NEXT: s_wait_loadcnt 0x6
-; GFX1250-NEXT: v_dual_lshlrev_b32 v34, 16, v34 :: v_dual_lshlrev_b32 v53, 16, v36
+; GFX1250-NEXT: v_dual_lshlrev_b32 v52, 16, v27 :: v_dual_lshlrev_b32 v53, 16, v28
; GFX1250-NEXT: s_wait_loadcnt 0x4
-; GFX1250-NEXT: v_dual_lshlrev_b32 v64, 16, v37 :: v_dual_lshlrev_b32 v38, 16, v38
-; GFX1250-NEXT: s_wait_loadcnt 0x1
-; GFX1250-NEXT: v_dual_lshlrev_b32 v39, 16, v39 :: v_dual_lshlrev_b32 v49, 16, v49
+; GFX1250-NEXT: v_dual_lshlrev_b32 v64, 16, v29 :: v_dual_lshlrev_b32 v65, 16, v30
+; GFX1250-NEXT: s_wait_loadcnt 0x2
+; GFX1250-NEXT: v_dual_lshlrev_b32 v68, 16, v31 :: v_dual_lshlrev_b32 v69, 16, v32
; GFX1250-NEXT: s_wait_loadcnt 0x0
-; GFX1250-NEXT: v_dual_lshlrev_b32 v66, 16, v50 :: v_dual_lshlrev_b32 v48, 16, v48
-; GFX1250-NEXT: v_cvt_f64_f32_e32 v[32:33], v30
-; GFX1250-NEXT: v_cvt_f64_f32_e32 v[30:31], v51
-; GFX1250-NEXT: v_cvt_f64_f32_e32 v[36:37], v52
-; GFX1250-NEXT: v_cvt_f64_f32_e32 v[50:51], v53
-; GFX1250-NEXT: v_cvt_f64_f32_e32 v[52:53], v49
-; GFX1250-NEXT: v_lshlrev_b32_e32 v14, 16, v15
-; GFX1250-NEXT: v_dual_lshlrev_b32 v15, 16, v19 :: v_dual_lshlrev_b32 v18, 16, v18
-; GFX1250-NEXT: v_lshlrev_b32_e32 v19, 16, v20
+; GFX1250-NEXT: v_dual_lshlrev_b32 v80, 16, v33 :: v_dual_lshlrev_b32 v81, 16, v34
+; GFX1250-NEXT: v_cvt_f64_f32_e32 v[30:31], v4
+; GFX1250-NEXT: v_cvt_f64_f32_e32 v[24:25], v5
+; GFX1250-NEXT: v_cvt_f64_f32_e32 v[22:23], v35
+; GFX1250-NEXT: v_cvt_f64_f32_e32 v[12:13], v36
+; GFX1250-NEXT: v_cvt_f64_f32_e32 v[4:5], v37
+; GFX1250-NEXT: v_cvt_f64_f32_e32 v[36:37], v18
+; GFX1250-NEXT: v_cvt_f64_f32_e32 v[34:35], v19
+; GFX1250-NEXT: v_cvt_f64_f32_e32 v[50:51], v20
+; GFX1250-NEXT: v_cvt_f64_f32_e32 v[48:49], v21
+; GFX1250-NEXT: v_cvt_f64_f32_e32 v[54:55], v52
+; GFX1250-NEXT: v_cvt_f64_f32_e32 v[52:53], v53
+; GFX1250-NEXT: v_cvt_f64_f32_e32 v[66:67], v64
+; GFX1250-NEXT: v_cvt_f64_f32_e32 v[64:65], v65
; GFX1250-NEXT: v_cvt_f64_f32_e32 v[70:71], v68
; GFX1250-NEXT: v_cvt_f64_f32_e32 v[68:69], v69
-; GFX1250-NEXT: v_cvt_f64_f32_e32 v[16:17], v14
-; GFX1250-NEXT: v_cvt_f64_f32_e32 v[14:15], v15
-; GFX1250-NEXT: v_cvt_f64_f32_e32 v[20:21], v19
-; GFX1250-NEXT: v_cvt_f64_f32_e32 v[18:19], v18
-; GFX1250-NEXT: v_cvt_f64_f32_e32 v[12:13], v10
-; GFX1250-NEXT: scratch_store_b128 v0, v[22:25], off offset:240
+; GFX1250-NEXT: v_cvt_f64_f32_e32 v[82:83], v80
+; GFX1250-NEXT: v_cvt_f64_f32_e32 v[80:81], v81
+; GFX1250-NEXT: v_cvt_f64_f32_e32 v[28:29], v1
+; GFX1250-NEXT: v_cvt_f64_f32_e32 v[26:27], v2
+; GFX1250-NEXT: v_cvt_f64_f32_e32 v[32:33], v3
+; GFX1250-NEXT: v_cvt_f64_f32_e32 v[10:11], v10
+; GFX1250-NEXT: v_cvt_f64_f32_e32 v[2:3], v38
+; GFX1250-NEXT: v_cvt_f64_f32_e32 v[20:21], v39
+; GFX1250-NEXT: v_cvt_f64_f32_e32 v[18:19], v84
+; GFX1250-NEXT: scratch_store_b128 v0, v[6:9], off offset:240
; GFX1250-NEXT: s_wait_xcnt 0x0
-; GFX1250-NEXT: v_cvt_f64_f32_e32 v[22:23], v54
-; GFX1250-NEXT: scratch_store_b128 v0, v[26:29], off offset:224
+; GFX1250-NEXT: v_cvt_f64_f32_e32 v[8:9], v85
+; GFX1250-NEXT: v_cvt_f64_f32_e32 v[6:7], v86
+; GFX1250-NEXT: scratch_store_b128 v0, v[14:17], off offset:224
; GFX1250-NEXT: s_wait_xcnt 0x0
-; GFX1250-NEXT: v_cvt_f64_f32_e32 v[28:29], v66
-; GFX1250-NEXT: v_cvt_f64_f32_e32 v[26:27], v48
-; GFX1250-NEXT: v_cvt_f64_f32_e32 v[54:55], v39
-; GFX1250-NEXT: v_cvt_f64_f32_e32 v[24:25], v38
-; GFX1250-NEXT: v_cvt_f64_f32_e32 v[66:67], v64
-; GFX1250-NEXT: v_cvt_f64_f32_e32 v[64:65], v65
-; GFX1250-NEXT: v_cvt_f64_f32_e32 v[48:49], v34
-; GFX1250-NEXT: v_cvt_f64_f32_e32 v[34:35], v35
-; GFX1250-NEXT: v_cvt_f64_f32_e32 v[10:11], v11
-; GFX1250-NEXT: v_cvt_f64_f32_e32 v[82:83], v7
-; GFX1250-NEXT: v_cvt_f64_f32_e32 v[80:81], v80
-; GFX1250-NEXT: v_cvt_f64_f32_e32 v[8:9], v3
-; GFX1250-NEXT: v_cvt_f64_f32_e32 v[6:7], v6
-; GFX1250-NEXT: v_cvt_f64_f32_e32 v[4:5], v1
-; GFX1250-NEXT: v_cvt_f64_f32_e32 v[2:3], v2
+; GFX1250-NEXT: v_cvt_f64_f32_e32 v[16:17], v87
+; GFX1250-NEXT: v_cvt_f64_f32_e32 v[14:15], v96
; GFX1250-NEXT: s_clause 0xd
-; GFX1250-NEXT: scratch_store_b128 v0, v[26:29], off offset:208
-; GFX1250-NEXT: scratch_store_b128 v0, v[52:55], off offset:192
-; GFX1250-NEXT: scratch_store_b128 v0, v[22:25], off offset:176
+; GFX1250-NEXT: scratch_store_b128 v0, v[34:37], off offset:208
+; GFX1250-NEXT: scratch_store_b128 v0, v[48:51], off offset:192
+; GFX1250-NEXT: scratch_store_b128 v0, v[52:55], off offset:176
; GFX1250-NEXT: scratch_store_b128 v0, v[64:67], off offset:160
-; GFX1250-NEXT: scratch_store_b128 v0, v[48:51], off offset:144
-; GFX1250-NEXT: scratch_store_b128 v0, v[34:37], off offset:128
-; GFX1250-NEXT: scratch_store_b128 v0, v[30:33], off offset:112
-; GFX1250-NEXT: scratch_store_b128 v0, v[68:71], off offset:96
-; GFX1250-NEXT: scratch_store_b128 v0, v[18:21], off offset:80
-; GFX1250-NEXT: scratch_store_b128 v0, v[14:17], off offset:64
-; GFX1250-NEXT: scratch_store_b128 v0, v[10:13], off offset:48
-; GFX1250-NEXT: scratch_store_b128 v0, v[80:83], off offset:32
+; GFX1250-NEXT: scratch_store_b128 v0, v[68:71], off offset:144
+; GFX1250-NEXT: scratch_store_b128 v0, v[80:83], off offset:128
+; GFX1250-NEXT: scratch_store_b128 v0, v[26:29], off offset:112
+; GFX1250-NEXT: scratch_store_b128 v0, v[30:33], off offset:96
+; GFX1250-NEXT: scratch_store_b128 v0, v[22:25], off offset:80
+; GFX1250-NEXT: scratch_store_b128 v0, v[10:13], off offset:64
+; GFX1250-NEXT: scratch_store_b128 v0, v[2:5], off offset:48
+; GFX1250-NEXT: scratch_store_b128 v0, v[18:21], off offset:32
; GFX1250-NEXT: scratch_store_b128 v0, v[6:9], off offset:16
-; GFX1250-NEXT: scratch_store_b128 v0, v[2:5], off
+; GFX1250-NEXT: scratch_store_b128 v0, v[14:17], off
; GFX1250-NEXT: s_set_pc_i64 s[30:31]
%load = load <32 x bfloat>, ptr addrspace(1) %ptr
%fpext = fpext <32 x bfloat> %load to <32 x double>
@@ -13441,7 +13610,7 @@ define bfloat @v_fadd_bf16_fpimm_0(bfloat %arg0) #0 {
; GFX1250: ; %bb.0:
; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0
; GFX1250-NEXT: s_wait_kmcnt 0x0
-; GFX1250-NEXT: v_pk_add_bf16 v0, v0, 1.0
+; GFX1250-NEXT: v_pk_add_bf16 v0, v0, 1.0 op_sel:[0,1]
; GFX1250-NEXT: s_set_pc_i64 s[30:31]
%add = fadd bfloat %arg0, 1.0
ret bfloat %add
@@ -33768,34 +33937,34 @@ define <2 x i64> @v_fptosi_v2bf16_to_v2i64(<2 x bfloat> %x) #0 {
; GFX950-LABEL: v_fptosi_v2bf16_to_v2i64:
; GFX950: ; %bb.0:
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX950-NEXT: v_lshlrev_b32_e32 v1, 16, v0
+; GFX950-NEXT: v_and_b32_e32 v1, 0xffff0000, v0
; GFX950-NEXT: v_trunc_f32_e32 v1, v1
; GFX950-NEXT: s_mov_b32 s0, 0x2f800000
; GFX950-NEXT: v_mul_f32_e64 v2, |v1|, s0
-; GFX950-NEXT: v_and_b32_e32 v0, 0xffff0000, v0
; GFX950-NEXT: v_floor_f32_e32 v2, v2
; GFX950-NEXT: s_mov_b32 s1, 0xcf800000
-; GFX950-NEXT: v_trunc_f32_e32 v4, v0
; GFX950-NEXT: v_fma_f32 v3, v2, s1, |v1|
-; GFX950-NEXT: v_mul_f32_e64 v0, |v4|, s0
-; GFX950-NEXT: v_cvt_u32_f32_e32 v3, v3
-; GFX950-NEXT: v_floor_f32_e32 v0, v0
; GFX950-NEXT: v_cvt_u32_f32_e32 v2, v2
-; GFX950-NEXT: v_fma_f32 v5, v0, s1, |v4|
-; GFX950-NEXT: v_cvt_u32_f32_e32 v5, v5
+; GFX950-NEXT: v_cvt_u32_f32_e32 v3, v3
+; GFX950-NEXT: v_lshlrev_b32_e32 v0, 16, v0
; GFX950-NEXT: v_ashrrev_i32_e32 v1, 31, v1
-; GFX950-NEXT: v_cvt_u32_f32_e32 v6, v0
-; GFX950-NEXT: v_xor_b32_e32 v3, v3, v1
-; GFX950-NEXT: v_xor_b32_e32 v2, v2, v1
-; GFX950-NEXT: v_sub_co_u32_e32 v0, vcc, v3, v1
-; GFX950-NEXT: v_ashrrev_i32_e32 v3, 31, v4
-; GFX950-NEXT: s_nop 0
-; GFX950-NEXT: v_subb_co_u32_e32 v1, vcc, v2, v1, vcc
-; GFX950-NEXT: v_xor_b32_e32 v2, v5, v3
-; GFX950-NEXT: v_xor_b32_e32 v4, v6, v3
-; GFX950-NEXT: v_sub_co_u32_e32 v2, vcc, v2, v3
+; GFX950-NEXT: v_trunc_f32_e32 v0, v0
+; GFX950-NEXT: v_xor_b32_e32 v4, v2, v1
+; GFX950-NEXT: v_xor_b32_e32 v2, v3, v1
+; GFX950-NEXT: v_mul_f32_e64 v3, |v0|, s0
+; GFX950-NEXT: v_floor_f32_e32 v3, v3
+; GFX950-NEXT: v_fma_f32 v5, v3, s1, |v0|
+; GFX950-NEXT: v_cvt_u32_f32_e32 v5, v5
+; GFX950-NEXT: v_cvt_u32_f32_e32 v6, v3
+; GFX950-NEXT: v_sub_co_u32_e32 v2, vcc, v2, v1
+; GFX950-NEXT: s_nop 1
+; GFX950-NEXT: v_subb_co_u32_e32 v3, vcc, v4, v1, vcc
+; GFX950-NEXT: v_ashrrev_i32_e32 v1, 31, v0
+; GFX950-NEXT: v_xor_b32_e32 v0, v5, v1
+; GFX950-NEXT: v_xor_b32_e32 v4, v6, v1
+; GFX950-NEXT: v_sub_co_u32_e32 v0, vcc, v0, v1
; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_subb_co_u32_e32 v3, vcc, v4, v3, vcc
+; GFX950-NEXT: v_subb_co_u32_e32 v1, vcc, v4, v1, vcc
; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_fptosi_v2bf16_to_v2i64:
@@ -33880,18 +34049,18 @@ define <2 x i64> @v_fptosi_v2bf16_to_v2i64(<2 x bfloat> %x) #0 {
; GFX1250-NEXT: v_floor_f32_e32 v4, v0
; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
; GFX1250-NEXT: v_floor_f32_e32 v5, v2
-; GFX1250-NEXT: v_dual_ashrrev_i32 v0, 31, v1 :: v_dual_ashrrev_i32 v2, 31, v3
+; GFX1250-NEXT: v_dual_ashrrev_i32 v2, 31, v3 :: v_dual_ashrrev_i32 v0, 31, v1
; GFX1250-NEXT: v_fma_f32 v6, 0xcf800000, v4, |v1|
; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_3)
-; GFX1250-NEXT: v_fma_f32 v3, 0xcf800000, v5, |v3|
+; GFX1250-NEXT: v_fma_f32 v1, 0xcf800000, v5, |v3|
; GFX1250-NEXT: v_cvt_u32_f32_e32 v4, v4
; GFX1250-NEXT: v_cvt_u32_f32_e32 v7, v5
-; GFX1250-NEXT: v_mov_b32_e32 v1, v0
+; GFX1250-NEXT: v_mov_b32_e32 v3, v2
; GFX1250-NEXT: v_cvt_u32_f32_e32 v6, v6
-; GFX1250-NEXT: v_cvt_u32_f32_e32 v8, v3
-; GFX1250-NEXT: v_dual_mov_b32 v3, v2 :: v_dual_bitop2_b32 v5, v4, v0 bitop3:0x14
+; GFX1250-NEXT: v_cvt_u32_f32_e32 v8, v1
+; GFX1250-NEXT: v_mov_b32_e32 v1, v0
+; GFX1250-NEXT: v_xor_b32_e32 v5, v4, v0
; GFX1250-NEXT: v_xor_b32_e32 v7, v7, v2
-; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
; GFX1250-NEXT: v_xor_b32_e32 v4, v6, v0
; GFX1250-NEXT: v_xor_b32_e32 v6, v8, v2
; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
@@ -34082,48 +34251,47 @@ define <3 x i64> @v_fptosi_v3bf16_to_v3i64(<3 x bfloat> %x) #0 {
; GFX950-LABEL: v_fptosi_v3bf16_to_v3i64:
; GFX950: ; %bb.0:
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX950-NEXT: v_lshlrev_b32_e32 v2, 16, v0
-; GFX950-NEXT: v_trunc_f32_e32 v2, v2
+; GFX950-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX950-NEXT: v_trunc_f32_e32 v1, v1
; GFX950-NEXT: s_mov_b32 s0, 0x2f800000
-; GFX950-NEXT: v_mul_f32_e64 v3, |v2|, s0
-; GFX950-NEXT: v_floor_f32_e32 v3, v3
+; GFX950-NEXT: v_mul_f32_e64 v2, |v1|, s0
+; GFX950-NEXT: v_floor_f32_e32 v2, v2
; GFX950-NEXT: s_mov_b32 s1, 0xcf800000
-; GFX950-NEXT: v_fma_f32 v4, v3, s1, |v2|
-; GFX950-NEXT: v_and_b32_e32 v0, 0xffff0000, v0
-; GFX950-NEXT: v_cvt_u32_f32_e32 v4, v4
-; GFX950-NEXT: v_trunc_f32_e32 v5, v0
+; GFX950-NEXT: v_fma_f32 v3, v2, s1, |v1|
+; GFX950-NEXT: v_and_b32_e32 v4, 0xffff0000, v0
; GFX950-NEXT: v_cvt_u32_f32_e32 v3, v3
-; GFX950-NEXT: v_mul_f32_e64 v0, |v5|, s0
-; GFX950-NEXT: v_floor_f32_e32 v0, v0
-; GFX950-NEXT: v_ashrrev_i32_e32 v2, 31, v2
-; GFX950-NEXT: v_fma_f32 v6, v0, s1, |v5|
-; GFX950-NEXT: v_xor_b32_e32 v4, v4, v2
-; GFX950-NEXT: v_cvt_u32_f32_e32 v7, v6
-; GFX950-NEXT: v_lshlrev_b32_e32 v1, 16, v1
-; GFX950-NEXT: v_xor_b32_e32 v3, v3, v2
-; GFX950-NEXT: v_cvt_u32_f32_e32 v8, v0
-; GFX950-NEXT: v_sub_co_u32_e32 v0, vcc, v4, v2
-; GFX950-NEXT: v_trunc_f32_e32 v1, v1
-; GFX950-NEXT: s_nop 0
-; GFX950-NEXT: v_subb_co_u32_e32 v6, vcc, v3, v2, vcc
-; GFX950-NEXT: v_ashrrev_i32_e32 v3, 31, v5
-; GFX950-NEXT: v_mul_f32_e64 v5, |v1|, s0
-; GFX950-NEXT: v_floor_f32_e32 v5, v5
-; GFX950-NEXT: v_xor_b32_e32 v2, v7, v3
-; GFX950-NEXT: v_fma_f32 v7, v5, s1, |v1|
-; GFX950-NEXT: v_cvt_u32_f32_e32 v7, v7
-; GFX950-NEXT: v_cvt_u32_f32_e32 v5, v5
-; GFX950-NEXT: v_xor_b32_e32 v4, v8, v3
-; GFX950-NEXT: v_sub_co_u32_e32 v2, vcc, v2, v3
+; GFX950-NEXT: v_trunc_f32_e32 v6, v4
+; GFX950-NEXT: v_cvt_u32_f32_e32 v2, v2
+; GFX950-NEXT: v_mul_f32_e64 v4, |v6|, s0
+; GFX950-NEXT: v_floor_f32_e32 v4, v4
; GFX950-NEXT: v_ashrrev_i32_e32 v1, 31, v1
+; GFX950-NEXT: v_fma_f32 v5, v4, s1, |v6|
+; GFX950-NEXT: v_xor_b32_e32 v3, v3, v1
+; GFX950-NEXT: v_cvt_u32_f32_e32 v7, v5
+; GFX950-NEXT: v_lshlrev_b32_e32 v0, 16, v0
+; GFX950-NEXT: v_xor_b32_e32 v2, v2, v1
+; GFX950-NEXT: v_cvt_u32_f32_e32 v8, v4
+; GFX950-NEXT: v_sub_co_u32_e32 v4, vcc, v3, v1
+; GFX950-NEXT: v_trunc_f32_e32 v0, v0
; GFX950-NEXT: s_nop 0
-; GFX950-NEXT: v_subb_co_u32_e32 v3, vcc, v4, v3, vcc
-; GFX950-NEXT: v_xor_b32_e32 v4, v7, v1
-; GFX950-NEXT: v_xor_b32_e32 v5, v5, v1
-; GFX950-NEXT: v_sub_co_u32_e32 v4, vcc, v4, v1
+; GFX950-NEXT: v_subb_co_u32_e32 v5, vcc, v2, v1, vcc
+; GFX950-NEXT: v_ashrrev_i32_e32 v1, 31, v6
+; GFX950-NEXT: v_mul_f32_e64 v6, |v0|, s0
+; GFX950-NEXT: v_floor_f32_e32 v6, v6
+; GFX950-NEXT: v_xor_b32_e32 v2, v7, v1
+; GFX950-NEXT: v_fma_f32 v7, v6, s1, |v0|
+; GFX950-NEXT: v_cvt_u32_f32_e32 v7, v7
+; GFX950-NEXT: v_cvt_u32_f32_e32 v6, v6
+; GFX950-NEXT: v_xor_b32_e32 v3, v8, v1
+; GFX950-NEXT: v_sub_co_u32_e32 v2, vcc, v2, v1
; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_subb_co_u32_e32 v5, vcc, v5, v1, vcc
-; GFX950-NEXT: v_mov_b32_e32 v1, v6
+; GFX950-NEXT: v_subb_co_u32_e32 v3, vcc, v3, v1, vcc
+; GFX950-NEXT: v_ashrrev_i32_e32 v1, 31, v0
+; GFX950-NEXT: v_xor_b32_e32 v0, v7, v1
+; GFX950-NEXT: v_xor_b32_e32 v6, v6, v1
+; GFX950-NEXT: v_sub_co_u32_e32 v0, vcc, v0, v1
+; GFX950-NEXT: s_nop 1
+; GFX950-NEXT: v_subb_co_u32_e32 v1, vcc, v6, v1, vcc
; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_fptosi_v3bf16_to_v3i64:
@@ -34219,47 +34387,46 @@ define <3 x i64> @v_fptosi_v3bf16_to_v3i64(<3 x bfloat> %x) #0 {
; GFX1250: ; %bb.0:
; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0
; GFX1250-NEXT: s_wait_kmcnt 0x0
-; GFX1250-NEXT: s_mov_b32 s0, 0xffff0000
-; GFX1250-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX1250-NEXT: v_dual_lshlrev_b32 v2, 16, v0 :: v_dual_bitop2_b32 v0, s0, v0 bitop3:0x40
-; GFX1250-NEXT: v_trunc_f32_e32 v6, v2
-; GFX1250-NEXT: v_lshlrev_b32_e32 v1, 16, v1
+; GFX1250-NEXT: v_dual_lshlrev_b32 v1, 16, v1 :: v_dual_lshlrev_b32 v2, 16, v0
+; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_3)
+; GFX1250-NEXT: v_trunc_f32_e32 v6, v1
+; GFX1250-NEXT: v_and_b32_e32 v0, 0xffff0000, v0
+; GFX1250-NEXT: v_trunc_f32_e32 v7, v2
; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
-; GFX1250-NEXT: v_trunc_f32_e32 v7, v0
-; GFX1250-NEXT: v_ashrrev_i32_e32 v0, 31, v6
-; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_4)
-; GFX1250-NEXT: v_trunc_f32_e32 v8, v1
+; GFX1250-NEXT: v_ashrrev_i32_e32 v4, 31, v6
+; GFX1250-NEXT: v_trunc_f32_e32 v8, v0
; GFX1250-NEXT: v_mul_f32_e64 v1, 0x2f800000, |v6|
+; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
; GFX1250-NEXT: v_mul_f32_e64 v3, 0x2f800000, |v7|
-; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_4)
-; GFX1250-NEXT: v_dual_ashrrev_i32 v2, 31, v7 :: v_dual_ashrrev_i32 v4, 31, v8
-; GFX1250-NEXT: v_mul_f32_e64 v5, 0x2f800000, |v8|
-; GFX1250-NEXT: v_floor_f32_e32 v9, v1
+; GFX1250-NEXT: v_dual_ashrrev_i32 v0, 31, v7 :: v_dual_ashrrev_i32 v2, 31, v8
+; GFX1250-NEXT: v_mul_f32_e64 v9, 0x2f800000, |v8|
; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
-; GFX1250-NEXT: v_floor_f32_e32 v10, v3
-; GFX1250-NEXT: v_dual_mov_b32 v1, v0 :: v_dual_mov_b32 v3, v2
+; GFX1250-NEXT: v_floor_f32_e32 v10, v1
+; GFX1250-NEXT: v_floor_f32_e32 v11, v3
; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
-; GFX1250-NEXT: v_floor_f32_e32 v11, v5
-; GFX1250-NEXT: v_fma_f32 v6, 0xcf800000, v9, |v6|
-; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_4)
-; GFX1250-NEXT: v_fma_f32 v7, 0xcf800000, v10, |v7|
-; GFX1250-NEXT: v_cvt_u32_f32_e32 v9, v9
+; GFX1250-NEXT: v_dual_mov_b32 v5, v4 :: v_dual_mov_b32 v3, v2
+; GFX1250-NEXT: v_floor_f32_e32 v9, v9
+; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
+; GFX1250-NEXT: v_fma_f32 v6, 0xcf800000, v10, |v6|
+; GFX1250-NEXT: v_fma_f32 v7, 0xcf800000, v11, |v7|
; GFX1250-NEXT: v_cvt_u32_f32_e32 v10, v10
-; GFX1250-NEXT: v_fma_f32 v8, 0xcf800000, v11, |v8|
-; GFX1250-NEXT: v_cvt_u32_f32_e32 v6, v6
; GFX1250-NEXT: v_cvt_u32_f32_e32 v11, v11
+; GFX1250-NEXT: v_fma_f32 v8, 0xcf800000, v9, |v8|
+; GFX1250-NEXT: v_cvt_u32_f32_e32 v9, v9
; GFX1250-NEXT: v_cvt_u32_f32_e32 v12, v7
-; GFX1250-NEXT: v_dual_mov_b32 v5, v4 :: v_dual_bitop2_b32 v7, v9, v0 bitop3:0x14
-; GFX1250-NEXT: v_cvt_u32_f32_e32 v13, v8
-; GFX1250-NEXT: v_xor_b32_e32 v6, v6, v0
-; GFX1250-NEXT: v_xor_b32_e32 v9, v10, v2
-; GFX1250-NEXT: v_xor_b32_e32 v8, v12, v2
-; GFX1250-NEXT: v_xor_b32_e32 v11, v11, v4
+; GFX1250-NEXT: v_cvt_u32_f32_e32 v13, v6
+; GFX1250-NEXT: v_dual_mov_b32 v1, v0 :: v_dual_bitop2_b32 v7, v11, v0 bitop3:0x14
+; GFX1250-NEXT: v_cvt_u32_f32_e32 v8, v8
+; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX1250-NEXT: v_xor_b32_e32 v6, v12, v0
+; GFX1250-NEXT: v_xor_b32_e32 v9, v9, v2
+; GFX1250-NEXT: v_xor_b32_e32 v11, v10, v4
; GFX1250-NEXT: v_xor_b32_e32 v10, v13, v4
+; GFX1250-NEXT: v_xor_b32_e32 v8, v8, v2
; GFX1250-NEXT: v_sub_nc_u64_e32 v[0:1], v[6:7], v[0:1]
-; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
-; GFX1250-NEXT: v_sub_nc_u64_e32 v[2:3], v[8:9], v[2:3]
+; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
; GFX1250-NEXT: v_sub_nc_u64_e32 v[4:5], v[10:11], v[4:5]
+; GFX1250-NEXT: v_sub_nc_u64_e32 v[2:3], v[8:9], v[2:3]
; GFX1250-NEXT: s_set_pc_i64 s[30:31]
%op = fptosi <3 x bfloat> %x to <3 x i64>
ret <3 x i64> %op
@@ -34493,60 +34660,59 @@ define <4 x i64> @v_fptosi_v4bf16_to_v4i64(<4 x bfloat> %x) #0 {
; GFX950-LABEL: v_fptosi_v4bf16_to_v4i64:
; GFX950: ; %bb.0:
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX950-NEXT: v_lshlrev_b32_e32 v2, 16, v0
+; GFX950-NEXT: v_and_b32_e32 v2, 0xffff0000, v1
; GFX950-NEXT: v_trunc_f32_e32 v2, v2
; GFX950-NEXT: s_mov_b32 s0, 0x2f800000
; GFX950-NEXT: v_mul_f32_e64 v3, |v2|, s0
+; GFX950-NEXT: v_lshlrev_b32_e32 v1, 16, v1
; GFX950-NEXT: v_floor_f32_e32 v3, v3
; GFX950-NEXT: s_mov_b32 s1, 0xcf800000
+; GFX950-NEXT: v_trunc_f32_e32 v1, v1
; GFX950-NEXT: v_fma_f32 v4, v3, s1, |v2|
-; GFX950-NEXT: v_and_b32_e32 v0, 0xffff0000, v0
+; GFX950-NEXT: v_mul_f32_e64 v5, |v1|, s0
; GFX950-NEXT: v_cvt_u32_f32_e32 v4, v4
-; GFX950-NEXT: v_trunc_f32_e32 v5, v0
+; GFX950-NEXT: v_floor_f32_e32 v5, v5
; GFX950-NEXT: v_cvt_u32_f32_e32 v3, v3
-; GFX950-NEXT: v_mul_f32_e64 v0, |v5|, s0
-; GFX950-NEXT: v_floor_f32_e32 v0, v0
+; GFX950-NEXT: v_fma_f32 v6, v5, s1, |v1|
+; GFX950-NEXT: v_cvt_u32_f32_e32 v8, v6
; GFX950-NEXT: v_ashrrev_i32_e32 v2, 31, v2
-; GFX950-NEXT: v_fma_f32 v6, v0, s1, |v5|
; GFX950-NEXT: v_xor_b32_e32 v4, v4, v2
-; GFX950-NEXT: v_cvt_u32_f32_e32 v6, v6
; GFX950-NEXT: v_xor_b32_e32 v3, v3, v2
-; GFX950-NEXT: v_cvt_u32_f32_e32 v7, v0
-; GFX950-NEXT: v_sub_co_u32_e32 v0, vcc, v4, v2
-; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_subb_co_u32_e32 v8, vcc, v3, v2, vcc
-; GFX950-NEXT: v_ashrrev_i32_e32 v3, 31, v5
-; GFX950-NEXT: v_lshlrev_b32_e32 v5, 16, v1
-; GFX950-NEXT: v_trunc_f32_e32 v5, v5
-; GFX950-NEXT: v_xor_b32_e32 v2, v6, v3
-; GFX950-NEXT: v_mul_f32_e64 v6, |v5|, s0
-; GFX950-NEXT: v_floor_f32_e32 v6, v6
-; GFX950-NEXT: v_xor_b32_e32 v4, v7, v3
-; GFX950-NEXT: v_fma_f32 v7, v6, s1, |v5|
-; GFX950-NEXT: v_cvt_u32_f32_e32 v7, v7
-; GFX950-NEXT: v_and_b32_e32 v1, 0xffff0000, v1
-; GFX950-NEXT: v_sub_co_u32_e32 v2, vcc, v2, v3
-; GFX950-NEXT: v_ashrrev_i32_e32 v5, 31, v5
-; GFX950-NEXT: v_trunc_f32_e32 v1, v1
-; GFX950-NEXT: v_subb_co_u32_e32 v3, vcc, v4, v3, vcc
-; GFX950-NEXT: v_xor_b32_e32 v4, v7, v5
-; GFX950-NEXT: v_mul_f32_e64 v7, |v1|, s0
-; GFX950-NEXT: v_floor_f32_e32 v7, v7
-; GFX950-NEXT: v_cvt_u32_f32_e32 v6, v6
-; GFX950-NEXT: v_fma_f32 v9, v7, s1, |v1|
-; GFX950-NEXT: v_cvt_u32_f32_e32 v9, v9
-; GFX950-NEXT: v_cvt_u32_f32_e32 v7, v7
-; GFX950-NEXT: v_xor_b32_e32 v6, v6, v5
-; GFX950-NEXT: v_sub_co_u32_e32 v4, vcc, v4, v5
+; GFX950-NEXT: v_cvt_u32_f32_e32 v5, v5
+; GFX950-NEXT: v_sub_co_u32_e32 v6, vcc, v4, v2
; GFX950-NEXT: v_ashrrev_i32_e32 v1, 31, v1
+; GFX950-NEXT: v_and_b32_e32 v4, 0xffff0000, v0
+; GFX950-NEXT: v_subb_co_u32_e32 v7, vcc, v3, v2, vcc
+; GFX950-NEXT: v_xor_b32_e32 v3, v8, v1
+; GFX950-NEXT: v_trunc_f32_e32 v8, v4
+; GFX950-NEXT: v_mul_f32_e64 v4, |v8|, s0
+; GFX950-NEXT: v_floor_f32_e32 v4, v4
+; GFX950-NEXT: v_xor_b32_e32 v2, v5, v1
+; GFX950-NEXT: v_fma_f32 v5, v4, s1, |v8|
+; GFX950-NEXT: v_cvt_u32_f32_e32 v9, v5
+; GFX950-NEXT: v_lshlrev_b32_e32 v0, 16, v0
+; GFX950-NEXT: v_cvt_u32_f32_e32 v10, v4
+; GFX950-NEXT: v_sub_co_u32_e32 v4, vcc, v3, v1
+; GFX950-NEXT: v_trunc_f32_e32 v0, v0
; GFX950-NEXT: s_nop 0
-; GFX950-NEXT: v_subb_co_u32_e32 v5, vcc, v6, v5, vcc
-; GFX950-NEXT: v_xor_b32_e32 v6, v9, v1
-; GFX950-NEXT: v_xor_b32_e32 v7, v7, v1
-; GFX950-NEXT: v_sub_co_u32_e32 v6, vcc, v6, v1
+; GFX950-NEXT: v_subb_co_u32_e32 v5, vcc, v2, v1, vcc
+; GFX950-NEXT: v_ashrrev_i32_e32 v1, 31, v8
+; GFX950-NEXT: v_mul_f32_e64 v8, |v0|, s0
+; GFX950-NEXT: v_floor_f32_e32 v8, v8
+; GFX950-NEXT: v_xor_b32_e32 v2, v9, v1
+; GFX950-NEXT: v_fma_f32 v9, v8, s1, |v0|
+; GFX950-NEXT: v_cvt_u32_f32_e32 v9, v9
+; GFX950-NEXT: v_cvt_u32_f32_e32 v8, v8
+; GFX950-NEXT: v_xor_b32_e32 v3, v10, v1
+; GFX950-NEXT: v_sub_co_u32_e32 v2, vcc, v2, v1
+; GFX950-NEXT: s_nop 1
+; GFX950-NEXT: v_subb_co_u32_e32 v3, vcc, v3, v1, vcc
+; GFX950-NEXT: v_ashrrev_i32_e32 v1, 31, v0
+; GFX950-NEXT: v_xor_b32_e32 v0, v9, v1
+; GFX950-NEXT: v_xor_b32_e32 v8, v8, v1
+; GFX950-NEXT: v_sub_co_u32_e32 v0, vcc, v0, v1
; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_subb_co_u32_e32 v7, vcc, v7, v1, vcc
-; GFX950-NEXT: v_mov_b32_e32 v1, v8
+; GFX950-NEXT: v_subb_co_u32_e32 v1, vcc, v8, v1, vcc
; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_fptosi_v4bf16_to_v4i64:
@@ -34665,56 +34831,56 @@ define <4 x i64> @v_fptosi_v4bf16_to_v4i64(<4 x bfloat> %x) #0 {
; GFX1250: ; %bb.0:
; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0
; GFX1250-NEXT: s_wait_kmcnt 0x0
+; GFX1250-NEXT: v_and_b32_e32 v2, 0xffff0000, v1
; GFX1250-NEXT: s_mov_b32 s0, 0xffff0000
-; GFX1250-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
-; GFX1250-NEXT: v_dual_lshlrev_b32 v2, 16, v0 :: v_dual_bitop2_b32 v0, s0, v0 bitop3:0x40
-; GFX1250-NEXT: s_mov_b32 s0, 0xffff0000
-; GFX1250-NEXT: v_dual_lshlrev_b32 v3, 16, v1 :: v_dual_bitop2_b32 v1, s0, v1 bitop3:0x40
-; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
-; GFX1250-NEXT: v_trunc_f32_e32 v7, v2
-; GFX1250-NEXT: v_trunc_f32_e32 v8, v0
+; GFX1250-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(VALU_DEP_3)
+; GFX1250-NEXT: v_dual_lshlrev_b32 v1, 16, v1 :: v_dual_bitop2_b32 v3, s0, v0 bitop3:0x40
+; GFX1250-NEXT: v_lshlrev_b32_e32 v0, 16, v0
+; GFX1250-NEXT: v_trunc_f32_e32 v8, v2
; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
-; GFX1250-NEXT: v_trunc_f32_e32 v9, v3
-; GFX1250-NEXT: v_trunc_f32_e32 v10, v1
+; GFX1250-NEXT: v_trunc_f32_e32 v1, v1
+; GFX1250-NEXT: v_trunc_f32_e32 v3, v3
; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
-; GFX1250-NEXT: v_mul_f32_e64 v1, 0x2f800000, |v7|
-; GFX1250-NEXT: v_mul_f32_e64 v3, 0x2f800000, |v8|
+; GFX1250-NEXT: v_trunc_f32_e32 v9, v0
+; GFX1250-NEXT: v_mul_f32_e64 v5, 0x2f800000, |v8|
; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
-; GFX1250-NEXT: v_mul_f32_e64 v5, 0x2f800000, |v9|
-; GFX1250-NEXT: v_mul_f32_e64 v11, 0x2f800000, |v10|
-; GFX1250-NEXT: v_dual_ashrrev_i32 v0, 31, v7 :: v_dual_ashrrev_i32 v2, 31, v8
-; GFX1250-NEXT: v_floor_f32_e32 v12, v1
-; GFX1250-NEXT: v_floor_f32_e32 v13, v3
-; GFX1250-NEXT: v_floor_f32_e32 v14, v5
+; GFX1250-NEXT: v_mul_f32_e64 v10, 0x2f800000, |v1|
+; GFX1250-NEXT: v_mul_f32_e64 v11, 0x2f800000, |v3|
+; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX1250-NEXT: v_mul_f32_e64 v12, 0x2f800000, |v9|
+; GFX1250-NEXT: v_dual_ashrrev_i32 v6, 31, v8 :: v_dual_ashrrev_i32 v4, 31, v1
+; GFX1250-NEXT: v_floor_f32_e32 v13, v5
+; GFX1250-NEXT: v_floor_f32_e32 v10, v10
; GFX1250-NEXT: v_floor_f32_e32 v11, v11
-; GFX1250-NEXT: v_dual_ashrrev_i32 v4, 31, v9 :: v_dual_ashrrev_i32 v6, 31, v10
-; GFX1250-NEXT: v_fma_f32 v7, 0xcf800000, v12, |v7|
-; GFX1250-NEXT: v_cvt_u32_f32_e32 v12, v12
+; GFX1250-NEXT: v_floor_f32_e32 v12, v12
+; GFX1250-NEXT: v_dual_ashrrev_i32 v2, 31, v3 :: v_dual_ashrrev_i32 v0, 31, v9
; GFX1250-NEXT: v_fma_f32 v8, 0xcf800000, v13, |v8|
-; GFX1250-NEXT: v_fma_f32 v15, 0xcf800000, v14, |v9|
-; GFX1250-NEXT: v_fma_f32 v16, 0xcf800000, v11, |v10|
-; GFX1250-NEXT: v_cvt_u32_f32_e32 v7, v7
-; GFX1250-NEXT: v_dual_mov_b32 v1, v0 :: v_dual_mov_b32 v3, v2
-; GFX1250-NEXT: v_mov_b32_e32 v5, v4
; GFX1250-NEXT: v_cvt_u32_f32_e32 v13, v13
-; GFX1250-NEXT: v_cvt_u32_f32_e32 v14, v14
-; GFX1250-NEXT: v_xor_b32_e32 v9, v12, v0
-; GFX1250-NEXT: v_cvt_u32_f32_e32 v10, v8
-; GFX1250-NEXT: v_xor_b32_e32 v8, v7, v0
-; GFX1250-NEXT: v_cvt_u32_f32_e32 v12, v11
-; GFX1250-NEXT: v_cvt_u32_f32_e32 v7, v15
-; GFX1250-NEXT: v_cvt_u32_f32_e32 v15, v16
-; GFX1250-NEXT: v_xor_b32_e32 v11, v13, v2
-; GFX1250-NEXT: v_xor_b32_e32 v10, v10, v2
-; GFX1250-NEXT: v_sub_nc_u64_e32 v[0:1], v[8:9], v[0:1]
-; GFX1250-NEXT: v_xor_b32_e32 v9, v14, v4
-; GFX1250-NEXT: v_dual_mov_b32 v7, v6 :: v_dual_bitop2_b32 v8, v7, v4 bitop3:0x14
-; GFX1250-NEXT: v_xor_b32_e32 v13, v12, v6
-; GFX1250-NEXT: v_xor_b32_e32 v12, v15, v6
-; GFX1250-NEXT: v_sub_nc_u64_e32 v[2:3], v[10:11], v[2:3]
-; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
-; GFX1250-NEXT: v_sub_nc_u64_e32 v[4:5], v[8:9], v[4:5]
-; GFX1250-NEXT: v_sub_nc_u64_e32 v[6:7], v[12:13], v[6:7]
+; GFX1250-NEXT: v_fma_f32 v1, 0xcf800000, v10, |v1|
+; GFX1250-NEXT: v_cvt_u32_f32_e32 v14, v10
+; GFX1250-NEXT: v_fma_f32 v3, 0xcf800000, v11, |v3|
+; GFX1250-NEXT: v_fma_f32 v10, 0xcf800000, v12, |v9|
+; GFX1250-NEXT: v_cvt_u32_f32_e32 v8, v8
+; GFX1250-NEXT: v_cvt_u32_f32_e32 v12, v12
+; GFX1250-NEXT: v_xor_b32_e32 v9, v13, v6
+; GFX1250-NEXT: v_cvt_u32_f32_e32 v16, v1
+; GFX1250-NEXT: v_cvt_u32_f32_e32 v15, v3
+; GFX1250-NEXT: v_cvt_u32_f32_e32 v10, v10
+; GFX1250-NEXT: v_cvt_u32_f32_e32 v13, v11
+; GFX1250-NEXT: v_dual_mov_b32 v7, v6 :: v_dual_mov_b32 v5, v4
+; GFX1250-NEXT: v_dual_mov_b32 v3, v2 :: v_dual_bitop2_b32 v8, v8, v6 bitop3:0x14
+; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX1250-NEXT: v_dual_mov_b32 v1, v0 :: v_dual_bitop2_b32 v10, v10, v0 bitop3:0x14
+; GFX1250-NEXT: v_xor_b32_e32 v11, v12, v0
+; GFX1250-NEXT: v_xor_b32_e32 v13, v13, v2
+; GFX1250-NEXT: v_xor_b32_e32 v12, v15, v2
+; GFX1250-NEXT: v_xor_b32_e32 v15, v14, v4
+; GFX1250-NEXT: v_xor_b32_e32 v14, v16, v4
+; GFX1250-NEXT: v_sub_nc_u64_e32 v[0:1], v[10:11], v[0:1]
+; GFX1250-NEXT: v_sub_nc_u64_e32 v[6:7], v[8:9], v[6:7]
+; GFX1250-NEXT: v_sub_nc_u64_e32 v[2:3], v[12:13], v[2:3]
+; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX1250-NEXT: v_sub_nc_u64_e32 v[4:5], v[14:15], v[4:5]
; GFX1250-NEXT: s_set_pc_i64 s[30:31]
%op = fptosi <4 x bfloat> %x to <4 x i64>
ret <4 x i64> %op
diff --git a/llvm/test/CodeGen/AMDGPU/buffer-atomic-fadd.f32-no-rtn.ll b/llvm/test/CodeGen/AMDGPU/buffer-atomic-fadd.f32-no-rtn.ll
index 890de3cadb1e9..95be1d8718bde 100644
--- a/llvm/test/CodeGen/AMDGPU/buffer-atomic-fadd.f32-no-rtn.ll
+++ b/llvm/test/CodeGen/AMDGPU/buffer-atomic-fadd.f32-no-rtn.ll
@@ -1,11 +1,11 @@
; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
; RUN: llc -mtriple=amdgpu9.08 -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GFX908_GFX11 %s
-; RUN: llc -mtriple=amdgpu9.0a -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GFX90A_GFX942 %s
-; RUN: llc -mtriple=amdgpu9.42 -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GFX90A_GFX942 %s
+; RUN: llc -mtriple=amdgpu9.0a -stop-after=amdgpu-isel < %s | FileCheck -check-prefixes=GFX90A_GFX942,GFX90A %s
+; RUN: llc -mtriple=amdgpu9.42 -stop-after=amdgpu-isel < %s | FileCheck -check-prefixes=GFX90A_GFX942,GFX942 %s
; RUN: llc -mtriple=amdgpu11.00 -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GFX908_GFX11 %s
; RUN: llc -mtriple=amdgpu9.08 -enable-new-pm -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GFX908_GFX11 %s
-; RUN: llc -mtriple=amdgpu9.0a -enable-new-pm -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GFX90A_GFX942 %s
-; RUN: llc -mtriple=amdgpu9.42 -enable-new-pm -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GFX90A_GFX942 %s
+; RUN: llc -mtriple=amdgpu9.0a -enable-new-pm -stop-after=amdgpu-isel < %s | FileCheck -check-prefixes=GFX90A_GFX942,GFX90A %s
+; RUN: llc -mtriple=amdgpu9.42 -enable-new-pm -stop-after=amdgpu-isel < %s | FileCheck -check-prefixes=GFX90A_GFX942,GFX942 %s
; RUN: llc -mtriple=amdgpu11.00 -enable-new-pm -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GFX908_GFX11 %s
define amdgpu_ps void @buffer_atomic_fadd_f32_offset_no_rtn(float %val, <4 x i32> inreg %rsrc, i32 inreg %soffset) {
@@ -167,25 +167,41 @@ define amdgpu_ps void @buffer_ptr_atomic_fadd_f32_offset_no_rtn(float %val, ptr
; GFX908_GFX11-NEXT: BUFFER_ATOMIC_ADD_F32_OFFSET [[COPY5]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
; GFX908_GFX11-NEXT: S_ENDPGM 0
;
- ; GFX90A_GFX942-LABEL: name: buffer_ptr_atomic_fadd_f32_offset_no_rtn
- ; GFX90A_GFX942: bb.0 (%ir-block.0):
- ; GFX90A_GFX942-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $sgpr4
- ; GFX90A_GFX942-NEXT: {{ $}}
- ; GFX90A_GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
- ; GFX90A_GFX942-NEXT: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr3
- ; GFX90A_GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr2
- ; GFX90A_GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr1
- ; GFX90A_GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr0
- ; GFX90A_GFX942-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
- ; GFX90A_GFX942-NEXT: BUFFER_ATOMIC_ADD_F32_OFFSET [[COPY5]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
- ; GFX90A_GFX942-NEXT: S_ENDPGM 0
+ ; GFX90A-LABEL: name: buffer_ptr_atomic_fadd_f32_offset_no_rtn
+ ; GFX90A: bb.0 (%ir-block.0):
+ ; GFX90A-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $sgpr4
+ ; GFX90A-NEXT: {{ $}}
+ ; GFX90A-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
+ ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
+ ; GFX90A-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
+ ; GFX90A-NEXT: BUFFER_ATOMIC_ADD_F32_OFFSET [[COPY5]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX90A-NEXT: S_ENDPGM 0
+ ;
+ ; GFX942-LABEL: name: buffer_ptr_atomic_fadd_f32_offset_no_rtn
+ ; GFX942: bb.0 (%ir-block.0):
+ ; GFX942-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $sgpr4
+ ; GFX942-NEXT: {{ $}}
+ ; GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX942-NEXT: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX942-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
+ ; GFX942-NEXT: BUFFER_ATOMIC_ADD_F32_OFFSET [[COPY5]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX942-NEXT: S_ENDPGM 0
%ret = call float @llvm.amdgcn.raw.ptr.buffer.atomic.fadd.f32(float %val, ptr addrspace(8) %rsrc, i32 0, i32 %soffset, i32 0)
ret void
}
@@ -212,26 +228,43 @@ define amdgpu_ps void @buffer_ptr_atomic_fadd_f32_offen_no_rtn(float %val, ptr a
; GFX908_GFX11-NEXT: BUFFER_ATOMIC_ADD_F32_OFFEN [[COPY6]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
; GFX908_GFX11-NEXT: S_ENDPGM 0
;
- ; GFX90A_GFX942-LABEL: name: buffer_ptr_atomic_fadd_f32_offen_no_rtn
- ; GFX90A_GFX942: bb.0 (%ir-block.0):
- ; GFX90A_GFX942-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $sgpr4
- ; GFX90A_GFX942-NEXT: {{ $}}
- ; GFX90A_GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
- ; GFX90A_GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
- ; GFX90A_GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
- ; GFX90A_GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
- ; GFX90A_GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
- ; GFX90A_GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
- ; GFX90A_GFX942-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY10]], %subreg.sub0, killed [[COPY9]], %subreg.sub1, killed [[COPY8]], %subreg.sub2, killed [[COPY7]], %subreg.sub3
- ; GFX90A_GFX942-NEXT: BUFFER_ATOMIC_ADD_F32_OFFEN [[COPY6]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
- ; GFX90A_GFX942-NEXT: S_ENDPGM 0
+ ; GFX90A-LABEL: name: buffer_ptr_atomic_fadd_f32_offen_no_rtn
+ ; GFX90A: bb.0 (%ir-block.0):
+ ; GFX90A-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $sgpr4
+ ; GFX90A-NEXT: {{ $}}
+ ; GFX90A-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
+ ; GFX90A-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
+ ; GFX90A-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY10]], %subreg.sub0, killed [[COPY9]], %subreg.sub1, killed [[COPY8]], %subreg.sub2, killed [[COPY7]], %subreg.sub3
+ ; GFX90A-NEXT: BUFFER_ATOMIC_ADD_F32_OFFEN [[COPY6]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX90A-NEXT: S_ENDPGM 0
+ ;
+ ; GFX942-LABEL: name: buffer_ptr_atomic_fadd_f32_offen_no_rtn
+ ; GFX942: bb.0 (%ir-block.0):
+ ; GFX942-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $sgpr4
+ ; GFX942-NEXT: {{ $}}
+ ; GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX942-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
+ ; GFX942-NEXT: BUFFER_ATOMIC_ADD_F32_OFFEN [[COPY6]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX942-NEXT: S_ENDPGM 0
%ret = call float @llvm.amdgcn.raw.ptr.buffer.atomic.fadd.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 0)
ret void
}
@@ -258,26 +291,43 @@ define amdgpu_ps void @buffer_ptr_atomic_fadd_f32_idxen_no_rtn(float %val, ptr a
; GFX908_GFX11-NEXT: BUFFER_ATOMIC_ADD_F32_IDXEN [[COPY6]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
; GFX908_GFX11-NEXT: S_ENDPGM 0
;
- ; GFX90A_GFX942-LABEL: name: buffer_ptr_atomic_fadd_f32_idxen_no_rtn
- ; GFX90A_GFX942: bb.0 (%ir-block.0):
- ; GFX90A_GFX942-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $sgpr4
- ; GFX90A_GFX942-NEXT: {{ $}}
- ; GFX90A_GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
- ; GFX90A_GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
- ; GFX90A_GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
- ; GFX90A_GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
- ; GFX90A_GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
- ; GFX90A_GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
- ; GFX90A_GFX942-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY10]], %subreg.sub0, killed [[COPY9]], %subreg.sub1, killed [[COPY8]], %subreg.sub2, killed [[COPY7]], %subreg.sub3
- ; GFX90A_GFX942-NEXT: BUFFER_ATOMIC_ADD_F32_IDXEN [[COPY6]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
- ; GFX90A_GFX942-NEXT: S_ENDPGM 0
+ ; GFX90A-LABEL: name: buffer_ptr_atomic_fadd_f32_idxen_no_rtn
+ ; GFX90A: bb.0 (%ir-block.0):
+ ; GFX90A-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $sgpr4
+ ; GFX90A-NEXT: {{ $}}
+ ; GFX90A-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
+ ; GFX90A-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
+ ; GFX90A-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY10]], %subreg.sub0, killed [[COPY9]], %subreg.sub1, killed [[COPY8]], %subreg.sub2, killed [[COPY7]], %subreg.sub3
+ ; GFX90A-NEXT: BUFFER_ATOMIC_ADD_F32_IDXEN [[COPY6]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX90A-NEXT: S_ENDPGM 0
+ ;
+ ; GFX942-LABEL: name: buffer_ptr_atomic_fadd_f32_idxen_no_rtn
+ ; GFX942: bb.0 (%ir-block.0):
+ ; GFX942-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $sgpr4
+ ; GFX942-NEXT: {{ $}}
+ ; GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX942-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
+ ; GFX942-NEXT: BUFFER_ATOMIC_ADD_F32_IDXEN [[COPY6]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX942-NEXT: S_ENDPGM 0
%ret = call float @llvm.amdgcn.struct.ptr.buffer.atomic.fadd.f32(float %val, ptr addrspace(8) %rsrc, i32 %vindex, i32 0, i32 %soffset, i32 0)
ret void
}
@@ -306,28 +356,47 @@ define amdgpu_ps void @buffer_ptr_atomic_fadd_f32_bothen_no_rtn(float %val, ptr
; GFX908_GFX11-NEXT: BUFFER_ATOMIC_ADD_F32_BOTHEN [[COPY7]], killed [[REG_SEQUENCE3]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 2, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
; GFX908_GFX11-NEXT: S_ENDPGM 0
;
- ; GFX90A_GFX942-LABEL: name: buffer_ptr_atomic_fadd_f32_bothen_no_rtn
- ; GFX90A_GFX942: bb.0 (%ir-block.0):
- ; GFX90A_GFX942-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $vgpr2, $sgpr4
- ; GFX90A_GFX942-NEXT: {{ $}}
- ; GFX90A_GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
- ; GFX90A_GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
- ; GFX90A_GFX942-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr1
- ; GFX90A_GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr3
- ; GFX90A_GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr2
- ; GFX90A_GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr1
- ; GFX90A_GFX942-NEXT: [[COPY6:%[0-9]+]]:sgpr_32 = COPY $sgpr0
- ; GFX90A_GFX942-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY6]], %subreg.sub0, [[COPY5]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY11:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY11]], %subreg.sub0, killed [[COPY10]], %subreg.sub1, killed [[COPY9]], %subreg.sub2, killed [[COPY8]], %subreg.sub3
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: BUFFER_ATOMIC_ADD_F32_BOTHEN [[COPY7]], killed [[REG_SEQUENCE3]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 2, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
- ; GFX90A_GFX942-NEXT: S_ENDPGM 0
+ ; GFX90A-LABEL: name: buffer_ptr_atomic_fadd_f32_bothen_no_rtn
+ ; GFX90A: bb.0 (%ir-block.0):
+ ; GFX90A-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $vgpr2, $sgpr4
+ ; GFX90A-NEXT: {{ $}}
+ ; GFX90A-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
+ ; GFX90A-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY6]], %subreg.sub0, [[COPY5]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
+ ; GFX90A-NEXT: [[COPY11:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY11]], %subreg.sub0, killed [[COPY10]], %subreg.sub1, killed [[COPY9]], %subreg.sub2, killed [[COPY8]], %subreg.sub3
+ ; GFX90A-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
+ ; GFX90A-NEXT: BUFFER_ATOMIC_ADD_F32_BOTHEN [[COPY7]], killed [[REG_SEQUENCE3]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 2, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX90A-NEXT: S_ENDPGM 0
+ ;
+ ; GFX942-LABEL: name: buffer_ptr_atomic_fadd_f32_bothen_no_rtn
+ ; GFX942: bb.0 (%ir-block.0):
+ ; GFX942-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $vgpr2, $sgpr4
+ ; GFX942-NEXT: {{ $}}
+ ; GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX942-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX942-NEXT: [[COPY6:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX942-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY6]], %subreg.sub0, [[COPY5]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
+ ; GFX942-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
+ ; GFX942-NEXT: BUFFER_ATOMIC_ADD_F32_BOTHEN [[COPY7]], killed [[REG_SEQUENCE3]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 2, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX942-NEXT: S_ENDPGM 0
%ret = call float @llvm.amdgcn.struct.ptr.buffer.atomic.fadd.f32(float %val, ptr addrspace(8) %rsrc, i32 %vindex, i32 %voffset, i32 %soffset, i32 2)
ret void
}
diff --git a/llvm/test/CodeGen/AMDGPU/buffer-atomic-fadd.f32-rtn.ll b/llvm/test/CodeGen/AMDGPU/buffer-atomic-fadd.f32-rtn.ll
index 62d72a15c46a7..70400e050afd7 100644
--- a/llvm/test/CodeGen/AMDGPU/buffer-atomic-fadd.f32-rtn.ll
+++ b/llvm/test/CodeGen/AMDGPU/buffer-atomic-fadd.f32-rtn.ll
@@ -1,9 +1,9 @@
; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
-; RUN: llc -mtriple=amdgpu9.0a -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GFX90A_GFX942 %s
-; RUN: llc -mtriple=amdgpu9.42 -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GFX90A_GFX942 %s
+; RUN: llc -mtriple=amdgpu9.0a -stop-after=amdgpu-isel < %s | FileCheck -check-prefixes=GFX90A_GFX942,GFX90A %s
+; RUN: llc -mtriple=amdgpu9.42 -stop-after=amdgpu-isel < %s | FileCheck -check-prefixes=GFX90A_GFX942,GFX942 %s
; RUN: llc -mtriple=amdgpu11.00 -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GFX11 %s
-; RUN: llc -mtriple=amdgpu9.0a -enable-new-pm -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GFX90A_GFX942 %s
-; RUN: llc -mtriple=amdgpu9.42 -enable-new-pm -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GFX90A_GFX942 %s
+; RUN: llc -mtriple=amdgpu9.0a -enable-new-pm -stop-after=amdgpu-isel < %s | FileCheck -check-prefixes=GFX90A_GFX942,GFX90A %s
+; RUN: llc -mtriple=amdgpu9.42 -enable-new-pm -stop-after=amdgpu-isel < %s | FileCheck -check-prefixes=GFX90A_GFX942,GFX942 %s
; RUN: llc -mtriple=amdgpu11.00 -enable-new-pm -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GFX11 %s
define amdgpu_ps float @buffer_atomic_fadd_f32_offset_rtn(float %val, <4 x i32> inreg %rsrc, i32 inreg %soffset) {
@@ -153,26 +153,43 @@ define amdgpu_ps float @buffer_atomic_fadd_f32_bothen_rtn(float %val, <4 x i32>
}
define amdgpu_ps float @buffer_ptr_atomic_fadd_f32_offset_rtn(float %val, ptr addrspace(8) inreg %rsrc, i32 inreg %soffset) {
- ; GFX90A_GFX942-LABEL: name: buffer_ptr_atomic_fadd_f32_offset_rtn
- ; GFX90A_GFX942: bb.0 (%ir-block.0):
- ; GFX90A_GFX942-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $sgpr4
- ; GFX90A_GFX942-NEXT: {{ $}}
- ; GFX90A_GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
- ; GFX90A_GFX942-NEXT: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr3
- ; GFX90A_GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr2
- ; GFX90A_GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr1
- ; GFX90A_GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr0
- ; GFX90A_GFX942-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
- ; GFX90A_GFX942-NEXT: [[BUFFER_ATOMIC_ADD_F32_OFFSET_RTN:%[0-9]+]]:av_32 = BUFFER_ATOMIC_ADD_F32_OFFSET_RTN [[COPY5]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 1, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
- ; GFX90A_GFX942-NEXT: $vgpr0 = COPY [[BUFFER_ATOMIC_ADD_F32_OFFSET_RTN]]
- ; GFX90A_GFX942-NEXT: SI_RETURN_TO_EPILOG $vgpr0
+ ; GFX90A-LABEL: name: buffer_ptr_atomic_fadd_f32_offset_rtn
+ ; GFX90A: bb.0 (%ir-block.0):
+ ; GFX90A-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $sgpr4
+ ; GFX90A-NEXT: {{ $}}
+ ; GFX90A-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
+ ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
+ ; GFX90A-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
+ ; GFX90A-NEXT: [[BUFFER_ATOMIC_ADD_F32_OFFSET_RTN:%[0-9]+]]:av_32 = BUFFER_ATOMIC_ADD_F32_OFFSET_RTN [[COPY5]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 1, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX90A-NEXT: $vgpr0 = COPY [[BUFFER_ATOMIC_ADD_F32_OFFSET_RTN]]
+ ; GFX90A-NEXT: SI_RETURN_TO_EPILOG $vgpr0
+ ;
+ ; GFX942-LABEL: name: buffer_ptr_atomic_fadd_f32_offset_rtn
+ ; GFX942: bb.0 (%ir-block.0):
+ ; GFX942-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $sgpr4
+ ; GFX942-NEXT: {{ $}}
+ ; GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX942-NEXT: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX942-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
+ ; GFX942-NEXT: [[BUFFER_ATOMIC_ADD_F32_OFFSET_RTN:%[0-9]+]]:av_32 = BUFFER_ATOMIC_ADD_F32_OFFSET_RTN [[COPY5]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 1, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX942-NEXT: $vgpr0 = COPY [[BUFFER_ATOMIC_ADD_F32_OFFSET_RTN]]
+ ; GFX942-NEXT: SI_RETURN_TO_EPILOG $vgpr0
;
; GFX11-LABEL: name: buffer_ptr_atomic_fadd_f32_offset_rtn
; GFX11: bb.0 (%ir-block.0):
@@ -199,27 +216,45 @@ define amdgpu_ps float @buffer_ptr_atomic_fadd_f32_offset_rtn(float %val, ptr ad
}
define amdgpu_ps float @buffer_ptr_atomic_fadd_f32_offen_rtn(float %val, ptr addrspace(8) inreg %rsrc, i32 %voffset, i32 inreg %soffset) {
- ; GFX90A_GFX942-LABEL: name: buffer_ptr_atomic_fadd_f32_offen_rtn
- ; GFX90A_GFX942: bb.0 (%ir-block.0):
- ; GFX90A_GFX942-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $sgpr4
- ; GFX90A_GFX942-NEXT: {{ $}}
- ; GFX90A_GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
- ; GFX90A_GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
- ; GFX90A_GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
- ; GFX90A_GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
- ; GFX90A_GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
- ; GFX90A_GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
- ; GFX90A_GFX942-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY10]], %subreg.sub0, killed [[COPY9]], %subreg.sub1, killed [[COPY8]], %subreg.sub2, killed [[COPY7]], %subreg.sub3
- ; GFX90A_GFX942-NEXT: [[BUFFER_ATOMIC_ADD_F32_OFFEN_RTN:%[0-9]+]]:av_32 = BUFFER_ATOMIC_ADD_F32_OFFEN_RTN [[COPY6]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 1, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
- ; GFX90A_GFX942-NEXT: $vgpr0 = COPY [[BUFFER_ATOMIC_ADD_F32_OFFEN_RTN]]
- ; GFX90A_GFX942-NEXT: SI_RETURN_TO_EPILOG $vgpr0
+ ; GFX90A-LABEL: name: buffer_ptr_atomic_fadd_f32_offen_rtn
+ ; GFX90A: bb.0 (%ir-block.0):
+ ; GFX90A-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $sgpr4
+ ; GFX90A-NEXT: {{ $}}
+ ; GFX90A-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
+ ; GFX90A-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
+ ; GFX90A-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY10]], %subreg.sub0, killed [[COPY9]], %subreg.sub1, killed [[COPY8]], %subreg.sub2, killed [[COPY7]], %subreg.sub3
+ ; GFX90A-NEXT: [[BUFFER_ATOMIC_ADD_F32_OFFEN_RTN:%[0-9]+]]:av_32 = BUFFER_ATOMIC_ADD_F32_OFFEN_RTN [[COPY6]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 1, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX90A-NEXT: $vgpr0 = COPY [[BUFFER_ATOMIC_ADD_F32_OFFEN_RTN]]
+ ; GFX90A-NEXT: SI_RETURN_TO_EPILOG $vgpr0
+ ;
+ ; GFX942-LABEL: name: buffer_ptr_atomic_fadd_f32_offen_rtn
+ ; GFX942: bb.0 (%ir-block.0):
+ ; GFX942-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $sgpr4
+ ; GFX942-NEXT: {{ $}}
+ ; GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX942-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
+ ; GFX942-NEXT: [[BUFFER_ATOMIC_ADD_F32_OFFEN_RTN:%[0-9]+]]:av_32 = BUFFER_ATOMIC_ADD_F32_OFFEN_RTN [[COPY6]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 1, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX942-NEXT: $vgpr0 = COPY [[BUFFER_ATOMIC_ADD_F32_OFFEN_RTN]]
+ ; GFX942-NEXT: SI_RETURN_TO_EPILOG $vgpr0
;
; GFX11-LABEL: name: buffer_ptr_atomic_fadd_f32_offen_rtn
; GFX11: bb.0 (%ir-block.0):
@@ -247,27 +282,45 @@ define amdgpu_ps float @buffer_ptr_atomic_fadd_f32_offen_rtn(float %val, ptr add
}
define amdgpu_ps float @buffer_ptr_atomic_fadd_f32_idxen_rtn(float %val, ptr addrspace(8) inreg %rsrc, i32 %vindex, i32 inreg %soffset) {
- ; GFX90A_GFX942-LABEL: name: buffer_ptr_atomic_fadd_f32_idxen_rtn
- ; GFX90A_GFX942: bb.0 (%ir-block.0):
- ; GFX90A_GFX942-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $sgpr4
- ; GFX90A_GFX942-NEXT: {{ $}}
- ; GFX90A_GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
- ; GFX90A_GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
- ; GFX90A_GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
- ; GFX90A_GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
- ; GFX90A_GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
- ; GFX90A_GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
- ; GFX90A_GFX942-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY10]], %subreg.sub0, killed [[COPY9]], %subreg.sub1, killed [[COPY8]], %subreg.sub2, killed [[COPY7]], %subreg.sub3
- ; GFX90A_GFX942-NEXT: [[BUFFER_ATOMIC_ADD_F32_IDXEN_RTN:%[0-9]+]]:av_32 = BUFFER_ATOMIC_ADD_F32_IDXEN_RTN [[COPY6]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 1, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
- ; GFX90A_GFX942-NEXT: $vgpr0 = COPY [[BUFFER_ATOMIC_ADD_F32_IDXEN_RTN]]
- ; GFX90A_GFX942-NEXT: SI_RETURN_TO_EPILOG $vgpr0
+ ; GFX90A-LABEL: name: buffer_ptr_atomic_fadd_f32_idxen_rtn
+ ; GFX90A: bb.0 (%ir-block.0):
+ ; GFX90A-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $sgpr4
+ ; GFX90A-NEXT: {{ $}}
+ ; GFX90A-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
+ ; GFX90A-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
+ ; GFX90A-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY10]], %subreg.sub0, killed [[COPY9]], %subreg.sub1, killed [[COPY8]], %subreg.sub2, killed [[COPY7]], %subreg.sub3
+ ; GFX90A-NEXT: [[BUFFER_ATOMIC_ADD_F32_IDXEN_RTN:%[0-9]+]]:av_32 = BUFFER_ATOMIC_ADD_F32_IDXEN_RTN [[COPY6]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 1, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX90A-NEXT: $vgpr0 = COPY [[BUFFER_ATOMIC_ADD_F32_IDXEN_RTN]]
+ ; GFX90A-NEXT: SI_RETURN_TO_EPILOG $vgpr0
+ ;
+ ; GFX942-LABEL: name: buffer_ptr_atomic_fadd_f32_idxen_rtn
+ ; GFX942: bb.0 (%ir-block.0):
+ ; GFX942-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $sgpr4
+ ; GFX942-NEXT: {{ $}}
+ ; GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX942-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
+ ; GFX942-NEXT: [[BUFFER_ATOMIC_ADD_F32_IDXEN_RTN:%[0-9]+]]:av_32 = BUFFER_ATOMIC_ADD_F32_IDXEN_RTN [[COPY6]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 1, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX942-NEXT: $vgpr0 = COPY [[BUFFER_ATOMIC_ADD_F32_IDXEN_RTN]]
+ ; GFX942-NEXT: SI_RETURN_TO_EPILOG $vgpr0
;
; GFX11-LABEL: name: buffer_ptr_atomic_fadd_f32_idxen_rtn
; GFX11: bb.0 (%ir-block.0):
@@ -295,29 +348,49 @@ define amdgpu_ps float @buffer_ptr_atomic_fadd_f32_idxen_rtn(float %val, ptr add
}
define amdgpu_ps float @buffer_ptr_atomic_fadd_f32_bothen_rtn(float %val, ptr addrspace(8) inreg %rsrc, i32 %vindex, i32 %voffset, i32 inreg %soffset) {
- ; GFX90A_GFX942-LABEL: name: buffer_ptr_atomic_fadd_f32_bothen_rtn
- ; GFX90A_GFX942: bb.0 (%ir-block.0):
- ; GFX90A_GFX942-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $vgpr2, $sgpr4
- ; GFX90A_GFX942-NEXT: {{ $}}
- ; GFX90A_GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
- ; GFX90A_GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
- ; GFX90A_GFX942-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr1
- ; GFX90A_GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr3
- ; GFX90A_GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr2
- ; GFX90A_GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr1
- ; GFX90A_GFX942-NEXT: [[COPY6:%[0-9]+]]:sgpr_32 = COPY $sgpr0
- ; GFX90A_GFX942-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY6]], %subreg.sub0, [[COPY5]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY11:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY11]], %subreg.sub0, killed [[COPY10]], %subreg.sub1, killed [[COPY9]], %subreg.sub2, killed [[COPY8]], %subreg.sub3
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[BUFFER_ATOMIC_ADD_F32_BOTHEN_RTN:%[0-9]+]]:av_32 = BUFFER_ATOMIC_ADD_F32_BOTHEN_RTN [[COPY7]], killed [[REG_SEQUENCE3]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 1, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
- ; GFX90A_GFX942-NEXT: $vgpr0 = COPY [[BUFFER_ATOMIC_ADD_F32_BOTHEN_RTN]]
- ; GFX90A_GFX942-NEXT: SI_RETURN_TO_EPILOG $vgpr0
+ ; GFX90A-LABEL: name: buffer_ptr_atomic_fadd_f32_bothen_rtn
+ ; GFX90A: bb.0 (%ir-block.0):
+ ; GFX90A-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $vgpr2, $sgpr4
+ ; GFX90A-NEXT: {{ $}}
+ ; GFX90A-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
+ ; GFX90A-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY6]], %subreg.sub0, [[COPY5]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
+ ; GFX90A-NEXT: [[COPY11:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY11]], %subreg.sub0, killed [[COPY10]], %subreg.sub1, killed [[COPY9]], %subreg.sub2, killed [[COPY8]], %subreg.sub3
+ ; GFX90A-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
+ ; GFX90A-NEXT: [[BUFFER_ATOMIC_ADD_F32_BOTHEN_RTN:%[0-9]+]]:av_32 = BUFFER_ATOMIC_ADD_F32_BOTHEN_RTN [[COPY7]], killed [[REG_SEQUENCE3]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 1, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX90A-NEXT: $vgpr0 = COPY [[BUFFER_ATOMIC_ADD_F32_BOTHEN_RTN]]
+ ; GFX90A-NEXT: SI_RETURN_TO_EPILOG $vgpr0
+ ;
+ ; GFX942-LABEL: name: buffer_ptr_atomic_fadd_f32_bothen_rtn
+ ; GFX942: bb.0 (%ir-block.0):
+ ; GFX942-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $vgpr2, $sgpr4
+ ; GFX942-NEXT: {{ $}}
+ ; GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX942-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX942-NEXT: [[COPY6:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX942-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY6]], %subreg.sub0, [[COPY5]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
+ ; GFX942-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
+ ; GFX942-NEXT: [[BUFFER_ATOMIC_ADD_F32_BOTHEN_RTN:%[0-9]+]]:av_32 = BUFFER_ATOMIC_ADD_F32_BOTHEN_RTN [[COPY7]], killed [[REG_SEQUENCE3]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 1, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX942-NEXT: $vgpr0 = COPY [[BUFFER_ATOMIC_ADD_F32_BOTHEN_RTN]]
+ ; GFX942-NEXT: SI_RETURN_TO_EPILOG $vgpr0
;
; GFX11-LABEL: name: buffer_ptr_atomic_fadd_f32_bothen_rtn
; GFX11: bb.0 (%ir-block.0):
diff --git a/llvm/test/CodeGen/AMDGPU/buffer-atomic-fadd.f64.ll b/llvm/test/CodeGen/AMDGPU/buffer-atomic-fadd.f64.ll
index b23f313bf5f16..09789925657a9 100644
--- a/llvm/test/CodeGen/AMDGPU/buffer-atomic-fadd.f64.ll
+++ b/llvm/test/CodeGen/AMDGPU/buffer-atomic-fadd.f64.ll
@@ -1,8 +1,8 @@
; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
-; RUN: llc -mtriple=amdgpu9.0a -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GFX90A_GFX942 %s
-; RUN: llc -mtriple=amdgpu9.42 -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GFX90A_GFX942 %s
-; RUN: llc -mtriple=amdgpu9.0a -enable-new-pm -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GFX90A_GFX942 %s
-; RUN: llc -mtriple=amdgpu9.42 -enable-new-pm -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GFX90A_GFX942 %s
+; RUN: llc -mtriple=amdgpu9.0a -stop-after=amdgpu-isel < %s | FileCheck -check-prefixes=GFX90A_GFX942,GFX90A %s
+; RUN: llc -mtriple=amdgpu9.42 -stop-after=amdgpu-isel < %s | FileCheck -check-prefixes=GFX90A_GFX942,GFX942 %s
+; RUN: llc -mtriple=amdgpu9.0a -enable-new-pm -stop-after=amdgpu-isel < %s | FileCheck -check-prefixes=GFX90A_GFX942,GFX90A %s
+; RUN: llc -mtriple=amdgpu9.42 -enable-new-pm -stop-after=amdgpu-isel < %s | FileCheck -check-prefixes=GFX90A_GFX942,GFX942 %s
define amdgpu_ps void @buffer_atomic_fadd_f64_offset_no_rtn(double %val, <4 x i32> inreg %rsrc, i32 inreg %soffset) {
; GFX90A_GFX942-LABEL: name: buffer_atomic_fadd_f64_offset_no_rtn
@@ -207,251 +207,437 @@ define amdgpu_ps double @buffer_atomic_fadd_f64_bothen_rtn(double %val, <4 x i32
}
define amdgpu_ps void @buffer_ptr_atomic_fadd_f64_offset_no_rtn(double %val, ptr addrspace(8) inreg %rsrc, i32 inreg %soffset) {
- ; GFX90A_GFX942-LABEL: name: buffer_ptr_atomic_fadd_f64_offset_no_rtn
- ; GFX90A_GFX942: bb.0 (%ir-block.0):
- ; GFX90A_GFX942-NEXT: liveins: $vgpr0, $vgpr1, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $sgpr4
- ; GFX90A_GFX942-NEXT: {{ $}}
- ; GFX90A_GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
- ; GFX90A_GFX942-NEXT: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr3
- ; GFX90A_GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr2
- ; GFX90A_GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr1
- ; GFX90A_GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr0
- ; GFX90A_GFX942-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1
- ; GFX90A_GFX942-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY10]], %subreg.sub0, killed [[COPY9]], %subreg.sub1, killed [[COPY8]], %subreg.sub2, killed [[COPY7]], %subreg.sub3
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY6]], %subreg.sub0, [[COPY5]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY11:%[0-9]+]]:av_64_align2 = COPY [[REG_SEQUENCE3]]
- ; GFX90A_GFX942-NEXT: BUFFER_ATOMIC_ADD_F64_OFFSET killed [[COPY11]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s64) on %ir.rsrc, align 1, addrspace 8)
- ; GFX90A_GFX942-NEXT: S_ENDPGM 0
+ ; GFX90A-LABEL: name: buffer_ptr_atomic_fadd_f64_offset_no_rtn
+ ; GFX90A: bb.0 (%ir-block.0):
+ ; GFX90A-NEXT: liveins: $vgpr0, $vgpr1, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $sgpr4
+ ; GFX90A-NEXT: {{ $}}
+ ; GFX90A-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
+ ; GFX90A-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
+ ; GFX90A-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY10]], %subreg.sub0, killed [[COPY9]], %subreg.sub1, killed [[COPY8]], %subreg.sub2, killed [[COPY7]], %subreg.sub3
+ ; GFX90A-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY6]], %subreg.sub0, [[COPY5]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY11:%[0-9]+]]:av_64_align2 = COPY [[REG_SEQUENCE3]]
+ ; GFX90A-NEXT: BUFFER_ATOMIC_ADD_F64_OFFSET killed [[COPY11]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s64) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX90A-NEXT: S_ENDPGM 0
+ ;
+ ; GFX942-LABEL: name: buffer_ptr_atomic_fadd_f64_offset_no_rtn
+ ; GFX942: bb.0 (%ir-block.0):
+ ; GFX942-NEXT: liveins: $vgpr0, $vgpr1, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $sgpr4
+ ; GFX942-NEXT: {{ $}}
+ ; GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX942-NEXT: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX942-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX942-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
+ ; GFX942-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY6]], %subreg.sub0, [[COPY5]], %subreg.sub1
+ ; GFX942-NEXT: [[COPY7:%[0-9]+]]:av_64_align2 = COPY [[REG_SEQUENCE3]]
+ ; GFX942-NEXT: BUFFER_ATOMIC_ADD_F64_OFFSET killed [[COPY7]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s64) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX942-NEXT: S_ENDPGM 0
%ret = call double @llvm.amdgcn.raw.ptr.buffer.atomic.fadd.f64(double %val, ptr addrspace(8) %rsrc, i32 0, i32 %soffset, i32 0)
ret void
}
define amdgpu_ps void @buffer_ptr_atomic_fadd_f64_offen_no_rtn(double %val, ptr addrspace(8) inreg %rsrc, i32 %voffset, i32 inreg %soffset) {
- ; GFX90A_GFX942-LABEL: name: buffer_ptr_atomic_fadd_f64_offen_no_rtn
- ; GFX90A_GFX942: bb.0 (%ir-block.0):
- ; GFX90A_GFX942-NEXT: liveins: $vgpr0, $vgpr1, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr2, $sgpr4
- ; GFX90A_GFX942-NEXT: {{ $}}
- ; GFX90A_GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
- ; GFX90A_GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
- ; GFX90A_GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
- ; GFX90A_GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
- ; GFX90A_GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
- ; GFX90A_GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
- ; GFX90A_GFX942-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr1
- ; GFX90A_GFX942-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY11:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY11]], %subreg.sub0, killed [[COPY10]], %subreg.sub1, killed [[COPY9]], %subreg.sub2, killed [[COPY8]], %subreg.sub3
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY7]], %subreg.sub0, [[COPY6]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY12:%[0-9]+]]:av_64_align2 = COPY [[REG_SEQUENCE3]]
- ; GFX90A_GFX942-NEXT: BUFFER_ATOMIC_ADD_F64_OFFEN killed [[COPY12]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s64) on %ir.rsrc, align 1, addrspace 8)
- ; GFX90A_GFX942-NEXT: S_ENDPGM 0
+ ; GFX90A-LABEL: name: buffer_ptr_atomic_fadd_f64_offen_no_rtn
+ ; GFX90A: bb.0 (%ir-block.0):
+ ; GFX90A-NEXT: liveins: $vgpr0, $vgpr1, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr2, $sgpr4
+ ; GFX90A-NEXT: {{ $}}
+ ; GFX90A-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
+ ; GFX90A-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
+ ; GFX90A-NEXT: [[COPY11:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY11]], %subreg.sub0, killed [[COPY10]], %subreg.sub1, killed [[COPY9]], %subreg.sub2, killed [[COPY8]], %subreg.sub3
+ ; GFX90A-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY7]], %subreg.sub0, [[COPY6]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY12:%[0-9]+]]:av_64_align2 = COPY [[REG_SEQUENCE3]]
+ ; GFX90A-NEXT: BUFFER_ATOMIC_ADD_F64_OFFEN killed [[COPY12]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s64) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX90A-NEXT: S_ENDPGM 0
+ ;
+ ; GFX942-LABEL: name: buffer_ptr_atomic_fadd_f64_offen_no_rtn
+ ; GFX942: bb.0 (%ir-block.0):
+ ; GFX942-NEXT: liveins: $vgpr0, $vgpr1, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr2, $sgpr4
+ ; GFX942-NEXT: {{ $}}
+ ; GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX942-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX942-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
+ ; GFX942-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY7]], %subreg.sub0, [[COPY6]], %subreg.sub1
+ ; GFX942-NEXT: [[COPY8:%[0-9]+]]:av_64_align2 = COPY [[REG_SEQUENCE3]]
+ ; GFX942-NEXT: BUFFER_ATOMIC_ADD_F64_OFFEN killed [[COPY8]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s64) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX942-NEXT: S_ENDPGM 0
%ret = call double @llvm.amdgcn.raw.ptr.buffer.atomic.fadd.f64(double %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 0)
ret void
}
define amdgpu_ps void @buffer_ptr_atomic_fadd_f64_idxen_no_rtn(double %val, ptr addrspace(8) inreg %rsrc, i32 %vindex, i32 inreg %soffset) {
- ; GFX90A_GFX942-LABEL: name: buffer_ptr_atomic_fadd_f64_idxen_no_rtn
- ; GFX90A_GFX942: bb.0 (%ir-block.0):
- ; GFX90A_GFX942-NEXT: liveins: $vgpr0, $vgpr1, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr2, $sgpr4
- ; GFX90A_GFX942-NEXT: {{ $}}
- ; GFX90A_GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
- ; GFX90A_GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
- ; GFX90A_GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
- ; GFX90A_GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
- ; GFX90A_GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
- ; GFX90A_GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
- ; GFX90A_GFX942-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr1
- ; GFX90A_GFX942-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY11:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY11]], %subreg.sub0, killed [[COPY10]], %subreg.sub1, killed [[COPY9]], %subreg.sub2, killed [[COPY8]], %subreg.sub3
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY7]], %subreg.sub0, [[COPY6]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY12:%[0-9]+]]:av_64_align2 = COPY [[REG_SEQUENCE3]]
- ; GFX90A_GFX942-NEXT: BUFFER_ATOMIC_ADD_F64_IDXEN killed [[COPY12]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s64) on %ir.rsrc, align 1, addrspace 8)
- ; GFX90A_GFX942-NEXT: S_ENDPGM 0
+ ; GFX90A-LABEL: name: buffer_ptr_atomic_fadd_f64_idxen_no_rtn
+ ; GFX90A: bb.0 (%ir-block.0):
+ ; GFX90A-NEXT: liveins: $vgpr0, $vgpr1, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr2, $sgpr4
+ ; GFX90A-NEXT: {{ $}}
+ ; GFX90A-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
+ ; GFX90A-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
+ ; GFX90A-NEXT: [[COPY11:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY11]], %subreg.sub0, killed [[COPY10]], %subreg.sub1, killed [[COPY9]], %subreg.sub2, killed [[COPY8]], %subreg.sub3
+ ; GFX90A-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY7]], %subreg.sub0, [[COPY6]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY12:%[0-9]+]]:av_64_align2 = COPY [[REG_SEQUENCE3]]
+ ; GFX90A-NEXT: BUFFER_ATOMIC_ADD_F64_IDXEN killed [[COPY12]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s64) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX90A-NEXT: S_ENDPGM 0
+ ;
+ ; GFX942-LABEL: name: buffer_ptr_atomic_fadd_f64_idxen_no_rtn
+ ; GFX942: bb.0 (%ir-block.0):
+ ; GFX942-NEXT: liveins: $vgpr0, $vgpr1, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr2, $sgpr4
+ ; GFX942-NEXT: {{ $}}
+ ; GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX942-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX942-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
+ ; GFX942-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY7]], %subreg.sub0, [[COPY6]], %subreg.sub1
+ ; GFX942-NEXT: [[COPY8:%[0-9]+]]:av_64_align2 = COPY [[REG_SEQUENCE3]]
+ ; GFX942-NEXT: BUFFER_ATOMIC_ADD_F64_IDXEN killed [[COPY8]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s64) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX942-NEXT: S_ENDPGM 0
%ret = call double @llvm.amdgcn.struct.ptr.buffer.atomic.fadd.f64(double %val, ptr addrspace(8) %rsrc, i32 %vindex, i32 0, i32 %soffset, i32 0)
ret void
}
define amdgpu_ps void @buffer_ptr_atomic_fadd_f64_bothen_no_rtn(double %val, ptr addrspace(8) inreg %rsrc, i32 %vindex, i32 %voffset, i32 inreg %soffset) {
- ; GFX90A_GFX942-LABEL: name: buffer_ptr_atomic_fadd_f64_bothen_no_rtn
- ; GFX90A_GFX942: bb.0 (%ir-block.0):
- ; GFX90A_GFX942-NEXT: liveins: $vgpr0, $vgpr1, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr2, $vgpr3, $sgpr4
- ; GFX90A_GFX942-NEXT: {{ $}}
- ; GFX90A_GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
- ; GFX90A_GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr3
- ; GFX90A_GFX942-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
- ; GFX90A_GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr3
- ; GFX90A_GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr2
- ; GFX90A_GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr1
- ; GFX90A_GFX942-NEXT: [[COPY6:%[0-9]+]]:sgpr_32 = COPY $sgpr0
- ; GFX90A_GFX942-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr1
- ; GFX90A_GFX942-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY $vgpr0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY6]], %subreg.sub0, [[COPY5]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY11:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY12:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY12]], %subreg.sub0, killed [[COPY11]], %subreg.sub1, killed [[COPY10]], %subreg.sub2, killed [[COPY9]], %subreg.sub3
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY8]], %subreg.sub0, [[COPY7]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE4:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY13:%[0-9]+]]:av_64_align2 = COPY [[REG_SEQUENCE3]]
- ; GFX90A_GFX942-NEXT: BUFFER_ATOMIC_ADD_F64_BOTHEN killed [[COPY13]], killed [[REG_SEQUENCE4]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 2, implicit $exec :: (volatile dereferenceable load store (s64) on %ir.rsrc, align 1, addrspace 8)
- ; GFX90A_GFX942-NEXT: S_ENDPGM 0
+ ; GFX90A-LABEL: name: buffer_ptr_atomic_fadd_f64_bothen_no_rtn
+ ; GFX90A: bb.0 (%ir-block.0):
+ ; GFX90A-NEXT: liveins: $vgpr0, $vgpr1, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr2, $vgpr3, $sgpr4
+ ; GFX90A-NEXT: {{ $}}
+ ; GFX90A-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr3
+ ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX90A-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
+ ; GFX90A-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY6]], %subreg.sub0, [[COPY5]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY11:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
+ ; GFX90A-NEXT: [[COPY12:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY12]], %subreg.sub0, killed [[COPY11]], %subreg.sub1, killed [[COPY10]], %subreg.sub2, killed [[COPY9]], %subreg.sub3
+ ; GFX90A-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY8]], %subreg.sub0, [[COPY7]], %subreg.sub1
+ ; GFX90A-NEXT: [[REG_SEQUENCE4:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY13:%[0-9]+]]:av_64_align2 = COPY [[REG_SEQUENCE3]]
+ ; GFX90A-NEXT: BUFFER_ATOMIC_ADD_F64_BOTHEN killed [[COPY13]], killed [[REG_SEQUENCE4]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 2, implicit $exec :: (volatile dereferenceable load store (s64) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX90A-NEXT: S_ENDPGM 0
+ ;
+ ; GFX942-LABEL: name: buffer_ptr_atomic_fadd_f64_bothen_no_rtn
+ ; GFX942: bb.0 (%ir-block.0):
+ ; GFX942-NEXT: liveins: $vgpr0, $vgpr1, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr2, $vgpr3, $sgpr4
+ ; GFX942-NEXT: {{ $}}
+ ; GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr3
+ ; GFX942-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX942-NEXT: [[COPY6:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX942-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX942-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY6]], %subreg.sub0, [[COPY5]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
+ ; GFX942-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY8]], %subreg.sub0, [[COPY7]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE4:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
+ ; GFX942-NEXT: [[COPY9:%[0-9]+]]:av_64_align2 = COPY [[REG_SEQUENCE3]]
+ ; GFX942-NEXT: BUFFER_ATOMIC_ADD_F64_BOTHEN killed [[COPY9]], killed [[REG_SEQUENCE4]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 2, implicit $exec :: (volatile dereferenceable load store (s64) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX942-NEXT: S_ENDPGM 0
%ret = call double @llvm.amdgcn.struct.ptr.buffer.atomic.fadd.f64(double %val, ptr addrspace(8) %rsrc, i32 %vindex, i32 %voffset, i32 %soffset, i32 2)
ret void
}
define amdgpu_ps double @buffer_ptr_atomic_fadd_f64_offset_rtn(double %val, ptr addrspace(8) inreg %rsrc, i32 inreg %soffset) {
- ; GFX90A_GFX942-LABEL: name: buffer_ptr_atomic_fadd_f64_offset_rtn
- ; GFX90A_GFX942: bb.0 (%ir-block.0):
- ; GFX90A_GFX942-NEXT: liveins: $vgpr0, $vgpr1, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $sgpr4
- ; GFX90A_GFX942-NEXT: {{ $}}
- ; GFX90A_GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
- ; GFX90A_GFX942-NEXT: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr3
- ; GFX90A_GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr2
- ; GFX90A_GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr1
- ; GFX90A_GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr0
- ; GFX90A_GFX942-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1
- ; GFX90A_GFX942-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY10]], %subreg.sub0, killed [[COPY9]], %subreg.sub1, killed [[COPY8]], %subreg.sub2, killed [[COPY7]], %subreg.sub3
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY6]], %subreg.sub0, [[COPY5]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY11:%[0-9]+]]:av_64_align2 = COPY [[REG_SEQUENCE3]]
- ; GFX90A_GFX942-NEXT: [[BUFFER_ATOMIC_ADD_F64_OFFSET_RTN:%[0-9]+]]:av_64_align2 = BUFFER_ATOMIC_ADD_F64_OFFSET_RTN [[COPY11]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 1, implicit $exec :: (volatile dereferenceable load store (s64) on %ir.rsrc, align 1, addrspace 8)
- ; GFX90A_GFX942-NEXT: [[COPY12:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_ATOMIC_ADD_F64_OFFSET_RTN]].sub0
- ; GFX90A_GFX942-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 killed [[COPY12]], implicit $exec
- ; GFX90A_GFX942-NEXT: [[COPY13:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_ATOMIC_ADD_F64_OFFSET_RTN]].sub1
- ; GFX90A_GFX942-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 killed [[COPY13]], implicit $exec
- ; GFX90A_GFX942-NEXT: $sgpr0 = COPY [[V_READFIRSTLANE_B32_]]
- ; GFX90A_GFX942-NEXT: $sgpr1 = COPY [[V_READFIRSTLANE_B32_1]]
- ; GFX90A_GFX942-NEXT: SI_RETURN_TO_EPILOG $sgpr0, $sgpr1
+ ; GFX90A-LABEL: name: buffer_ptr_atomic_fadd_f64_offset_rtn
+ ; GFX90A: bb.0 (%ir-block.0):
+ ; GFX90A-NEXT: liveins: $vgpr0, $vgpr1, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $sgpr4
+ ; GFX90A-NEXT: {{ $}}
+ ; GFX90A-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
+ ; GFX90A-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
+ ; GFX90A-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY10]], %subreg.sub0, killed [[COPY9]], %subreg.sub1, killed [[COPY8]], %subreg.sub2, killed [[COPY7]], %subreg.sub3
+ ; GFX90A-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY6]], %subreg.sub0, [[COPY5]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY11:%[0-9]+]]:av_64_align2 = COPY [[REG_SEQUENCE3]]
+ ; GFX90A-NEXT: [[BUFFER_ATOMIC_ADD_F64_OFFSET_RTN:%[0-9]+]]:av_64_align2 = BUFFER_ATOMIC_ADD_F64_OFFSET_RTN [[COPY11]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 1, implicit $exec :: (volatile dereferenceable load store (s64) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX90A-NEXT: [[COPY12:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_ATOMIC_ADD_F64_OFFSET_RTN]].sub0
+ ; GFX90A-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 killed [[COPY12]], implicit $exec
+ ; GFX90A-NEXT: [[COPY13:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_ATOMIC_ADD_F64_OFFSET_RTN]].sub1
+ ; GFX90A-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 killed [[COPY13]], implicit $exec
+ ; GFX90A-NEXT: $sgpr0 = COPY [[V_READFIRSTLANE_B32_]]
+ ; GFX90A-NEXT: $sgpr1 = COPY [[V_READFIRSTLANE_B32_1]]
+ ; GFX90A-NEXT: SI_RETURN_TO_EPILOG $sgpr0, $sgpr1
+ ;
+ ; GFX942-LABEL: name: buffer_ptr_atomic_fadd_f64_offset_rtn
+ ; GFX942: bb.0 (%ir-block.0):
+ ; GFX942-NEXT: liveins: $vgpr0, $vgpr1, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $sgpr4
+ ; GFX942-NEXT: {{ $}}
+ ; GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX942-NEXT: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX942-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX942-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
+ ; GFX942-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY6]], %subreg.sub0, [[COPY5]], %subreg.sub1
+ ; GFX942-NEXT: [[COPY7:%[0-9]+]]:av_64_align2 = COPY [[REG_SEQUENCE3]]
+ ; GFX942-NEXT: [[BUFFER_ATOMIC_ADD_F64_OFFSET_RTN:%[0-9]+]]:av_64_align2 = BUFFER_ATOMIC_ADD_F64_OFFSET_RTN [[COPY7]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 1, implicit $exec :: (volatile dereferenceable load store (s64) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX942-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_ATOMIC_ADD_F64_OFFSET_RTN]].sub0
+ ; GFX942-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 killed [[COPY8]], implicit $exec
+ ; GFX942-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_ATOMIC_ADD_F64_OFFSET_RTN]].sub1
+ ; GFX942-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 killed [[COPY9]], implicit $exec
+ ; GFX942-NEXT: $sgpr0 = COPY [[V_READFIRSTLANE_B32_]]
+ ; GFX942-NEXT: $sgpr1 = COPY [[V_READFIRSTLANE_B32_1]]
+ ; GFX942-NEXT: SI_RETURN_TO_EPILOG $sgpr0, $sgpr1
%ret = call double @llvm.amdgcn.raw.ptr.buffer.atomic.fadd.f64(double %val, ptr addrspace(8) %rsrc, i32 0, i32 %soffset, i32 0)
ret double %ret
}
define amdgpu_ps double @buffer_ptr_atomic_fadd_f64_offen_rtn(double %val, ptr addrspace(8) inreg %rsrc, i32 %voffset, i32 inreg %soffset) {
- ; GFX90A_GFX942-LABEL: name: buffer_ptr_atomic_fadd_f64_offen_rtn
- ; GFX90A_GFX942: bb.0 (%ir-block.0):
- ; GFX90A_GFX942-NEXT: liveins: $vgpr0, $vgpr1, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr2, $sgpr4
- ; GFX90A_GFX942-NEXT: {{ $}}
- ; GFX90A_GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
- ; GFX90A_GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
- ; GFX90A_GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
- ; GFX90A_GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
- ; GFX90A_GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
- ; GFX90A_GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
- ; GFX90A_GFX942-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr1
- ; GFX90A_GFX942-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY11:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY11]], %subreg.sub0, killed [[COPY10]], %subreg.sub1, killed [[COPY9]], %subreg.sub2, killed [[COPY8]], %subreg.sub3
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY7]], %subreg.sub0, [[COPY6]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY12:%[0-9]+]]:av_64_align2 = COPY [[REG_SEQUENCE3]]
- ; GFX90A_GFX942-NEXT: [[BUFFER_ATOMIC_ADD_F64_OFFEN_RTN:%[0-9]+]]:av_64_align2 = BUFFER_ATOMIC_ADD_F64_OFFEN_RTN [[COPY12]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 1, implicit $exec :: (volatile dereferenceable load store (s64) on %ir.rsrc, align 1, addrspace 8)
- ; GFX90A_GFX942-NEXT: [[COPY13:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_ATOMIC_ADD_F64_OFFEN_RTN]].sub0
- ; GFX90A_GFX942-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 killed [[COPY13]], implicit $exec
- ; GFX90A_GFX942-NEXT: [[COPY14:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_ATOMIC_ADD_F64_OFFEN_RTN]].sub1
- ; GFX90A_GFX942-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 killed [[COPY14]], implicit $exec
- ; GFX90A_GFX942-NEXT: $sgpr0 = COPY [[V_READFIRSTLANE_B32_]]
- ; GFX90A_GFX942-NEXT: $sgpr1 = COPY [[V_READFIRSTLANE_B32_1]]
- ; GFX90A_GFX942-NEXT: SI_RETURN_TO_EPILOG $sgpr0, $sgpr1
+ ; GFX90A-LABEL: name: buffer_ptr_atomic_fadd_f64_offen_rtn
+ ; GFX90A: bb.0 (%ir-block.0):
+ ; GFX90A-NEXT: liveins: $vgpr0, $vgpr1, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr2, $sgpr4
+ ; GFX90A-NEXT: {{ $}}
+ ; GFX90A-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
+ ; GFX90A-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
+ ; GFX90A-NEXT: [[COPY11:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY11]], %subreg.sub0, killed [[COPY10]], %subreg.sub1, killed [[COPY9]], %subreg.sub2, killed [[COPY8]], %subreg.sub3
+ ; GFX90A-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY7]], %subreg.sub0, [[COPY6]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY12:%[0-9]+]]:av_64_align2 = COPY [[REG_SEQUENCE3]]
+ ; GFX90A-NEXT: [[BUFFER_ATOMIC_ADD_F64_OFFEN_RTN:%[0-9]+]]:av_64_align2 = BUFFER_ATOMIC_ADD_F64_OFFEN_RTN [[COPY12]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 1, implicit $exec :: (volatile dereferenceable load store (s64) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX90A-NEXT: [[COPY13:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_ATOMIC_ADD_F64_OFFEN_RTN]].sub0
+ ; GFX90A-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 killed [[COPY13]], implicit $exec
+ ; GFX90A-NEXT: [[COPY14:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_ATOMIC_ADD_F64_OFFEN_RTN]].sub1
+ ; GFX90A-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 killed [[COPY14]], implicit $exec
+ ; GFX90A-NEXT: $sgpr0 = COPY [[V_READFIRSTLANE_B32_]]
+ ; GFX90A-NEXT: $sgpr1 = COPY [[V_READFIRSTLANE_B32_1]]
+ ; GFX90A-NEXT: SI_RETURN_TO_EPILOG $sgpr0, $sgpr1
+ ;
+ ; GFX942-LABEL: name: buffer_ptr_atomic_fadd_f64_offen_rtn
+ ; GFX942: bb.0 (%ir-block.0):
+ ; GFX942-NEXT: liveins: $vgpr0, $vgpr1, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr2, $sgpr4
+ ; GFX942-NEXT: {{ $}}
+ ; GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX942-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX942-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
+ ; GFX942-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY7]], %subreg.sub0, [[COPY6]], %subreg.sub1
+ ; GFX942-NEXT: [[COPY8:%[0-9]+]]:av_64_align2 = COPY [[REG_SEQUENCE3]]
+ ; GFX942-NEXT: [[BUFFER_ATOMIC_ADD_F64_OFFEN_RTN:%[0-9]+]]:av_64_align2 = BUFFER_ATOMIC_ADD_F64_OFFEN_RTN [[COPY8]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 1, implicit $exec :: (volatile dereferenceable load store (s64) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX942-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_ATOMIC_ADD_F64_OFFEN_RTN]].sub0
+ ; GFX942-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 killed [[COPY9]], implicit $exec
+ ; GFX942-NEXT: [[COPY10:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_ATOMIC_ADD_F64_OFFEN_RTN]].sub1
+ ; GFX942-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 killed [[COPY10]], implicit $exec
+ ; GFX942-NEXT: $sgpr0 = COPY [[V_READFIRSTLANE_B32_]]
+ ; GFX942-NEXT: $sgpr1 = COPY [[V_READFIRSTLANE_B32_1]]
+ ; GFX942-NEXT: SI_RETURN_TO_EPILOG $sgpr0, $sgpr1
%ret = call double @llvm.amdgcn.raw.ptr.buffer.atomic.fadd.f64(double %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 0)
ret double %ret
}
define amdgpu_ps double @buffer_ptr_atomic_fadd_f64_idxen_rtn(double %val, ptr addrspace(8) inreg %rsrc, i32 %vindex, i32 inreg %soffset) {
- ; GFX90A_GFX942-LABEL: name: buffer_ptr_atomic_fadd_f64_idxen_rtn
- ; GFX90A_GFX942: bb.0 (%ir-block.0):
- ; GFX90A_GFX942-NEXT: liveins: $vgpr0, $vgpr1, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr2, $sgpr4
- ; GFX90A_GFX942-NEXT: {{ $}}
- ; GFX90A_GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
- ; GFX90A_GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
- ; GFX90A_GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
- ; GFX90A_GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
- ; GFX90A_GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
- ; GFX90A_GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
- ; GFX90A_GFX942-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr1
- ; GFX90A_GFX942-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY11:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY11]], %subreg.sub0, killed [[COPY10]], %subreg.sub1, killed [[COPY9]], %subreg.sub2, killed [[COPY8]], %subreg.sub3
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY7]], %subreg.sub0, [[COPY6]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY12:%[0-9]+]]:av_64_align2 = COPY [[REG_SEQUENCE3]]
- ; GFX90A_GFX942-NEXT: [[BUFFER_ATOMIC_ADD_F64_IDXEN_RTN:%[0-9]+]]:av_64_align2 = BUFFER_ATOMIC_ADD_F64_IDXEN_RTN [[COPY12]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 1, implicit $exec :: (volatile dereferenceable load store (s64) on %ir.rsrc, align 1, addrspace 8)
- ; GFX90A_GFX942-NEXT: [[COPY13:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_ATOMIC_ADD_F64_IDXEN_RTN]].sub0
- ; GFX90A_GFX942-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 killed [[COPY13]], implicit $exec
- ; GFX90A_GFX942-NEXT: [[COPY14:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_ATOMIC_ADD_F64_IDXEN_RTN]].sub1
- ; GFX90A_GFX942-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 killed [[COPY14]], implicit $exec
- ; GFX90A_GFX942-NEXT: $sgpr0 = COPY [[V_READFIRSTLANE_B32_]]
- ; GFX90A_GFX942-NEXT: $sgpr1 = COPY [[V_READFIRSTLANE_B32_1]]
- ; GFX90A_GFX942-NEXT: SI_RETURN_TO_EPILOG $sgpr0, $sgpr1
+ ; GFX90A-LABEL: name: buffer_ptr_atomic_fadd_f64_idxen_rtn
+ ; GFX90A: bb.0 (%ir-block.0):
+ ; GFX90A-NEXT: liveins: $vgpr0, $vgpr1, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr2, $sgpr4
+ ; GFX90A-NEXT: {{ $}}
+ ; GFX90A-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
+ ; GFX90A-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
+ ; GFX90A-NEXT: [[COPY11:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY11]], %subreg.sub0, killed [[COPY10]], %subreg.sub1, killed [[COPY9]], %subreg.sub2, killed [[COPY8]], %subreg.sub3
+ ; GFX90A-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY7]], %subreg.sub0, [[COPY6]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY12:%[0-9]+]]:av_64_align2 = COPY [[REG_SEQUENCE3]]
+ ; GFX90A-NEXT: [[BUFFER_ATOMIC_ADD_F64_IDXEN_RTN:%[0-9]+]]:av_64_align2 = BUFFER_ATOMIC_ADD_F64_IDXEN_RTN [[COPY12]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 1, implicit $exec :: (volatile dereferenceable load store (s64) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX90A-NEXT: [[COPY13:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_ATOMIC_ADD_F64_IDXEN_RTN]].sub0
+ ; GFX90A-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 killed [[COPY13]], implicit $exec
+ ; GFX90A-NEXT: [[COPY14:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_ATOMIC_ADD_F64_IDXEN_RTN]].sub1
+ ; GFX90A-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 killed [[COPY14]], implicit $exec
+ ; GFX90A-NEXT: $sgpr0 = COPY [[V_READFIRSTLANE_B32_]]
+ ; GFX90A-NEXT: $sgpr1 = COPY [[V_READFIRSTLANE_B32_1]]
+ ; GFX90A-NEXT: SI_RETURN_TO_EPILOG $sgpr0, $sgpr1
+ ;
+ ; GFX942-LABEL: name: buffer_ptr_atomic_fadd_f64_idxen_rtn
+ ; GFX942: bb.0 (%ir-block.0):
+ ; GFX942-NEXT: liveins: $vgpr0, $vgpr1, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr2, $sgpr4
+ ; GFX942-NEXT: {{ $}}
+ ; GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX942-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX942-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
+ ; GFX942-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY7]], %subreg.sub0, [[COPY6]], %subreg.sub1
+ ; GFX942-NEXT: [[COPY8:%[0-9]+]]:av_64_align2 = COPY [[REG_SEQUENCE3]]
+ ; GFX942-NEXT: [[BUFFER_ATOMIC_ADD_F64_IDXEN_RTN:%[0-9]+]]:av_64_align2 = BUFFER_ATOMIC_ADD_F64_IDXEN_RTN [[COPY8]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 1, implicit $exec :: (volatile dereferenceable load store (s64) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX942-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_ATOMIC_ADD_F64_IDXEN_RTN]].sub0
+ ; GFX942-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 killed [[COPY9]], implicit $exec
+ ; GFX942-NEXT: [[COPY10:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_ATOMIC_ADD_F64_IDXEN_RTN]].sub1
+ ; GFX942-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 killed [[COPY10]], implicit $exec
+ ; GFX942-NEXT: $sgpr0 = COPY [[V_READFIRSTLANE_B32_]]
+ ; GFX942-NEXT: $sgpr1 = COPY [[V_READFIRSTLANE_B32_1]]
+ ; GFX942-NEXT: SI_RETURN_TO_EPILOG $sgpr0, $sgpr1
%ret = call double @llvm.amdgcn.struct.ptr.buffer.atomic.fadd.f64(double %val, ptr addrspace(8) %rsrc, i32 %vindex, i32 0, i32 %soffset, i32 0)
ret double %ret
}
define amdgpu_ps double @buffer_ptr_atomic_fadd_f64_bothen_rtn(double %val, ptr addrspace(8) inreg %rsrc, i32 %vindex, i32 %voffset, i32 inreg %soffset) {
- ; GFX90A_GFX942-LABEL: name: buffer_ptr_atomic_fadd_f64_bothen_rtn
- ; GFX90A_GFX942: bb.0 (%ir-block.0):
- ; GFX90A_GFX942-NEXT: liveins: $vgpr0, $vgpr1, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr2, $vgpr3, $sgpr4
- ; GFX90A_GFX942-NEXT: {{ $}}
- ; GFX90A_GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
- ; GFX90A_GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr3
- ; GFX90A_GFX942-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
- ; GFX90A_GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr3
- ; GFX90A_GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr2
- ; GFX90A_GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr1
- ; GFX90A_GFX942-NEXT: [[COPY6:%[0-9]+]]:sgpr_32 = COPY $sgpr0
- ; GFX90A_GFX942-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr1
- ; GFX90A_GFX942-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY $vgpr0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY6]], %subreg.sub0, [[COPY5]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY11:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY12:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY12]], %subreg.sub0, killed [[COPY11]], %subreg.sub1, killed [[COPY10]], %subreg.sub2, killed [[COPY9]], %subreg.sub3
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY8]], %subreg.sub0, [[COPY7]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE4:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY13:%[0-9]+]]:av_64_align2 = COPY [[REG_SEQUENCE3]]
- ; GFX90A_GFX942-NEXT: [[BUFFER_ATOMIC_ADD_F64_BOTHEN_RTN:%[0-9]+]]:av_64_align2 = BUFFER_ATOMIC_ADD_F64_BOTHEN_RTN [[COPY13]], killed [[REG_SEQUENCE4]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 1, implicit $exec :: (volatile dereferenceable load store (s64) on %ir.rsrc, align 1, addrspace 8)
- ; GFX90A_GFX942-NEXT: [[COPY14:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_ATOMIC_ADD_F64_BOTHEN_RTN]].sub0
- ; GFX90A_GFX942-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 killed [[COPY14]], implicit $exec
- ; GFX90A_GFX942-NEXT: [[COPY15:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_ATOMIC_ADD_F64_BOTHEN_RTN]].sub1
- ; GFX90A_GFX942-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 killed [[COPY15]], implicit $exec
- ; GFX90A_GFX942-NEXT: $sgpr0 = COPY [[V_READFIRSTLANE_B32_]]
- ; GFX90A_GFX942-NEXT: $sgpr1 = COPY [[V_READFIRSTLANE_B32_1]]
- ; GFX90A_GFX942-NEXT: SI_RETURN_TO_EPILOG $sgpr0, $sgpr1
+ ; GFX90A-LABEL: name: buffer_ptr_atomic_fadd_f64_bothen_rtn
+ ; GFX90A: bb.0 (%ir-block.0):
+ ; GFX90A-NEXT: liveins: $vgpr0, $vgpr1, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr2, $vgpr3, $sgpr4
+ ; GFX90A-NEXT: {{ $}}
+ ; GFX90A-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr3
+ ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX90A-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
+ ; GFX90A-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY6]], %subreg.sub0, [[COPY5]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY11:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
+ ; GFX90A-NEXT: [[COPY12:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY12]], %subreg.sub0, killed [[COPY11]], %subreg.sub1, killed [[COPY10]], %subreg.sub2, killed [[COPY9]], %subreg.sub3
+ ; GFX90A-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY8]], %subreg.sub0, [[COPY7]], %subreg.sub1
+ ; GFX90A-NEXT: [[REG_SEQUENCE4:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY13:%[0-9]+]]:av_64_align2 = COPY [[REG_SEQUENCE3]]
+ ; GFX90A-NEXT: [[BUFFER_ATOMIC_ADD_F64_BOTHEN_RTN:%[0-9]+]]:av_64_align2 = BUFFER_ATOMIC_ADD_F64_BOTHEN_RTN [[COPY13]], killed [[REG_SEQUENCE4]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 1, implicit $exec :: (volatile dereferenceable load store (s64) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX90A-NEXT: [[COPY14:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_ATOMIC_ADD_F64_BOTHEN_RTN]].sub0
+ ; GFX90A-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 killed [[COPY14]], implicit $exec
+ ; GFX90A-NEXT: [[COPY15:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_ATOMIC_ADD_F64_BOTHEN_RTN]].sub1
+ ; GFX90A-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 killed [[COPY15]], implicit $exec
+ ; GFX90A-NEXT: $sgpr0 = COPY [[V_READFIRSTLANE_B32_]]
+ ; GFX90A-NEXT: $sgpr1 = COPY [[V_READFIRSTLANE_B32_1]]
+ ; GFX90A-NEXT: SI_RETURN_TO_EPILOG $sgpr0, $sgpr1
+ ;
+ ; GFX942-LABEL: name: buffer_ptr_atomic_fadd_f64_bothen_rtn
+ ; GFX942: bb.0 (%ir-block.0):
+ ; GFX942-NEXT: liveins: $vgpr0, $vgpr1, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr2, $vgpr3, $sgpr4
+ ; GFX942-NEXT: {{ $}}
+ ; GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr3
+ ; GFX942-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX942-NEXT: [[COPY6:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX942-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX942-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY6]], %subreg.sub0, [[COPY5]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
+ ; GFX942-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY8]], %subreg.sub0, [[COPY7]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE4:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
+ ; GFX942-NEXT: [[COPY9:%[0-9]+]]:av_64_align2 = COPY [[REG_SEQUENCE3]]
+ ; GFX942-NEXT: [[BUFFER_ATOMIC_ADD_F64_BOTHEN_RTN:%[0-9]+]]:av_64_align2 = BUFFER_ATOMIC_ADD_F64_BOTHEN_RTN [[COPY9]], killed [[REG_SEQUENCE4]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 1, implicit $exec :: (volatile dereferenceable load store (s64) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX942-NEXT: [[COPY10:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_ATOMIC_ADD_F64_BOTHEN_RTN]].sub0
+ ; GFX942-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 killed [[COPY10]], implicit $exec
+ ; GFX942-NEXT: [[COPY11:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_ATOMIC_ADD_F64_BOTHEN_RTN]].sub1
+ ; GFX942-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 killed [[COPY11]], implicit $exec
+ ; GFX942-NEXT: $sgpr0 = COPY [[V_READFIRSTLANE_B32_]]
+ ; GFX942-NEXT: $sgpr1 = COPY [[V_READFIRSTLANE_B32_1]]
+ ; GFX942-NEXT: SI_RETURN_TO_EPILOG $sgpr0, $sgpr1
%ret = call double @llvm.amdgcn.struct.ptr.buffer.atomic.fadd.f64(double %val, ptr addrspace(8) %rsrc, i32 %vindex, i32 %voffset, i32 %soffset, i32 0)
ret double %ret
}
diff --git a/llvm/test/CodeGen/AMDGPU/buffer-atomic-fadd.v2f16-no-rtn.ll b/llvm/test/CodeGen/AMDGPU/buffer-atomic-fadd.v2f16-no-rtn.ll
index 764b67488e2d8..224121867eb72 100644
--- a/llvm/test/CodeGen/AMDGPU/buffer-atomic-fadd.v2f16-no-rtn.ll
+++ b/llvm/test/CodeGen/AMDGPU/buffer-atomic-fadd.v2f16-no-rtn.ll
@@ -1,10 +1,10 @@
; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
; RUN: llc -mtriple=amdgpu9.08 -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GFX908 %s
-; RUN: llc -mtriple=amdgpu9.0a -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GFX90A_GFX942 %s
-; RUN: llc -mtriple=amdgpu9.42 -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GFX90A_GFX942 %s
+; RUN: llc -mtriple=amdgpu9.0a -stop-after=amdgpu-isel < %s | FileCheck -check-prefixes=GFX90A_GFX942,GFX90A %s
+; RUN: llc -mtriple=amdgpu9.42 -stop-after=amdgpu-isel < %s | FileCheck -check-prefixes=GFX90A_GFX942,GFX942 %s
; RUN: llc -mtriple=amdgpu9.08 -enable-new-pm -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GFX908 %s
-; RUN: llc -mtriple=amdgpu9.0a -enable-new-pm -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GFX90A_GFX942 %s
-; RUN: llc -mtriple=amdgpu9.42 -enable-new-pm -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GFX90A_GFX942 %s
+; RUN: llc -mtriple=amdgpu9.0a -enable-new-pm -stop-after=amdgpu-isel < %s | FileCheck -check-prefixes=GFX90A_GFX942,GFX90A %s
+; RUN: llc -mtriple=amdgpu9.42 -enable-new-pm -stop-after=amdgpu-isel < %s | FileCheck -check-prefixes=GFX90A_GFX942,GFX942 %s
define amdgpu_ps void @buffer_atomic_fadd_v2f16_offset_no_rtn(<2 x half> %val, <4 x i32> inreg %rsrc, i32 inreg %soffset) {
; GFX908-LABEL: name: buffer_atomic_fadd_v2f16_offset_no_rtn
@@ -165,25 +165,41 @@ define amdgpu_ps void @buffer_ptr_atomic_fadd_v2f16_offset_no_rtn(<2 x half> %va
; GFX908-NEXT: BUFFER_ATOMIC_PK_ADD_F16_OFFSET [[COPY5]], killed [[REG_SEQUENCE2]], [[COPY]], 4095, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
; GFX908-NEXT: S_ENDPGM 0
;
- ; GFX90A_GFX942-LABEL: name: buffer_ptr_atomic_fadd_v2f16_offset_no_rtn
- ; GFX90A_GFX942: bb.0 (%ir-block.0):
- ; GFX90A_GFX942-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $sgpr4
- ; GFX90A_GFX942-NEXT: {{ $}}
- ; GFX90A_GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
- ; GFX90A_GFX942-NEXT: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr3
- ; GFX90A_GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr2
- ; GFX90A_GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr1
- ; GFX90A_GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr0
- ; GFX90A_GFX942-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
- ; GFX90A_GFX942-NEXT: BUFFER_ATOMIC_PK_ADD_F16_OFFSET [[COPY5]], killed [[REG_SEQUENCE2]], [[COPY]], 4095, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
- ; GFX90A_GFX942-NEXT: S_ENDPGM 0
+ ; GFX90A-LABEL: name: buffer_ptr_atomic_fadd_v2f16_offset_no_rtn
+ ; GFX90A: bb.0 (%ir-block.0):
+ ; GFX90A-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $sgpr4
+ ; GFX90A-NEXT: {{ $}}
+ ; GFX90A-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
+ ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
+ ; GFX90A-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
+ ; GFX90A-NEXT: BUFFER_ATOMIC_PK_ADD_F16_OFFSET [[COPY5]], killed [[REG_SEQUENCE2]], [[COPY]], 4095, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX90A-NEXT: S_ENDPGM 0
+ ;
+ ; GFX942-LABEL: name: buffer_ptr_atomic_fadd_v2f16_offset_no_rtn
+ ; GFX942: bb.0 (%ir-block.0):
+ ; GFX942-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $sgpr4
+ ; GFX942-NEXT: {{ $}}
+ ; GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX942-NEXT: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX942-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
+ ; GFX942-NEXT: BUFFER_ATOMIC_PK_ADD_F16_OFFSET [[COPY5]], killed [[REG_SEQUENCE2]], [[COPY]], 4095, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX942-NEXT: S_ENDPGM 0
%ret = call <2 x half> @llvm.amdgcn.raw.ptr.buffer.atomic.fadd.v2f16(<2 x half> %val, ptr addrspace(8) %rsrc, i32 4095, i32 %soffset, i32 0)
ret void
}
@@ -210,26 +226,43 @@ define amdgpu_ps void @buffer_ptr_atomic_fadd_v2f16_offen_no_rtn(<2 x half> %val
; GFX908-NEXT: BUFFER_ATOMIC_PK_ADD_F16_OFFEN [[COPY6]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
; GFX908-NEXT: S_ENDPGM 0
;
- ; GFX90A_GFX942-LABEL: name: buffer_ptr_atomic_fadd_v2f16_offen_no_rtn
- ; GFX90A_GFX942: bb.0 (%ir-block.0):
- ; GFX90A_GFX942-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $sgpr4
- ; GFX90A_GFX942-NEXT: {{ $}}
- ; GFX90A_GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
- ; GFX90A_GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
- ; GFX90A_GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
- ; GFX90A_GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
- ; GFX90A_GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
- ; GFX90A_GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
- ; GFX90A_GFX942-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY10]], %subreg.sub0, killed [[COPY9]], %subreg.sub1, killed [[COPY8]], %subreg.sub2, killed [[COPY7]], %subreg.sub3
- ; GFX90A_GFX942-NEXT: BUFFER_ATOMIC_PK_ADD_F16_OFFEN [[COPY6]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
- ; GFX90A_GFX942-NEXT: S_ENDPGM 0
+ ; GFX90A-LABEL: name: buffer_ptr_atomic_fadd_v2f16_offen_no_rtn
+ ; GFX90A: bb.0 (%ir-block.0):
+ ; GFX90A-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $sgpr4
+ ; GFX90A-NEXT: {{ $}}
+ ; GFX90A-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
+ ; GFX90A-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
+ ; GFX90A-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY10]], %subreg.sub0, killed [[COPY9]], %subreg.sub1, killed [[COPY8]], %subreg.sub2, killed [[COPY7]], %subreg.sub3
+ ; GFX90A-NEXT: BUFFER_ATOMIC_PK_ADD_F16_OFFEN [[COPY6]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX90A-NEXT: S_ENDPGM 0
+ ;
+ ; GFX942-LABEL: name: buffer_ptr_atomic_fadd_v2f16_offen_no_rtn
+ ; GFX942: bb.0 (%ir-block.0):
+ ; GFX942-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $sgpr4
+ ; GFX942-NEXT: {{ $}}
+ ; GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX942-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
+ ; GFX942-NEXT: BUFFER_ATOMIC_PK_ADD_F16_OFFEN [[COPY6]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX942-NEXT: S_ENDPGM 0
%ret = call <2 x half> @llvm.amdgcn.raw.ptr.buffer.atomic.fadd.v2f16(<2 x half> %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 0)
ret void
}
@@ -256,26 +289,43 @@ define amdgpu_ps void @buffer_ptr_atomic_fadd_v2f16_idxen_no_rtn(<2 x half> %val
; GFX908-NEXT: BUFFER_ATOMIC_PK_ADD_F16_IDXEN [[COPY6]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
; GFX908-NEXT: S_ENDPGM 0
;
- ; GFX90A_GFX942-LABEL: name: buffer_ptr_atomic_fadd_v2f16_idxen_no_rtn
- ; GFX90A_GFX942: bb.0 (%ir-block.0):
- ; GFX90A_GFX942-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $sgpr4
- ; GFX90A_GFX942-NEXT: {{ $}}
- ; GFX90A_GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
- ; GFX90A_GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
- ; GFX90A_GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
- ; GFX90A_GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
- ; GFX90A_GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
- ; GFX90A_GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
- ; GFX90A_GFX942-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY10]], %subreg.sub0, killed [[COPY9]], %subreg.sub1, killed [[COPY8]], %subreg.sub2, killed [[COPY7]], %subreg.sub3
- ; GFX90A_GFX942-NEXT: BUFFER_ATOMIC_PK_ADD_F16_IDXEN [[COPY6]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
- ; GFX90A_GFX942-NEXT: S_ENDPGM 0
+ ; GFX90A-LABEL: name: buffer_ptr_atomic_fadd_v2f16_idxen_no_rtn
+ ; GFX90A: bb.0 (%ir-block.0):
+ ; GFX90A-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $sgpr4
+ ; GFX90A-NEXT: {{ $}}
+ ; GFX90A-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
+ ; GFX90A-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
+ ; GFX90A-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY10]], %subreg.sub0, killed [[COPY9]], %subreg.sub1, killed [[COPY8]], %subreg.sub2, killed [[COPY7]], %subreg.sub3
+ ; GFX90A-NEXT: BUFFER_ATOMIC_PK_ADD_F16_IDXEN [[COPY6]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX90A-NEXT: S_ENDPGM 0
+ ;
+ ; GFX942-LABEL: name: buffer_ptr_atomic_fadd_v2f16_idxen_no_rtn
+ ; GFX942: bb.0 (%ir-block.0):
+ ; GFX942-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $sgpr4
+ ; GFX942-NEXT: {{ $}}
+ ; GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX942-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
+ ; GFX942-NEXT: BUFFER_ATOMIC_PK_ADD_F16_IDXEN [[COPY6]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX942-NEXT: S_ENDPGM 0
%ret = call <2 x half> @llvm.amdgcn.struct.ptr.buffer.atomic.fadd.v2f16(<2 x half> %val, ptr addrspace(8) %rsrc, i32 %vindex, i32 0, i32 %soffset, i32 0)
ret void
}
@@ -304,28 +354,47 @@ define amdgpu_ps void @buffer_ptr_atomic_fadd_v2f16_bothen_no_rtn(<2 x half> %va
; GFX908-NEXT: BUFFER_ATOMIC_PK_ADD_F16_BOTHEN [[COPY7]], killed [[REG_SEQUENCE3]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 2, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
; GFX908-NEXT: S_ENDPGM 0
;
- ; GFX90A_GFX942-LABEL: name: buffer_ptr_atomic_fadd_v2f16_bothen_no_rtn
- ; GFX90A_GFX942: bb.0 (%ir-block.0):
- ; GFX90A_GFX942-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $vgpr2, $sgpr4
- ; GFX90A_GFX942-NEXT: {{ $}}
- ; GFX90A_GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
- ; GFX90A_GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
- ; GFX90A_GFX942-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr1
- ; GFX90A_GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr3
- ; GFX90A_GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr2
- ; GFX90A_GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr1
- ; GFX90A_GFX942-NEXT: [[COPY6:%[0-9]+]]:sgpr_32 = COPY $sgpr0
- ; GFX90A_GFX942-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY6]], %subreg.sub0, [[COPY5]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY11:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY11]], %subreg.sub0, killed [[COPY10]], %subreg.sub1, killed [[COPY9]], %subreg.sub2, killed [[COPY8]], %subreg.sub3
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: BUFFER_ATOMIC_PK_ADD_F16_BOTHEN [[COPY7]], killed [[REG_SEQUENCE3]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 2, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
- ; GFX90A_GFX942-NEXT: S_ENDPGM 0
+ ; GFX90A-LABEL: name: buffer_ptr_atomic_fadd_v2f16_bothen_no_rtn
+ ; GFX90A: bb.0 (%ir-block.0):
+ ; GFX90A-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $vgpr2, $sgpr4
+ ; GFX90A-NEXT: {{ $}}
+ ; GFX90A-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
+ ; GFX90A-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY6]], %subreg.sub0, [[COPY5]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
+ ; GFX90A-NEXT: [[COPY11:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY11]], %subreg.sub0, killed [[COPY10]], %subreg.sub1, killed [[COPY9]], %subreg.sub2, killed [[COPY8]], %subreg.sub3
+ ; GFX90A-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
+ ; GFX90A-NEXT: BUFFER_ATOMIC_PK_ADD_F16_BOTHEN [[COPY7]], killed [[REG_SEQUENCE3]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 2, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX90A-NEXT: S_ENDPGM 0
+ ;
+ ; GFX942-LABEL: name: buffer_ptr_atomic_fadd_v2f16_bothen_no_rtn
+ ; GFX942: bb.0 (%ir-block.0):
+ ; GFX942-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $vgpr2, $sgpr4
+ ; GFX942-NEXT: {{ $}}
+ ; GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX942-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX942-NEXT: [[COPY6:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX942-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY6]], %subreg.sub0, [[COPY5]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
+ ; GFX942-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
+ ; GFX942-NEXT: BUFFER_ATOMIC_PK_ADD_F16_BOTHEN [[COPY7]], killed [[REG_SEQUENCE3]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 2, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX942-NEXT: S_ENDPGM 0
%ret = call <2 x half> @llvm.amdgcn.struct.ptr.buffer.atomic.fadd.v2f16(<2 x half> %val, ptr addrspace(8) %rsrc, i32 %vindex, i32 %voffset, i32 %soffset, i32 2)
ret void
}
diff --git a/llvm/test/CodeGen/AMDGPU/buffer-atomic-fadd.v2f16-rtn.ll b/llvm/test/CodeGen/AMDGPU/buffer-atomic-fadd.v2f16-rtn.ll
index ea4bb1f8f873b..c55efd5b91cd5 100644
--- a/llvm/test/CodeGen/AMDGPU/buffer-atomic-fadd.v2f16-rtn.ll
+++ b/llvm/test/CodeGen/AMDGPU/buffer-atomic-fadd.v2f16-rtn.ll
@@ -1,8 +1,8 @@
; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
-; RUN: llc -mtriple=amdgpu9.0a -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GFX90A_GFX942 %s
-; RUN: llc -mtriple=amdgpu9.42 -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GFX90A_GFX942 %s
-; RUN: llc -mtriple=amdgpu9.0a -enable-new-pm -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GFX90A_GFX942 %s
-; RUN: llc -mtriple=amdgpu9.42 -enable-new-pm -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GFX90A_GFX942 %s
+; RUN: llc -mtriple=amdgpu9.0a -stop-after=amdgpu-isel < %s | FileCheck -check-prefixes=GFX90A_GFX942,GFX90A %s
+; RUN: llc -mtriple=amdgpu9.42 -stop-after=amdgpu-isel < %s | FileCheck -check-prefixes=GFX90A_GFX942,GFX942 %s
+; RUN: llc -mtriple=amdgpu9.0a -enable-new-pm -stop-after=amdgpu-isel < %s | FileCheck -check-prefixes=GFX90A_GFX942,GFX90A %s
+; RUN: llc -mtriple=amdgpu9.42 -enable-new-pm -stop-after=amdgpu-isel < %s | FileCheck -check-prefixes=GFX90A_GFX942,GFX942 %s
define amdgpu_ps <2 x half> @buffer_atomic_fadd_v2f16_offset_rtn(<2 x half> %val, <4 x i32> inreg %rsrc, i32 inreg %soffset) {
; GFX90A_GFX942-LABEL: name: buffer_atomic_fadd_v2f16_offset_rtn
@@ -86,106 +86,179 @@ define amdgpu_ps <2 x half> @buffer_atomic_fadd_v2f16_bothen_rtn(<2 x half> %val
}
define amdgpu_ps <2 x half> @buffer_ptr_atomic_fadd_v2f16_offset_rtn(<2 x half> %val, ptr addrspace(8) inreg %rsrc, i32 inreg %soffset) {
- ; GFX90A_GFX942-LABEL: name: buffer_ptr_atomic_fadd_v2f16_offset_rtn
- ; GFX90A_GFX942: bb.0 (%ir-block.0):
- ; GFX90A_GFX942-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $sgpr4
- ; GFX90A_GFX942-NEXT: {{ $}}
- ; GFX90A_GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
- ; GFX90A_GFX942-NEXT: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr3
- ; GFX90A_GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr2
- ; GFX90A_GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr1
- ; GFX90A_GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr0
- ; GFX90A_GFX942-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
- ; GFX90A_GFX942-NEXT: [[BUFFER_ATOMIC_PK_ADD_F16_OFFSET_RTN:%[0-9]+]]:av_32 = BUFFER_ATOMIC_PK_ADD_F16_OFFSET_RTN [[COPY5]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 1, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
- ; GFX90A_GFX942-NEXT: $vgpr0 = COPY [[BUFFER_ATOMIC_PK_ADD_F16_OFFSET_RTN]]
- ; GFX90A_GFX942-NEXT: SI_RETURN_TO_EPILOG $vgpr0
+ ; GFX90A-LABEL: name: buffer_ptr_atomic_fadd_v2f16_offset_rtn
+ ; GFX90A: bb.0 (%ir-block.0):
+ ; GFX90A-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $sgpr4
+ ; GFX90A-NEXT: {{ $}}
+ ; GFX90A-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
+ ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
+ ; GFX90A-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
+ ; GFX90A-NEXT: [[BUFFER_ATOMIC_PK_ADD_F16_OFFSET_RTN:%[0-9]+]]:av_32 = BUFFER_ATOMIC_PK_ADD_F16_OFFSET_RTN [[COPY5]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 1, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX90A-NEXT: $vgpr0 = COPY [[BUFFER_ATOMIC_PK_ADD_F16_OFFSET_RTN]]
+ ; GFX90A-NEXT: SI_RETURN_TO_EPILOG $vgpr0
+ ;
+ ; GFX942-LABEL: name: buffer_ptr_atomic_fadd_v2f16_offset_rtn
+ ; GFX942: bb.0 (%ir-block.0):
+ ; GFX942-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $sgpr4
+ ; GFX942-NEXT: {{ $}}
+ ; GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX942-NEXT: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX942-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
+ ; GFX942-NEXT: [[BUFFER_ATOMIC_PK_ADD_F16_OFFSET_RTN:%[0-9]+]]:av_32 = BUFFER_ATOMIC_PK_ADD_F16_OFFSET_RTN [[COPY5]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 1, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX942-NEXT: $vgpr0 = COPY [[BUFFER_ATOMIC_PK_ADD_F16_OFFSET_RTN]]
+ ; GFX942-NEXT: SI_RETURN_TO_EPILOG $vgpr0
%ret = call <2 x half> @llvm.amdgcn.raw.ptr.buffer.atomic.fadd.v2f16(<2 x half> %val, ptr addrspace(8) %rsrc, i32 0, i32 %soffset, i32 0)
ret <2 x half> %ret
}
define amdgpu_ps <2 x half> @buffer_ptr_atomic_fadd_v2f16_offen_rtn(<2 x half> %val, ptr addrspace(8) inreg %rsrc, i32 %voffset, i32 inreg %soffset) {
- ; GFX90A_GFX942-LABEL: name: buffer_ptr_atomic_fadd_v2f16_offen_rtn
- ; GFX90A_GFX942: bb.0 (%ir-block.0):
- ; GFX90A_GFX942-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $sgpr4
- ; GFX90A_GFX942-NEXT: {{ $}}
- ; GFX90A_GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
- ; GFX90A_GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
- ; GFX90A_GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
- ; GFX90A_GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
- ; GFX90A_GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
- ; GFX90A_GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
- ; GFX90A_GFX942-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY10]], %subreg.sub0, killed [[COPY9]], %subreg.sub1, killed [[COPY8]], %subreg.sub2, killed [[COPY7]], %subreg.sub3
- ; GFX90A_GFX942-NEXT: [[BUFFER_ATOMIC_PK_ADD_F16_OFFEN_RTN:%[0-9]+]]:av_32 = BUFFER_ATOMIC_PK_ADD_F16_OFFEN_RTN [[COPY6]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 1, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
- ; GFX90A_GFX942-NEXT: $vgpr0 = COPY [[BUFFER_ATOMIC_PK_ADD_F16_OFFEN_RTN]]
- ; GFX90A_GFX942-NEXT: SI_RETURN_TO_EPILOG $vgpr0
+ ; GFX90A-LABEL: name: buffer_ptr_atomic_fadd_v2f16_offen_rtn
+ ; GFX90A: bb.0 (%ir-block.0):
+ ; GFX90A-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $sgpr4
+ ; GFX90A-NEXT: {{ $}}
+ ; GFX90A-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
+ ; GFX90A-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
+ ; GFX90A-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY10]], %subreg.sub0, killed [[COPY9]], %subreg.sub1, killed [[COPY8]], %subreg.sub2, killed [[COPY7]], %subreg.sub3
+ ; GFX90A-NEXT: [[BUFFER_ATOMIC_PK_ADD_F16_OFFEN_RTN:%[0-9]+]]:av_32 = BUFFER_ATOMIC_PK_ADD_F16_OFFEN_RTN [[COPY6]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 1, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX90A-NEXT: $vgpr0 = COPY [[BUFFER_ATOMIC_PK_ADD_F16_OFFEN_RTN]]
+ ; GFX90A-NEXT: SI_RETURN_TO_EPILOG $vgpr0
+ ;
+ ; GFX942-LABEL: name: buffer_ptr_atomic_fadd_v2f16_offen_rtn
+ ; GFX942: bb.0 (%ir-block.0):
+ ; GFX942-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $sgpr4
+ ; GFX942-NEXT: {{ $}}
+ ; GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX942-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
+ ; GFX942-NEXT: [[BUFFER_ATOMIC_PK_ADD_F16_OFFEN_RTN:%[0-9]+]]:av_32 = BUFFER_ATOMIC_PK_ADD_F16_OFFEN_RTN [[COPY6]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 1, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX942-NEXT: $vgpr0 = COPY [[BUFFER_ATOMIC_PK_ADD_F16_OFFEN_RTN]]
+ ; GFX942-NEXT: SI_RETURN_TO_EPILOG $vgpr0
%ret = call <2 x half> @llvm.amdgcn.raw.ptr.buffer.atomic.fadd.v2f16(<2 x half> %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 0)
ret <2 x half> %ret
}
define amdgpu_ps <2 x half> @buffer_ptr_atomic_fadd_v2f16_idxen_rtn(<2 x half> %val, ptr addrspace(8) inreg %rsrc, i32 %vindex, i32 inreg %soffset) {
- ; GFX90A_GFX942-LABEL: name: buffer_ptr_atomic_fadd_v2f16_idxen_rtn
- ; GFX90A_GFX942: bb.0 (%ir-block.0):
- ; GFX90A_GFX942-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $sgpr4
- ; GFX90A_GFX942-NEXT: {{ $}}
- ; GFX90A_GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
- ; GFX90A_GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
- ; GFX90A_GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
- ; GFX90A_GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
- ; GFX90A_GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
- ; GFX90A_GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
- ; GFX90A_GFX942-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY10]], %subreg.sub0, killed [[COPY9]], %subreg.sub1, killed [[COPY8]], %subreg.sub2, killed [[COPY7]], %subreg.sub3
- ; GFX90A_GFX942-NEXT: [[BUFFER_ATOMIC_PK_ADD_F16_IDXEN_RTN:%[0-9]+]]:av_32 = BUFFER_ATOMIC_PK_ADD_F16_IDXEN_RTN [[COPY6]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 1, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
- ; GFX90A_GFX942-NEXT: $vgpr0 = COPY [[BUFFER_ATOMIC_PK_ADD_F16_IDXEN_RTN]]
- ; GFX90A_GFX942-NEXT: SI_RETURN_TO_EPILOG $vgpr0
+ ; GFX90A-LABEL: name: buffer_ptr_atomic_fadd_v2f16_idxen_rtn
+ ; GFX90A: bb.0 (%ir-block.0):
+ ; GFX90A-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $sgpr4
+ ; GFX90A-NEXT: {{ $}}
+ ; GFX90A-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
+ ; GFX90A-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
+ ; GFX90A-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY10]], %subreg.sub0, killed [[COPY9]], %subreg.sub1, killed [[COPY8]], %subreg.sub2, killed [[COPY7]], %subreg.sub3
+ ; GFX90A-NEXT: [[BUFFER_ATOMIC_PK_ADD_F16_IDXEN_RTN:%[0-9]+]]:av_32 = BUFFER_ATOMIC_PK_ADD_F16_IDXEN_RTN [[COPY6]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 1, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX90A-NEXT: $vgpr0 = COPY [[BUFFER_ATOMIC_PK_ADD_F16_IDXEN_RTN]]
+ ; GFX90A-NEXT: SI_RETURN_TO_EPILOG $vgpr0
+ ;
+ ; GFX942-LABEL: name: buffer_ptr_atomic_fadd_v2f16_idxen_rtn
+ ; GFX942: bb.0 (%ir-block.0):
+ ; GFX942-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $sgpr4
+ ; GFX942-NEXT: {{ $}}
+ ; GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX942-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX942-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
+ ; GFX942-NEXT: [[BUFFER_ATOMIC_PK_ADD_F16_IDXEN_RTN:%[0-9]+]]:av_32 = BUFFER_ATOMIC_PK_ADD_F16_IDXEN_RTN [[COPY6]], [[COPY1]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 1, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX942-NEXT: $vgpr0 = COPY [[BUFFER_ATOMIC_PK_ADD_F16_IDXEN_RTN]]
+ ; GFX942-NEXT: SI_RETURN_TO_EPILOG $vgpr0
%ret = call <2 x half> @llvm.amdgcn.struct.ptr.buffer.atomic.fadd.v2f16(<2 x half> %val, ptr addrspace(8) %rsrc, i32 %vindex, i32 0, i32 %soffset, i32 0)
ret <2 x half> %ret
}
define amdgpu_ps <2 x half> @buffer_ptr_atomic_fadd_v2f16_bothen_rtn(<2 x half> %val, ptr addrspace(8) inreg %rsrc, i32 %vindex, i32 %voffset, i32 inreg %soffset) {
- ; GFX90A_GFX942-LABEL: name: buffer_ptr_atomic_fadd_v2f16_bothen_rtn
- ; GFX90A_GFX942: bb.0 (%ir-block.0):
- ; GFX90A_GFX942-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $vgpr2, $sgpr4
- ; GFX90A_GFX942-NEXT: {{ $}}
- ; GFX90A_GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
- ; GFX90A_GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
- ; GFX90A_GFX942-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr1
- ; GFX90A_GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr3
- ; GFX90A_GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr2
- ; GFX90A_GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr1
- ; GFX90A_GFX942-NEXT: [[COPY6:%[0-9]+]]:sgpr_32 = COPY $sgpr0
- ; GFX90A_GFX942-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY6]], %subreg.sub0, [[COPY5]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX90A_GFX942-NEXT: [[COPY11:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY11]], %subreg.sub0, killed [[COPY10]], %subreg.sub1, killed [[COPY9]], %subreg.sub2, killed [[COPY8]], %subreg.sub3
- ; GFX90A_GFX942-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
- ; GFX90A_GFX942-NEXT: [[BUFFER_ATOMIC_PK_ADD_F16_BOTHEN_RTN:%[0-9]+]]:av_32 = BUFFER_ATOMIC_PK_ADD_F16_BOTHEN_RTN [[COPY7]], killed [[REG_SEQUENCE3]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 3, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
- ; GFX90A_GFX942-NEXT: $vgpr0 = COPY [[BUFFER_ATOMIC_PK_ADD_F16_BOTHEN_RTN]]
- ; GFX90A_GFX942-NEXT: SI_RETURN_TO_EPILOG $vgpr0
+ ; GFX90A-LABEL: name: buffer_ptr_atomic_fadd_v2f16_bothen_rtn
+ ; GFX90A: bb.0 (%ir-block.0):
+ ; GFX90A-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $vgpr2, $sgpr4
+ ; GFX90A-NEXT: {{ $}}
+ ; GFX90A-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
+ ; GFX90A-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY6]], %subreg.sub0, [[COPY5]], %subreg.sub1
+ ; GFX90A-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub1
+ ; GFX90A-NEXT: [[COPY11:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
+ ; GFX90A-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY11]], %subreg.sub0, killed [[COPY10]], %subreg.sub1, killed [[COPY9]], %subreg.sub2, killed [[COPY8]], %subreg.sub3
+ ; GFX90A-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
+ ; GFX90A-NEXT: [[BUFFER_ATOMIC_PK_ADD_F16_BOTHEN_RTN:%[0-9]+]]:av_32 = BUFFER_ATOMIC_PK_ADD_F16_BOTHEN_RTN [[COPY7]], killed [[REG_SEQUENCE3]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 3, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX90A-NEXT: $vgpr0 = COPY [[BUFFER_ATOMIC_PK_ADD_F16_BOTHEN_RTN]]
+ ; GFX90A-NEXT: SI_RETURN_TO_EPILOG $vgpr0
+ ;
+ ; GFX942-LABEL: name: buffer_ptr_atomic_fadd_v2f16_bothen_rtn
+ ; GFX942: bb.0 (%ir-block.0):
+ ; GFX942-NEXT: liveins: $vgpr0, $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr1, $vgpr2, $sgpr4
+ ; GFX942-NEXT: {{ $}}
+ ; GFX942-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr4
+ ; GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; GFX942-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; GFX942-NEXT: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr3
+ ; GFX942-NEXT: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr2
+ ; GFX942-NEXT: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr1
+ ; GFX942-NEXT: [[COPY6:%[0-9]+]]:sgpr_32 = COPY $sgpr0
+ ; GFX942-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY6]], %subreg.sub0, [[COPY5]], %subreg.sub1
+ ; GFX942-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
+ ; GFX942-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
+ ; GFX942-NEXT: [[BUFFER_ATOMIC_PK_ADD_F16_BOTHEN_RTN:%[0-9]+]]:av_32 = BUFFER_ATOMIC_PK_ADD_F16_BOTHEN_RTN [[COPY7]], killed [[REG_SEQUENCE3]], killed [[REG_SEQUENCE2]], [[COPY]], 0, 3, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8)
+ ; GFX942-NEXT: $vgpr0 = COPY [[BUFFER_ATOMIC_PK_ADD_F16_BOTHEN_RTN]]
+ ; GFX942-NEXT: SI_RETURN_TO_EPILOG $vgpr0
%ret = call <2 x half> @llvm.amdgcn.struct.ptr.buffer.atomic.fadd.v2f16(<2 x half> %val, ptr addrspace(8) %rsrc, i32 %vindex, i32 %voffset, i32 %soffset, i32 2)
ret <2 x half> %ret
}
diff --git a/llvm/test/CodeGen/AMDGPU/buffer-fat-pointers-memcpy.ll b/llvm/test/CodeGen/AMDGPU/buffer-fat-pointers-memcpy.ll
index a136200b598e9..d7d54dd901fb5 100644
--- a/llvm/test/CodeGen/AMDGPU/buffer-fat-pointers-memcpy.ll
+++ b/llvm/test/CodeGen/AMDGPU/buffer-fat-pointers-memcpy.ll
@@ -238,18 +238,18 @@ define amdgpu_kernel void @memcpy_known(ptr addrspace(7) %src, ptr addrspace(7)
; SDAG-GFX942-NEXT: s_load_dword s7, s[4:5], 0x34
; SDAG-GFX942-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x44
; SDAG-GFX942-NEXT: s_load_dword s15, s[4:5], 0x54
-; SDAG-GFX942-NEXT: s_mov_b32 s16, 0
; SDAG-GFX942-NEXT: s_waitcnt lgkmcnt(0)
-; SDAG-GFX942-NEXT: s_mov_b32 s12, s9
+; SDAG-GFX942-NEXT: s_mov_b32 s6, s3
; SDAG-GFX942-NEXT: s_mov_b32 s4, s1
; SDAG-GFX942-NEXT: s_mov_b32 s5, s2
-; SDAG-GFX942-NEXT: s_mov_b32 s6, s3
-; SDAG-GFX942-NEXT: s_mov_b32 s13, s10
; SDAG-GFX942-NEXT: s_mov_b32 s14, s11
+; SDAG-GFX942-NEXT: s_mov_b32 s12, s9
+; SDAG-GFX942-NEXT: s_mov_b32 s13, s10
+; SDAG-GFX942-NEXT: s_mov_b32 s1, 0
; SDAG-GFX942-NEXT: .LBB0_1: ; %static-memcpy-expansion-main-body
; SDAG-GFX942-NEXT: ; =>This Inner Loop Header: Depth=1
-; SDAG-GFX942-NEXT: s_add_i32 s1, s0, s16
-; SDAG-GFX942-NEXT: v_mov_b32_e32 v0, s1
+; SDAG-GFX942-NEXT: s_add_i32 s2, s0, s1
+; SDAG-GFX942-NEXT: v_mov_b32_e32 v0, s2
; SDAG-GFX942-NEXT: buffer_load_dwordx4 v[2:5], v0, s[4:7], 0 offen
; SDAG-GFX942-NEXT: buffer_load_dwordx4 v[6:9], v0, s[4:7], 0 offen offset:16
; SDAG-GFX942-NEXT: buffer_load_dwordx4 v[10:13], v0, s[4:7], 0 offen offset:32
@@ -266,10 +266,10 @@ define amdgpu_kernel void @memcpy_known(ptr addrspace(7) %src, ptr addrspace(7)
; SDAG-GFX942-NEXT: buffer_load_dwordx4 v[54:57], v0, s[4:7], 0 offen offset:208
; SDAG-GFX942-NEXT: buffer_load_dwordx4 v[58:61], v0, s[4:7], 0 offen offset:224
; SDAG-GFX942-NEXT: buffer_load_dwordx4 a[0:3], v0, s[4:7], 0 offen offset:240
-; SDAG-GFX942-NEXT: s_add_i32 s1, s8, s16
-; SDAG-GFX942-NEXT: s_addk_i32 s16, 0x100
-; SDAG-GFX942-NEXT: v_mov_b32_e32 v0, s1
-; SDAG-GFX942-NEXT: s_cmpk_lt_u32 s16, 0x2000
+; SDAG-GFX942-NEXT: s_add_i32 s2, s8, s1
+; SDAG-GFX942-NEXT: s_addk_i32 s1, 0x100
+; SDAG-GFX942-NEXT: v_mov_b32_e32 v0, s2
+; SDAG-GFX942-NEXT: s_cmpk_lt_u32 s1, 0x2000
; SDAG-GFX942-NEXT: s_waitcnt vmcnt(15)
; SDAG-GFX942-NEXT: buffer_store_dwordx4 v[2:5], v0, s[12:15], 0 offen
; SDAG-GFX942-NEXT: s_waitcnt vmcnt(15)
@@ -759,18 +759,18 @@ define amdgpu_kernel void @memcpy_known_medium(ptr addrspace(7) %src, ptr addrsp
; SDAG-GFX942-NEXT: s_load_dword s7, s[4:5], 0x34
; SDAG-GFX942-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x44
; SDAG-GFX942-NEXT: s_load_dword s15, s[4:5], 0x54
-; SDAG-GFX942-NEXT: s_mov_b32 s16, 0
; SDAG-GFX942-NEXT: s_waitcnt lgkmcnt(0)
-; SDAG-GFX942-NEXT: s_mov_b32 s12, s9
+; SDAG-GFX942-NEXT: s_mov_b32 s6, s3
; SDAG-GFX942-NEXT: s_mov_b32 s4, s1
; SDAG-GFX942-NEXT: s_mov_b32 s5, s2
-; SDAG-GFX942-NEXT: s_mov_b32 s6, s3
-; SDAG-GFX942-NEXT: s_mov_b32 s13, s10
; SDAG-GFX942-NEXT: s_mov_b32 s14, s11
+; SDAG-GFX942-NEXT: s_mov_b32 s12, s9
+; SDAG-GFX942-NEXT: s_mov_b32 s13, s10
+; SDAG-GFX942-NEXT: s_mov_b32 s1, 0
; SDAG-GFX942-NEXT: .LBB1_1: ; %static-memcpy-expansion-main-body
; SDAG-GFX942-NEXT: ; =>This Inner Loop Header: Depth=1
-; SDAG-GFX942-NEXT: s_add_i32 s1, s0, s16
-; SDAG-GFX942-NEXT: v_mov_b32_e32 v0, s1
+; SDAG-GFX942-NEXT: s_add_i32 s2, s0, s1
+; SDAG-GFX942-NEXT: v_mov_b32_e32 v0, s2
; SDAG-GFX942-NEXT: buffer_load_dwordx4 v[2:5], v0, s[4:7], 0 offen
; SDAG-GFX942-NEXT: buffer_load_dwordx4 v[6:9], v0, s[4:7], 0 offen offset:16
; SDAG-GFX942-NEXT: buffer_load_dwordx4 v[10:13], v0, s[4:7], 0 offen offset:32
@@ -787,10 +787,10 @@ define amdgpu_kernel void @memcpy_known_medium(ptr addrspace(7) %src, ptr addrsp
; SDAG-GFX942-NEXT: buffer_load_dwordx4 v[54:57], v0, s[4:7], 0 offen offset:208
; SDAG-GFX942-NEXT: buffer_load_dwordx4 v[58:61], v0, s[4:7], 0 offen offset:224
; SDAG-GFX942-NEXT: buffer_load_dwordx4 a[0:3], v0, s[4:7], 0 offen offset:240
-; SDAG-GFX942-NEXT: s_add_i32 s1, s8, s16
-; SDAG-GFX942-NEXT: s_addk_i32 s16, 0x100
-; SDAG-GFX942-NEXT: v_mov_b32_e32 v0, s1
-; SDAG-GFX942-NEXT: s_cmpk_lt_u32 s16, 0x100
+; SDAG-GFX942-NEXT: s_add_i32 s2, s8, s1
+; SDAG-GFX942-NEXT: s_addk_i32 s1, 0x100
+; SDAG-GFX942-NEXT: v_mov_b32_e32 v0, s2
+; SDAG-GFX942-NEXT: s_cmpk_lt_u32 s1, 0x100
; SDAG-GFX942-NEXT: s_waitcnt vmcnt(15)
; SDAG-GFX942-NEXT: buffer_store_dwordx4 v[2:5], v0, s[12:15], 0 offen
; SDAG-GFX942-NEXT: s_waitcnt vmcnt(15)
@@ -1108,17 +1108,17 @@ define amdgpu_kernel void @memcpy_known_small(ptr addrspace(7) %src, ptr addrspa
; SDAG-GFX942-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x24
; SDAG-GFX942-NEXT: s_load_dword s3, s[4:5], 0x34
; SDAG-GFX942-NEXT: s_waitcnt lgkmcnt(0)
+; SDAG-GFX942-NEXT: s_mov_b32 s2, s11
; SDAG-GFX942-NEXT: s_mov_b32 s0, s9
; SDAG-GFX942-NEXT: s_mov_b32 s1, s10
-; SDAG-GFX942-NEXT: s_mov_b32 s2, s11
; SDAG-GFX942-NEXT: v_mov_b32_e32 v0, s8
; SDAG-GFX942-NEXT: buffer_load_dwordx4 v[2:5], v0, s[0:3], 0 offen
; SDAG-GFX942-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x44
; SDAG-GFX942-NEXT: s_load_dword s7, s[4:5], 0x54
; SDAG-GFX942-NEXT: s_waitcnt lgkmcnt(0)
+; SDAG-GFX942-NEXT: s_mov_b32 s6, s11
; SDAG-GFX942-NEXT: s_mov_b32 s4, s9
; SDAG-GFX942-NEXT: s_mov_b32 s5, s10
-; SDAG-GFX942-NEXT: s_mov_b32 s6, s11
; SDAG-GFX942-NEXT: v_mov_b32_e32 v1, s8
; SDAG-GFX942-NEXT: s_waitcnt vmcnt(0)
; SDAG-GFX942-NEXT: buffer_store_dwordx4 v[2:5], v1, s[4:7], 0 offen
diff --git a/llvm/test/CodeGen/AMDGPU/coexec-scheduler.ll b/llvm/test/CodeGen/AMDGPU/coexec-scheduler.ll
index f6ca2d0045f6b..62a987110f471 100644
--- a/llvm/test/CodeGen/AMDGPU/coexec-scheduler.ll
+++ b/llvm/test/CodeGen/AMDGPU/coexec-scheduler.ll
@@ -602,7 +602,7 @@ define amdgpu_kernel void @ds_wmma_block_carried(ptr addrspace(3) %base, ptr add
; COEXEC-NEXT: v_nop
; COEXEC-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
; COEXEC-NEXT: v_mov_b32_e32 v0, 0
-; COEXEC-NEXT: s_load_b32 s2, s[4:5], 0x0 nv
+; COEXEC-NEXT: s_load_b32 s3, s[4:5], 0x0 nv
; COEXEC-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v2, 0
; COEXEC-NEXT: v_dual_mov_b32 v3, 0 :: v_dual_mov_b32 v4, 0
; COEXEC-NEXT: v_dual_mov_b32 v5, 0 :: v_dual_mov_b32 v6, 0
@@ -616,34 +616,30 @@ define amdgpu_kernel void @ds_wmma_block_carried(ptr addrspace(3) %base, ptr add
; COEXEC-NEXT: v_dual_mov_b32 v18, 0 :: v_dual_mov_b32 v19, 0
; COEXEC-NEXT: v_dual_mov_b32 v20, 0 :: v_dual_mov_b32 v21, 0
; COEXEC-NEXT: v_dual_mov_b32 v22, 0 :: v_dual_mov_b32 v23, 0
-; COEXEC-NEXT: s_wait_kmcnt 0x0
-; COEXEC-NEXT: v_dual_mov_b32 v24, 0 :: v_dual_mov_b32 v28, s2
-; COEXEC-NEXT: v_dual_mov_b32 v25, 0 :: v_dual_mov_b32 v26, 0
-; COEXEC-NEXT: v_mov_b32_e32 v27, 0
-; COEXEC-NEXT: s_mov_b32 s8, 0
-; COEXEC-NEXT: ds_load_tr16_b128 v[32:35], v28
-; COEXEC-NEXT: ds_load_tr16_b128 v[36:39], v28 offset:64
-; COEXEC-NEXT: ds_load_tr16_b128 v[40:43], v28 offset:128
-; COEXEC-NEXT: ds_load_tr16_b128 v[44:47], v28 offset:192
-; COEXEC-NEXT: ds_load_tr16_b128 v[48:51], v28 offset:256
-; COEXEC-NEXT: ds_load_tr16_b128 v[52:55], v28 offset:320
-; COEXEC-NEXT: ds_load_tr16_b128 v[56:59], v28 offset:384
-; COEXEC-NEXT: ds_load_tr16_b128 v[60:63], v28 offset:448
-; COEXEC-NEXT: s_mov_b32 s9, s8
-; COEXEC-NEXT: s_mov_b32 s10, s8
-; COEXEC-NEXT: s_mov_b32 s11, s8
+; COEXEC-NEXT: v_dual_mov_b32 v24, 0 :: v_dual_mov_b32 v25, 0
+; COEXEC-NEXT: v_dual_mov_b32 v26, 0 :: v_dual_mov_b32 v27, 0
+; COEXEC-NEXT: s_mov_b64 s[8:9], 0
; COEXEC-NEXT: v_mov_b32_e32 v28, 0
+; COEXEC-NEXT: s_mov_b64 s[10:11], s[8:9]
+; COEXEC-NEXT: s_wait_kmcnt 0x0
; COEXEC-NEXT: s_bitcmp1_b32 s0, 0
-; COEXEC-NEXT: s_mov_b32 s12, s8
; COEXEC-NEXT: v_mov_b32_e32 v29, 0
-; COEXEC-NEXT: s_cselect_b32 s3, -1, 0
-; COEXEC-NEXT: s_mov_b32 s13, s8
+; COEXEC-NEXT: s_cselect_b32 s2, -1, 0
+; COEXEC-NEXT: s_mov_b64 s[12:13], s[8:9]
; COEXEC-NEXT: v_mov_b32_e32 v30, 0
-; COEXEC-NEXT: s_add_co_i32 s0, s2, s1
-; COEXEC-NEXT: s_mov_b32 s14, s8
+; COEXEC-NEXT: s_add_co_i32 s0, s3, s1
+; COEXEC-NEXT: s_mov_b64 s[14:15], s[8:9]
; COEXEC-NEXT: v_mov_b32_e32 v31, 0
-; COEXEC-NEXT: s_xor_b32 s2, s3, -1
-; COEXEC-NEXT: s_mov_b32 s15, s8
+; COEXEC-NEXT: s_xor_b32 s2, s2, -1
+; COEXEC-NEXT: v_mov_b32_e32 v60, s3
+; COEXEC-NEXT: ds_load_tr16_b128 v[32:35], v60
+; COEXEC-NEXT: ds_load_tr16_b128 v[36:39], v60 offset:64
+; COEXEC-NEXT: ds_load_tr16_b128 v[40:43], v60 offset:128
+; COEXEC-NEXT: ds_load_tr16_b128 v[44:47], v60 offset:192
+; COEXEC-NEXT: ds_load_tr16_b128 v[48:51], v60 offset:256
+; COEXEC-NEXT: ds_load_tr16_b128 v[52:55], v60 offset:320
+; COEXEC-NEXT: ds_load_tr16_b128 v[56:59], v60 offset:384
+; COEXEC-NEXT: ds_load_tr16_b128 v[60:63], v60 offset:448
; COEXEC-NEXT: s_wait_dscnt 0x0
; COEXEC-NEXT: .LBB2_1: ; %loop
; COEXEC-NEXT: ; =>This Inner Loop Header: Depth=1
@@ -731,16 +727,12 @@ define amdgpu_kernel void @ds_wmma_block_carried(ptr addrspace(3) %base, ptr add
; GCN-NEXT: v_dual_mov_b32 v28, 0 :: v_dual_mov_b32 v29, 0
; GCN-NEXT: v_dual_mov_b32 v30, 0 :: v_dual_mov_b32 v31, 0
; GCN-NEXT: s_cselect_b32 s3, -1, 0
-; GCN-NEXT: s_mov_b32 s8, 0
+; GCN-NEXT: s_mov_b64 s[8:9], 0
; GCN-NEXT: s_add_co_i32 s0, s2, s1
; GCN-NEXT: s_xor_b32 s2, s3, -1
-; GCN-NEXT: s_mov_b32 s9, s8
-; GCN-NEXT: s_mov_b32 s10, s8
-; GCN-NEXT: s_mov_b32 s11, s8
-; GCN-NEXT: s_mov_b32 s12, s8
-; GCN-NEXT: s_mov_b32 s13, s8
-; GCN-NEXT: s_mov_b32 s14, s8
-; GCN-NEXT: s_mov_b32 s15, s8
+; GCN-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GCN-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GCN-NEXT: s_mov_b64 s[14:15], s[8:9]
; GCN-NEXT: s_wait_dscnt 0x0
; GCN-NEXT: .LBB2_1: ; %loop
; GCN-NEXT: ; =>This Inner Loop Header: Depth=1
@@ -898,17 +890,13 @@ define amdgpu_kernel void @ds_wmma_loop_carried(ptr addrspace(3) %base, ptr addr
; COEXEC-NEXT: s_mov_b64 s[64:65], 0
; COEXEC-NEXT: v_nop
; COEXEC-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
-; COEXEC-NEXT: s_mov_b32 s8, 0
+; COEXEC-NEXT: s_mov_b64 s[8:9], 0
; COEXEC-NEXT: s_clause 0x1
; COEXEC-NEXT: s_load_b32 s2, s[4:5], 0x0 nv
; COEXEC-NEXT: s_load_b64 s[0:1], s[4:5], 0x10 nv
-; COEXEC-NEXT: s_mov_b32 s9, s8
-; COEXEC-NEXT: s_mov_b32 s10, s8
-; COEXEC-NEXT: s_mov_b32 s11, s8
-; COEXEC-NEXT: s_mov_b32 s12, s8
-; COEXEC-NEXT: s_mov_b32 s13, s8
-; COEXEC-NEXT: s_mov_b32 s14, s8
-; COEXEC-NEXT: s_mov_b32 s15, s8
+; COEXEC-NEXT: s_mov_b64 s[10:11], s[8:9]
+; COEXEC-NEXT: s_mov_b64 s[12:13], s[8:9]
+; COEXEC-NEXT: s_mov_b64 s[14:15], s[8:9]
; COEXEC-NEXT: v_mov_b64_e32 v[70:71], s[14:15]
; COEXEC-NEXT: v_mov_b64_e32 v[68:69], s[12:13]
; COEXEC-NEXT: v_mov_b64_e32 v[66:67], s[10:11]
@@ -1009,14 +997,10 @@ define amdgpu_kernel void @ds_wmma_loop_carried(ptr addrspace(3) %base, ptr addr
; GCN-NEXT: s_clause 0x1
; GCN-NEXT: s_load_b32 s2, s[4:5], 0x0 nv
; GCN-NEXT: s_load_b64 s[0:1], s[4:5], 0x10 nv
-; GCN-NEXT: s_mov_b32 s8, 0
-; GCN-NEXT: s_mov_b32 s9, s8
-; GCN-NEXT: s_mov_b32 s10, s8
-; GCN-NEXT: s_mov_b32 s11, s8
-; GCN-NEXT: s_mov_b32 s12, s8
-; GCN-NEXT: s_mov_b32 s13, s8
-; GCN-NEXT: s_mov_b32 s14, s8
-; GCN-NEXT: s_mov_b32 s15, s8
+; GCN-NEXT: s_mov_b64 s[8:9], 0
+; GCN-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GCN-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GCN-NEXT: s_mov_b64 s[14:15], s[8:9]
; GCN-NEXT: v_mov_b64_e32 v[68:69], s[12:13]
; GCN-NEXT: v_mov_b64_e32 v[70:71], s[14:15]
; GCN-NEXT: v_mov_b64_e32 v[66:67], s[10:11]
@@ -1224,17 +1208,13 @@ define amdgpu_kernel void @ds_wmma_no_block_carried(ptr addrspace(3) %base, ptr
; COEXEC-NEXT: s_mov_b64 s[64:65], 0
; COEXEC-NEXT: v_nop
; COEXEC-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
-; COEXEC-NEXT: s_mov_b32 s8, 0
+; COEXEC-NEXT: s_mov_b64 s[8:9], 0
; COEXEC-NEXT: s_clause 0x1
; COEXEC-NEXT: s_load_b32 s0, s[4:5], 0x0 nv
; COEXEC-NEXT: s_load_b32 s1, s[4:5], 0x10 nv
-; COEXEC-NEXT: s_mov_b32 s9, s8
-; COEXEC-NEXT: s_mov_b32 s10, s8
-; COEXEC-NEXT: s_mov_b32 s11, s8
-; COEXEC-NEXT: s_mov_b32 s12, s8
-; COEXEC-NEXT: s_mov_b32 s13, s8
-; COEXEC-NEXT: s_mov_b32 s14, s8
-; COEXEC-NEXT: s_mov_b32 s15, s8
+; COEXEC-NEXT: s_mov_b64 s[10:11], s[8:9]
+; COEXEC-NEXT: s_mov_b64 s[12:13], s[8:9]
+; COEXEC-NEXT: s_mov_b64 s[14:15], s[8:9]
; COEXEC-NEXT: v_mov_b64_e32 v[102:103], s[14:15]
; COEXEC-NEXT: v_mov_b64_e32 v[100:101], s[12:13]
; COEXEC-NEXT: v_mov_b64_e32 v[98:99], s[10:11]
@@ -1314,14 +1294,10 @@ define amdgpu_kernel void @ds_wmma_no_block_carried(ptr addrspace(3) %base, ptr
; GCN-NEXT: s_clause 0x1
; GCN-NEXT: s_load_b32 s0, s[4:5], 0x0 nv
; GCN-NEXT: s_load_b32 s1, s[4:5], 0x10 nv
-; GCN-NEXT: s_mov_b32 s8, 0
-; GCN-NEXT: s_mov_b32 s9, s8
-; GCN-NEXT: s_mov_b32 s10, s8
-; GCN-NEXT: s_mov_b32 s11, s8
-; GCN-NEXT: s_mov_b32 s12, s8
-; GCN-NEXT: s_mov_b32 s13, s8
-; GCN-NEXT: s_mov_b32 s14, s8
-; GCN-NEXT: s_mov_b32 s15, s8
+; GCN-NEXT: s_mov_b64 s[8:9], 0
+; GCN-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GCN-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GCN-NEXT: s_mov_b64 s[14:15], s[8:9]
; GCN-NEXT: v_mov_b64_e32 v[100:101], s[12:13]
; GCN-NEXT: v_mov_b64_e32 v[102:103], s[14:15]
; GCN-NEXT: v_mov_b64_e32 v[98:99], s[10:11]
diff --git a/llvm/test/CodeGen/AMDGPU/ds_write2.ll b/llvm/test/CodeGen/AMDGPU/ds_write2.ll
index d76e2445cbf48..41dc477ce663e 100644
--- a/llvm/test/CodeGen/AMDGPU/ds_write2.ll
+++ b/llvm/test/CodeGen/AMDGPU/ds_write2.ll
@@ -1168,10 +1168,11 @@ define amdgpu_kernel void @store_misaligned64_constant_offsets() {
; GFX1250-NEXT: s_mov_b64 s[64:65], 0
; GFX1250-NEXT: v_nop
; GFX1250-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
-; GFX1250-NEXT: v_dual_mov_b32 v0, 0x7b :: v_dual_mov_b32 v1, 0
-; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)
-; GFX1250-NEXT: v_dual_mov_b32 v2, v0 :: v_dual_mov_b32 v3, v1
-; GFX1250-NEXT: ds_store_b128 v1, v[0:3]
+; GFX1250-NEXT: v_mov_b64_e32 v[0:1], 0x7b
+; GFX1250-NEXT: v_mov_b32_e32 v4, 0
+; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX1250-NEXT: v_mov_b64_e32 v[2:3], v[0:1]
+; GFX1250-NEXT: ds_store_b128 v4, v[0:3]
; GFX1250-NEXT: s_endpgm
store i64 123, ptr addrspace(3) @bar, align 4
store i64 123, ptr addrspace(3) getelementptr inbounds ([4 x i64], ptr addrspace(3) @bar, i32 0, i32 1), align 4
diff --git a/llvm/test/CodeGen/AMDGPU/fcanonicalize.bf16.ll b/llvm/test/CodeGen/AMDGPU/fcanonicalize.bf16.ll
index f559943070dd7..e0acfbe56659a 100644
--- a/llvm/test/CodeGen/AMDGPU/fcanonicalize.bf16.ll
+++ b/llvm/test/CodeGen/AMDGPU/fcanonicalize.bf16.ll
@@ -1294,11 +1294,10 @@ define amdgpu_kernel void @s_test_canonicalize_undef_v4bf16(ptr addrspace(1) %ou
; GFX1250-NEXT: v_nop
; GFX1250-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
; GFX1250-NEXT: s_load_b64 s[0:1], s[4:5], 0x24 nv
-; GFX1250-NEXT: v_mov_b32_e32 v0, 0
-; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)
-; GFX1250-NEXT: v_mov_b32_e32 v1, v0
+; GFX1250-NEXT: v_mov_b64_e32 v[0:1], 0
+; GFX1250-NEXT: v_mov_b32_e32 v2, 0
; GFX1250-NEXT: s_wait_kmcnt 0x0
-; GFX1250-NEXT: global_store_b64 v0, v[0:1], s[0:1]
+; GFX1250-NEXT: global_store_b64 v2, v[0:1], s[0:1]
; GFX1250-NEXT: s_endpgm
%canonicalized = call <4 x bfloat> @llvm.canonicalize.v4bf16(<4 x bfloat> undef)
store <4 x bfloat> %canonicalized, ptr addrspace(1) %out
diff --git a/llvm/test/CodeGen/AMDGPU/flat-scratch.ll b/llvm/test/CodeGen/AMDGPU/flat-scratch.ll
index 0bb612c75d447..907707bf66196 100644
--- a/llvm/test/CodeGen/AMDGPU/flat-scratch.ll
+++ b/llvm/test/CodeGen/AMDGPU/flat-scratch.ll
@@ -110,10 +110,8 @@ define amdgpu_kernel void @zero_init_kernel() {
;
; GFX942-LABEL: zero_init_kernel:
; GFX942: ; %bb.0:
-; GFX942-NEXT: s_mov_b32 s0, 0
-; GFX942-NEXT: s_mov_b32 s1, s0
-; GFX942-NEXT: s_mov_b32 s2, s0
-; GFX942-NEXT: s_mov_b32 s3, s0
+; GFX942-NEXT: s_mov_b64 s[0:1], 0
+; GFX942-NEXT: s_mov_b64 s[2:3], s[0:1]
; GFX942-NEXT: v_mov_b64_e32 v[0:1], s[0:1]
; GFX942-NEXT: v_mov_b64_e32 v[2:3], s[2:3]
; GFX942-NEXT: scratch_store_dwordx4 off, v[0:3], off offset:48
@@ -304,10 +302,8 @@ define void @zero_init_foo() {
; GFX942-LABEL: zero_init_foo:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX942-NEXT: s_mov_b32 s0, 0
-; GFX942-NEXT: s_mov_b32 s1, s0
-; GFX942-NEXT: s_mov_b32 s2, s0
-; GFX942-NEXT: s_mov_b32 s3, s0
+; GFX942-NEXT: s_mov_b64 s[0:1], 0
+; GFX942-NEXT: s_mov_b64 s[2:3], s[0:1]
; GFX942-NEXT: v_mov_b64_e32 v[0:1], s[0:1]
; GFX942-NEXT: v_mov_b64_e32 v[2:3], s[2:3]
; GFX942-NEXT: scratch_store_dwordx4 off, v[0:3], s32 offset:48
@@ -1180,10 +1176,8 @@ define amdgpu_kernel void @zero_init_small_offset_kernel() {
; GFX942: ; %bb.0:
; GFX942-NEXT: scratch_load_dword v0, off, off sc0 sc1
; GFX942-NEXT: s_waitcnt vmcnt(0)
-; GFX942-NEXT: s_mov_b32 s0, 0
-; GFX942-NEXT: s_mov_b32 s1, s0
-; GFX942-NEXT: s_mov_b32 s2, s0
-; GFX942-NEXT: s_mov_b32 s3, s0
+; GFX942-NEXT: s_mov_b64 s[0:1], 0
+; GFX942-NEXT: s_mov_b64 s[2:3], s[0:1]
; GFX942-NEXT: v_mov_b64_e32 v[0:1], s[0:1]
; GFX942-NEXT: v_mov_b64_e32 v[2:3], s[2:3]
; GFX942-NEXT: scratch_store_dwordx4 off, v[0:3], off offset:256
@@ -1397,10 +1391,8 @@ define void @zero_init_small_offset_foo() {
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: scratch_load_dword v0, off, s32 sc0 sc1
; GFX942-NEXT: s_waitcnt vmcnt(0)
-; GFX942-NEXT: s_mov_b32 s0, 0
-; GFX942-NEXT: s_mov_b32 s1, s0
-; GFX942-NEXT: s_mov_b32 s2, s0
-; GFX942-NEXT: s_mov_b32 s3, s0
+; GFX942-NEXT: s_mov_b64 s[0:1], 0
+; GFX942-NEXT: s_mov_b64 s[2:3], s[0:1]
; GFX942-NEXT: v_mov_b64_e32 v[0:1], s[0:1]
; GFX942-NEXT: v_mov_b64_e32 v[2:3], s[2:3]
; GFX942-NEXT: scratch_store_dwordx4 off, v[0:3], s32 offset:256
@@ -2420,10 +2412,8 @@ define amdgpu_kernel void @zero_init_large_offset_kernel() {
; GFX942: ; %bb.0:
; GFX942-NEXT: scratch_load_dword v0, off, off offset:4 sc0 sc1
; GFX942-NEXT: s_waitcnt vmcnt(0)
-; GFX942-NEXT: s_mov_b32 s0, 0
-; GFX942-NEXT: s_mov_b32 s1, s0
-; GFX942-NEXT: s_mov_b32 s2, s0
-; GFX942-NEXT: s_mov_b32 s3, s0
+; GFX942-NEXT: s_mov_b64 s[0:1], 0
+; GFX942-NEXT: s_mov_b64 s[2:3], s[0:1]
; GFX942-NEXT: v_mov_b64_e32 v[0:1], s[0:1]
; GFX942-NEXT: v_mov_b64_e32 v[2:3], s[2:3]
; GFX942-NEXT: s_movk_i32 s0, 0x4004
@@ -2656,10 +2646,8 @@ define void @zero_init_large_offset_foo() {
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: scratch_load_dword v0, off, s32 offset:4 sc0 sc1
; GFX942-NEXT: s_waitcnt vmcnt(0)
-; GFX942-NEXT: s_mov_b32 s0, 0
-; GFX942-NEXT: s_mov_b32 s1, s0
-; GFX942-NEXT: s_mov_b32 s2, s0
-; GFX942-NEXT: s_mov_b32 s3, s0
+; GFX942-NEXT: s_mov_b64 s[0:1], 0
+; GFX942-NEXT: s_mov_b64 s[2:3], s[0:1]
; GFX942-NEXT: v_mov_b64_e32 v[0:1], s[0:1]
; GFX942-NEXT: v_mov_b64_e32 v[2:3], s[2:3]
; GFX942-NEXT: s_add_i32 s0, s32, 0x4004
@@ -5021,10 +5009,8 @@ define amdgpu_ps void @large_offset() {
;
; GFX942-LABEL: large_offset:
; GFX942: ; %bb.0: ; %bb
-; GFX942-NEXT: v_mov_b32_e32 v0, 0
-; GFX942-NEXT: v_mov_b32_e32 v1, v0
-; GFX942-NEXT: v_mov_b32_e32 v2, v0
-; GFX942-NEXT: v_mov_b32_e32 v3, v0
+; GFX942-NEXT: v_mov_b64_e32 v[0:1], 0
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[0:1]
; GFX942-NEXT: scratch_store_dwordx4 off, v[0:3], off offset:3024 sc0 sc1
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: scratch_load_dwordx4 v[0:3], off, off offset:3024 sc0 sc1
diff --git a/llvm/test/CodeGen/AMDGPU/fmaximum3.ll b/llvm/test/CodeGen/AMDGPU/fmaximum3.ll
index db4d0fa13c62b..ca62120865160 100644
--- a/llvm/test/CodeGen/AMDGPU/fmaximum3.ll
+++ b/llvm/test/CodeGen/AMDGPU/fmaximum3.ll
@@ -4820,8 +4820,8 @@ define <2 x double> @v_no_fmaximum3_f64__multi_use(double %a, double %b, double
; GFX9-NEXT: v_max_f64 v[2:3], v[0:1], v[4:5]
; GFX9-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[4:5]
; GFX9-NEXT: s_nop 1
-; GFX9-NEXT: v_cndmask_b32_e64 v2, v2, 0, vcc
; GFX9-NEXT: v_cndmask_b32_e32 v3, v3, v8, vcc
+; GFX9-NEXT: v_cndmask_b32_e64 v2, v2, 0, vcc
; GFX9-NEXT: s_setpc_b64 s[30:31]
%max0 = call double @llvm.maximum.f64(double %a, double %b)
%max1 = call double @llvm.maximum.f64(double %max0, double %c)
diff --git a/llvm/test/CodeGen/AMDGPU/fminimum3.ll b/llvm/test/CodeGen/AMDGPU/fminimum3.ll
index 8c4d6f42ff850..9f091011f5bce 100644
--- a/llvm/test/CodeGen/AMDGPU/fminimum3.ll
+++ b/llvm/test/CodeGen/AMDGPU/fminimum3.ll
@@ -4820,8 +4820,8 @@ define <2 x double> @v_no_fminimum3_f64__multi_use(double %a, double %b, double
; GFX9-NEXT: v_min_f64 v[2:3], v[0:1], v[4:5]
; GFX9-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[4:5]
; GFX9-NEXT: s_nop 1
-; GFX9-NEXT: v_cndmask_b32_e64 v2, v2, 0, vcc
; GFX9-NEXT: v_cndmask_b32_e32 v3, v3, v8, vcc
+; GFX9-NEXT: v_cndmask_b32_e64 v2, v2, 0, vcc
; GFX9-NEXT: s_setpc_b64 s[30:31]
%max0 = call double @llvm.minimum.f64(double %a, double %b)
%max1 = call double @llvm.minimum.f64(double %max0, double %c)
diff --git a/llvm/test/CodeGen/AMDGPU/global-load-xcnt.ll b/llvm/test/CodeGen/AMDGPU/global-load-xcnt.ll
index f186f710cbfb9..c32de7a1c4111 100644
--- a/llvm/test/CodeGen/AMDGPU/global-load-xcnt.ll
+++ b/llvm/test/CodeGen/AMDGPU/global-load-xcnt.ll
@@ -317,71 +317,72 @@ define i64 @test_v16i64_load_store(ptr addrspace(1) %ptr_a, ptr addrspace(1) %pt
; GCN-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0
; GCN-SDAG-NEXT: s_wait_kmcnt 0x0
; GCN-SDAG-NEXT: s_clause 0x7
-; GCN-SDAG-NEXT: global_load_b128 v[10:13], v[0:1], off offset:112
-; GCN-SDAG-NEXT: global_load_b128 v[14:17], v[0:1], off offset:96
-; GCN-SDAG-NEXT: global_load_b128 v[6:9], v[0:1], off offset:80
-; GCN-SDAG-NEXT: global_load_b128 v[34:37], v[0:1], off offset:48
-; GCN-SDAG-NEXT: global_load_b128 v[30:33], v[0:1], off offset:32
-; GCN-SDAG-NEXT: global_load_b128 v[26:29], v[0:1], off offset:16
-; GCN-SDAG-NEXT: global_load_b128 v[50:53], v[0:1], off
-; GCN-SDAG-NEXT: global_load_b128 v[18:21], v[0:1], off offset:64
-; GCN-SDAG-NEXT: s_wait_xcnt 0x0
-; GCN-SDAG-NEXT: v_mov_b64_e32 v[0:1], 0x70
-; GCN-SDAG-NEXT: v_mov_b64_e32 v[54:55], 48
-; GCN-SDAG-NEXT: v_mov_b64_e32 v[2:3], 0x60
-; GCN-SDAG-NEXT: v_mov_b64_e32 v[64:65], 32
-; GCN-SDAG-NEXT: v_mov_b64_e32 v[66:67], 16
-; GCN-SDAG-NEXT: v_mov_b64_e32 v[68:69], 0
+; GCN-SDAG-NEXT: global_load_b128 v[34:37], v[0:1], off offset:112
+; GCN-SDAG-NEXT: global_load_b128 v[30:33], v[0:1], off offset:96
+; GCN-SDAG-NEXT: global_load_b128 v[26:29], v[0:1], off offset:80
+; GCN-SDAG-NEXT: global_load_b128 v[22:25], v[0:1], off offset:48
+; GCN-SDAG-NEXT: global_load_b128 v[18:21], v[0:1], off offset:32
+; GCN-SDAG-NEXT: global_load_b128 v[14:17], v[0:1], off offset:16
+; GCN-SDAG-NEXT: global_load_b128 v[10:13], v[0:1], off
+; GCN-SDAG-NEXT: global_load_b128 v[6:9], v[0:1], off offset:64
+; GCN-SDAG-NEXT: v_mov_b64_e32 v[52:53], 48
+; GCN-SDAG-NEXT: v_mov_b64_e32 v[2:3], 0x70
+; GCN-SDAG-NEXT: v_mov_b64_e32 v[54:55], 32
+; GCN-SDAG-NEXT: v_mov_b64_e32 v[50:51], 0x60
+; GCN-SDAG-NEXT: v_mov_b64_e32 v[64:65], 16
+; GCN-SDAG-NEXT: v_mov_b64_e32 v[66:67], 0
; GCN-SDAG-NEXT: v_mov_b64_e32 v[38:39], 0x50
-; GCN-SDAG-NEXT: v_dual_mov_b32 v23, 0 :: v_dual_mov_b32 v22, 0xc8
+; GCN-SDAG-NEXT: s_wait_xcnt 0x0
+; GCN-SDAG-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, 0xc8
; GCN-SDAG-NEXT: v_mov_b64_e32 v[48:49], 64
; GCN-SDAG-NEXT: s_wait_loadcnt 0x7
-; GCN-SDAG-NEXT: global_store_b128 v[0:1], v[10:13], off
+; GCN-SDAG-NEXT: global_store_b128 v[2:3], v[34:37], off
; GCN-SDAG-NEXT: s_wait_loadcnt 0x6
-; GCN-SDAG-NEXT: global_store_b128 v[2:3], v[14:17], off
+; GCN-SDAG-NEXT: global_store_b128 v[50:51], v[30:33], off
; GCN-SDAG-NEXT: s_wait_loadcnt 0x5
-; GCN-SDAG-NEXT: v_dual_mov_b32 v24, v8 :: v_dual_mov_b32 v25, v9
+; GCN-SDAG-NEXT: s_wait_xcnt 0x1
+; GCN-SDAG-NEXT: v_dual_mov_b32 v2, v28 :: v_dual_mov_b32 v3, v29
; GCN-SDAG-NEXT: s_wait_xcnt 0x0
-; GCN-SDAG-NEXT: v_add_nc_u64_e32 v[16:17], v[16:17], v[16:17]
+; GCN-SDAG-NEXT: v_add_nc_u64_e32 v[32:33], v[32:33], v[32:33]
+; GCN-SDAG-NEXT: v_add_nc_u64_e32 v[30:31], v[30:31], v[30:31]
+; GCN-SDAG-NEXT: s_wait_loadcnt 0x4
+; GCN-SDAG-NEXT: global_store_b128 v[52:53], v[22:25], off
+; GCN-SDAG-NEXT: s_wait_loadcnt 0x3
+; GCN-SDAG-NEXT: global_store_b128 v[54:55], v[18:21], off
; GCN-SDAG-NEXT: s_wait_loadcnt 0x2
-; GCN-SDAG-NEXT: v_add_nc_u64_e32 v[2:3], v[28:29], v[28:29]
-; GCN-SDAG-NEXT: s_clause 0x2
-; GCN-SDAG-NEXT: global_store_b128 v[54:55], v[34:37], off
-; GCN-SDAG-NEXT: global_store_b128 v[64:65], v[30:33], off
-; GCN-SDAG-NEXT: global_store_b128 v[66:67], v[26:29], off
+; GCN-SDAG-NEXT: global_store_b128 v[64:65], v[14:17], off
; GCN-SDAG-NEXT: s_wait_loadcnt 0x1
-; GCN-SDAG-NEXT: global_store_b128 v[68:69], v[50:53], off
-; GCN-SDAG-NEXT: s_wait_xcnt 0x1
-; GCN-SDAG-NEXT: v_add_nc_u64_e32 v[28:29], v[52:53], v[52:53]
-; GCN-SDAG-NEXT: v_add_nc_u64_e32 v[14:15], v[14:15], v[14:15]
-; GCN-SDAG-NEXT: v_add_nc_u64_e32 v[12:13], v[12:13], v[12:13]
-; GCN-SDAG-NEXT: v_add_nc_u64_e32 v[10:11], v[10:11], v[10:11]
-; GCN-SDAG-NEXT: v_add_nc_u64_e32 v[0:1], v[26:27], v[26:27]
-; GCN-SDAG-NEXT: v_add_nc_u64_e32 v[26:27], v[50:51], v[50:51]
-; GCN-SDAG-NEXT: s_wait_loadcnt 0x0
+; GCN-SDAG-NEXT: global_store_b128 v[66:67], v[10:13], off
; GCN-SDAG-NEXT: s_wait_xcnt 0x0
-; GCN-SDAG-NEXT: v_add_nc_u64_e32 v[52:53], v[20:21], v[20:21]
-; GCN-SDAG-NEXT: v_add_nc_u64_e32 v[50:51], v[18:19], v[18:19]
-; GCN-SDAG-NEXT: v_add_nc_u64_e32 v[8:9], v[8:9], v[8:9]
-; GCN-SDAG-NEXT: v_add_nc_u64_e32 v[6:7], 0xc8, v[6:7]
+; GCN-SDAG-NEXT: v_add_nc_u64_e32 v[12:13], v[12:13], v[12:13]
; GCN-SDAG-NEXT: v_add_nc_u64_e32 v[36:37], v[36:37], v[36:37]
; GCN-SDAG-NEXT: v_add_nc_u64_e32 v[34:35], v[34:35], v[34:35]
-; GCN-SDAG-NEXT: v_add_nc_u64_e32 v[32:33], 0x64, v[32:33]
-; GCN-SDAG-NEXT: v_add_nc_u64_e32 v[30:31], v[30:31], v[30:31]
+; GCN-SDAG-NEXT: s_wait_loadcnt 0x0
+; GCN-SDAG-NEXT: v_add_nc_u64_e32 v[52:53], v[8:9], v[8:9]
+; GCN-SDAG-NEXT: v_add_nc_u64_e32 v[50:51], v[6:7], v[6:7]
+; GCN-SDAG-NEXT: v_add_nc_u64_e32 v[26:27], 0xc8, v[26:27]
+; GCN-SDAG-NEXT: v_add_nc_u64_e32 v[28:29], v[28:29], v[28:29]
+; GCN-SDAG-NEXT: v_add_nc_u64_e32 v[20:21], 0x64, v[20:21]
+; GCN-SDAG-NEXT: v_add_nc_u64_e32 v[24:25], v[24:25], v[24:25]
+; GCN-SDAG-NEXT: v_add_nc_u64_e32 v[22:23], v[22:23], v[22:23]
+; GCN-SDAG-NEXT: v_add_nc_u64_e32 v[18:19], v[18:19], v[18:19]
+; GCN-SDAG-NEXT: v_add_nc_u64_e32 v[16:17], v[16:17], v[16:17]
+; GCN-SDAG-NEXT: v_add_nc_u64_e32 v[14:15], v[14:15], v[14:15]
+; GCN-SDAG-NEXT: v_add_nc_u64_e32 v[10:11], v[10:11], v[10:11]
; GCN-SDAG-NEXT: s_clause 0x1
-; GCN-SDAG-NEXT: global_store_b128 v[38:39], v[22:25], off
-; GCN-SDAG-NEXT: global_store_b128 v[48:49], v[18:21], off
+; GCN-SDAG-NEXT: global_store_b128 v[38:39], v[0:3], off
+; GCN-SDAG-NEXT: global_store_b128 v[48:49], v[6:9], off
; GCN-SDAG-NEXT: s_clause 0x7
-; GCN-SDAG-NEXT: global_store_b128 v[4:5], v[14:17], off offset:96
-; GCN-SDAG-NEXT: global_store_b128 v[4:5], v[10:13], off offset:112
+; GCN-SDAG-NEXT: global_store_b128 v[4:5], v[30:33], off offset:96
+; GCN-SDAG-NEXT: global_store_b128 v[4:5], v[34:37], off offset:112
; GCN-SDAG-NEXT: global_store_b128 v[4:5], v[50:53], off offset:64
-; GCN-SDAG-NEXT: global_store_b128 v[4:5], v[6:9], off offset:80
-; GCN-SDAG-NEXT: global_store_b128 v[4:5], v[30:33], off offset:32
-; GCN-SDAG-NEXT: global_store_b128 v[4:5], v[34:37], off offset:48
-; GCN-SDAG-NEXT: global_store_b128 v[4:5], v[26:29], off
-; GCN-SDAG-NEXT: global_store_b128 v[4:5], v[0:3], off offset:16
-; GCN-SDAG-NEXT: s_wait_xcnt 0x0
-; GCN-SDAG-NEXT: v_dual_mov_b32 v0, v28 :: v_dual_mov_b32 v1, v29
+; GCN-SDAG-NEXT: global_store_b128 v[4:5], v[26:29], off offset:80
+; GCN-SDAG-NEXT: global_store_b128 v[4:5], v[18:21], off offset:32
+; GCN-SDAG-NEXT: global_store_b128 v[4:5], v[22:25], off offset:48
+; GCN-SDAG-NEXT: global_store_b128 v[4:5], v[10:13], off
+; GCN-SDAG-NEXT: global_store_b128 v[4:5], v[14:17], off offset:16
+; GCN-SDAG-NEXT: s_wait_xcnt 0x9
+; GCN-SDAG-NEXT: v_dual_mov_b32 v0, v12 :: v_dual_mov_b32 v1, v13
; GCN-SDAG-NEXT: s_set_pc_i64 s[30:31]
;
; GCN-GISEL-LABEL: test_v16i64_load_store:
diff --git a/llvm/test/CodeGen/AMDGPU/inline-asm-vgpr-sgpr-copy.ll b/llvm/test/CodeGen/AMDGPU/inline-asm-vgpr-sgpr-copy.ll
index 73b2ce3a50774..86d6e24558f43 100644
--- a/llvm/test/CodeGen/AMDGPU/inline-asm-vgpr-sgpr-copy.ll
+++ b/llvm/test/CodeGen/AMDGPU/inline-asm-vgpr-sgpr-copy.ll
@@ -9,20 +9,19 @@ define <4 x float> @test_sgpr_constraint_bug(ptr addrspace(5) %buf_desc_ptr) {
; CHECK: ; %bb.0:
; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; CHECK-NEXT: scratch_load_dwordx4 v[4:7], v0, off
-; CHECK-NEXT: v_mov_b32_e32 v0, 0
-; CHECK-NEXT: v_mov_b32_e32 v1, v0
-; CHECK-NEXT: v_mov_b32_e32 v2, v0
-; CHECK-NEXT: v_mov_b32_e32 v3, v0
+; CHECK-NEXT: v_mov_b64_e32 v[0:1], 0
+; CHECK-NEXT: v_mov_b64_e32 v[2:3], v[0:1]
; CHECK-NEXT: s_mov_b64 s[4:5], exec
-; CHECK-NEXT: v_mov_b32_e32 v8, 1
+; CHECK-NEXT: v_mov_b32_e32 v8, 0
+; CHECK-NEXT: v_mov_b32_e32 v9, 1
; CHECK-NEXT: s_waitcnt vmcnt(0)
; CHECK-NEXT: v_readfirstlane_b32 s3, v7
; CHECK-NEXT: v_readfirstlane_b32 s2, v6
; CHECK-NEXT: v_readfirstlane_b32 s1, v5
; CHECK-NEXT: v_readfirstlane_b32 s0, v4
; CHECK-NEXT: ;;#ASMSTART
-; CHECK-NEXT: v_cmpx_le_u32 exec, 1, v8
-; CHECK-NEXT: buffer_load_dwordx4 v[0:3], v0, s[0:3], 0 offen offset:0
+; CHECK-NEXT: v_cmpx_le_u32 exec, 1, v9
+; CHECK-NEXT: buffer_load_dwordx4 v[0:3], v8, s[0:3], 0 offen offset:0
; CHECK-NEXT: s_mov_b64 exec s[4:5]
; CHECK-NEXT: ;;#ASMEND
; CHECK-NEXT: s_setpc_b64 s[30:31]
diff --git a/llvm/test/CodeGen/AMDGPU/issue153808-extract-subvector-legalize.ll b/llvm/test/CodeGen/AMDGPU/issue153808-extract-subvector-legalize.ll
index 4715e00dfd97c..7b82117c43ed6 100644
--- a/llvm/test/CodeGen/AMDGPU/issue153808-extract-subvector-legalize.ll
+++ b/llvm/test/CodeGen/AMDGPU/issue153808-extract-subvector-legalize.ll
@@ -82,10 +82,8 @@ define <3 x float> @extract_subvector_v3f32_v33f32_elt30_1(ptr addrspace(1) %ptr
; GFX942-NEXT: global_load_dwordx4 v[4:7], v[0:1], off
; GFX942-NEXT: global_load_dwordx4 v[8:11], v[0:1], off offset:112
; GFX942-NEXT: global_load_dword v2, v[0:1], off offset:128
-; GFX942-NEXT: s_mov_b32 s0, 0
-; GFX942-NEXT: s_mov_b32 s1, s0
-; GFX942-NEXT: s_mov_b32 s2, s0
-; GFX942-NEXT: s_mov_b32 s3, s0
+; GFX942-NEXT: s_mov_b64 s[0:1], 0
+; GFX942-NEXT: s_mov_b64 s[2:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(2)
; GFX942-NEXT: buffer_store_dwordx4 v[4:7], off, s[0:3], 0
; GFX942-NEXT: s_waitcnt vmcnt(2)
@@ -125,10 +123,8 @@ define <6 x float> @extract_subvector_v6f32_v36f32_elt30(ptr addrspace(1) %ptr)
; GFX942-NEXT: global_load_dwordx4 v[6:9], v[0:1], off
; GFX942-NEXT: global_load_dwordx4 v[10:13], v[0:1], off offset:112
; GFX942-NEXT: global_load_dwordx4 v[2:5], v[0:1], off offset:128
-; GFX942-NEXT: s_mov_b32 s0, 0
-; GFX942-NEXT: s_mov_b32 s1, s0
-; GFX942-NEXT: s_mov_b32 s2, s0
-; GFX942-NEXT: s_mov_b32 s3, s0
+; GFX942-NEXT: s_mov_b64 s[0:1], 0
+; GFX942-NEXT: s_mov_b64 s[2:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(2)
; GFX942-NEXT: buffer_store_dwordx4 v[6:9], off, s[0:3], 0
; GFX942-NEXT: s_waitcnt vmcnt(2)
@@ -165,10 +161,8 @@ define <3 x float> @issue153808_vector_extract_assert(ptr addrspace(1) %ptr) #0
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: global_load_dwordx4 v[6:9], v[0:1], off
; GFX942-NEXT: global_load_dwordx3 v[2:4], v[0:1], off offset:192
-; GFX942-NEXT: s_mov_b32 s0, 0
-; GFX942-NEXT: s_mov_b32 s1, s0
-; GFX942-NEXT: s_mov_b32 s2, s0
-; GFX942-NEXT: s_mov_b32 s3, s0
+; GFX942-NEXT: s_mov_b64 s[0:1], 0
+; GFX942-NEXT: s_mov_b64 s[2:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(1)
; GFX942-NEXT: buffer_store_dwordx4 v[6:9], off, s[0:3], 0
; GFX942-NEXT: s_waitcnt vmcnt(1)
diff --git a/llvm/test/CodeGen/AMDGPU/legalize-amdgcn.raw.ptr.buffer.load.ll b/llvm/test/CodeGen/AMDGPU/legalize-amdgcn.raw.ptr.buffer.load.ll
index c4f3d6e47827d..b3935849d590d 100644
--- a/llvm/test/CodeGen/AMDGPU/legalize-amdgcn.raw.ptr.buffer.load.ll
+++ b/llvm/test/CodeGen/AMDGPU/legalize-amdgcn.raw.ptr.buffer.load.ll
@@ -66,19 +66,15 @@ define float @raw_ptr_buffer_load_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset(ptr
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: {{ $}}
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %32, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %28, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -171,19 +167,15 @@ define float @raw_ptr_buffer_load_f32__sgpr_rsrc__sgpr_voffset__sgpr_soffset(ptr
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: {{ $}}
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %32, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %28, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -276,19 +268,15 @@ define float @raw_ptr_buffer_load_f32__vgpr_rsrc__vgpr_voffset__sgpr_soffset(ptr
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: {{ $}}
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %32, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %28, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -381,19 +369,15 @@ define float @raw_ptr_buffer_load_f32__vgpr_rsrc__vgpr_voffset__vgpr_soffset(ptr
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: {{ $}}
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %32, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %28, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -486,19 +470,15 @@ define float @raw_ptr_buffer_load_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_glc
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: {{ $}}
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %32, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %28, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -591,19 +571,15 @@ define float @raw_ptr_buffer_load_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_slc
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: {{ $}}
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %32, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %28, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -696,19 +672,15 @@ define float @raw_ptr_buffer_load_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_dlc
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: {{ $}}
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %32, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %28, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -801,19 +773,15 @@ define float @raw_ptr_buffer_load_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_slc
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: {{ $}}
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %32, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %28, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -906,19 +874,15 @@ define float @raw_ptr_buffer_load_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_glc
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: {{ $}}
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %32, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %28, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -1011,19 +975,15 @@ define float @raw_ptr_buffer_load_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_glc
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: {{ $}}
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %32, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %28, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -1119,19 +1079,15 @@ define <2 x float> @raw_ptr_buffer_load_v2f32__sgpr_rsrc__vgpr_voffset__sgpr_sof
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: {{ $}}
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %34, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %30, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -1154,10 +1110,10 @@ define <2 x float> @raw_ptr_buffer_load_v2f32__sgpr_rsrc__vgpr_voffset__sgpr_sof
; GFX1250-NEXT: {{ $}}
; GFX1250-NEXT: bb.3:
; GFX1250-NEXT: $exec_lo = S_MOV_B32 [[S_MOV_B32_]]
- ; GFX1250-NEXT: [[COPY10:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_DWORDX2_VBUFFER_OFFEN]].sub0
- ; GFX1250-NEXT: [[COPY11:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_DWORDX2_VBUFFER_OFFEN]].sub1
- ; GFX1250-NEXT: $vgpr0 = COPY [[COPY10]]
- ; GFX1250-NEXT: $vgpr1 = COPY [[COPY11]]
+ ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_DWORDX2_VBUFFER_OFFEN]].sub0
+ ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_DWORDX2_VBUFFER_OFFEN]].sub1
+ ; GFX1250-NEXT: $vgpr0 = COPY [[COPY6]]
+ ; GFX1250-NEXT: $vgpr1 = COPY [[COPY7]]
; GFX1250-NEXT: SI_RETURN implicit $vgpr0, implicit $vgpr1
%val = call <2 x float> @llvm.amdgcn.raw.ptr.buffer.load.v2f32(ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 0)
ret <2 x float> %val
@@ -1231,19 +1187,15 @@ define <3 x float> @raw_ptr_buffer_load_v3f32__sgpr_rsrc__vgpr_voffset__sgpr_sof
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: {{ $}}
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %35, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %31, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -1266,12 +1218,12 @@ define <3 x float> @raw_ptr_buffer_load_v3f32__sgpr_rsrc__vgpr_voffset__sgpr_sof
; GFX1250-NEXT: {{ $}}
; GFX1250-NEXT: bb.3:
; GFX1250-NEXT: $exec_lo = S_MOV_B32 [[S_MOV_B32_]]
- ; GFX1250-NEXT: [[COPY10:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_DWORDX3_VBUFFER_OFFEN]].sub0
- ; GFX1250-NEXT: [[COPY11:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_DWORDX3_VBUFFER_OFFEN]].sub1
- ; GFX1250-NEXT: [[COPY12:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_DWORDX3_VBUFFER_OFFEN]].sub2
- ; GFX1250-NEXT: $vgpr0 = COPY [[COPY10]]
- ; GFX1250-NEXT: $vgpr1 = COPY [[COPY11]]
- ; GFX1250-NEXT: $vgpr2 = COPY [[COPY12]]
+ ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_DWORDX3_VBUFFER_OFFEN]].sub0
+ ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_DWORDX3_VBUFFER_OFFEN]].sub1
+ ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_DWORDX3_VBUFFER_OFFEN]].sub2
+ ; GFX1250-NEXT: $vgpr0 = COPY [[COPY6]]
+ ; GFX1250-NEXT: $vgpr1 = COPY [[COPY7]]
+ ; GFX1250-NEXT: $vgpr2 = COPY [[COPY8]]
; GFX1250-NEXT: SI_RETURN implicit $vgpr0, implicit $vgpr1, implicit $vgpr2
%val = call <3 x float> @llvm.amdgcn.raw.ptr.buffer.load.v3f32(ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 0)
ret <3 x float> %val
@@ -1347,19 +1299,15 @@ define <4 x float> @raw_ptr_buffer_load_v4f32__sgpr_rsrc__vgpr_voffset__sgpr_sof
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: {{ $}}
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %36, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %32, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -1382,14 +1330,14 @@ define <4 x float> @raw_ptr_buffer_load_v4f32__sgpr_rsrc__vgpr_voffset__sgpr_sof
; GFX1250-NEXT: {{ $}}
; GFX1250-NEXT: bb.3:
; GFX1250-NEXT: $exec_lo = S_MOV_B32 [[S_MOV_B32_]]
- ; GFX1250-NEXT: [[COPY10:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_DWORDX4_VBUFFER_OFFEN]].sub0
- ; GFX1250-NEXT: [[COPY11:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_DWORDX4_VBUFFER_OFFEN]].sub1
- ; GFX1250-NEXT: [[COPY12:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_DWORDX4_VBUFFER_OFFEN]].sub2
- ; GFX1250-NEXT: [[COPY13:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_DWORDX4_VBUFFER_OFFEN]].sub3
- ; GFX1250-NEXT: $vgpr0 = COPY [[COPY10]]
- ; GFX1250-NEXT: $vgpr1 = COPY [[COPY11]]
- ; GFX1250-NEXT: $vgpr2 = COPY [[COPY12]]
- ; GFX1250-NEXT: $vgpr3 = COPY [[COPY13]]
+ ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_DWORDX4_VBUFFER_OFFEN]].sub0
+ ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_DWORDX4_VBUFFER_OFFEN]].sub1
+ ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_DWORDX4_VBUFFER_OFFEN]].sub2
+ ; GFX1250-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_DWORDX4_VBUFFER_OFFEN]].sub3
+ ; GFX1250-NEXT: $vgpr0 = COPY [[COPY6]]
+ ; GFX1250-NEXT: $vgpr1 = COPY [[COPY7]]
+ ; GFX1250-NEXT: $vgpr2 = COPY [[COPY8]]
+ ; GFX1250-NEXT: $vgpr3 = COPY [[COPY9]]
; GFX1250-NEXT: SI_RETURN implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3
%val = call <4 x float> @llvm.amdgcn.raw.ptr.buffer.load.v4f32(ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 0)
ret <4 x float> %val
@@ -1459,19 +1407,15 @@ define half @raw_ptr_buffer_load_f16__sgpr_rsrc__vgpr_voffset__sgpr_soffset(ptr
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: {{ $}}
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %33, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %29, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -1494,8 +1438,8 @@ define half @raw_ptr_buffer_load_f16__sgpr_rsrc__vgpr_voffset__sgpr_soffset(ptr
; GFX1250-NEXT: {{ $}}
; GFX1250-NEXT: bb.3:
; GFX1250-NEXT: $exec_lo = S_MOV_B32 [[S_MOV_B32_]]
- ; GFX1250-NEXT: [[COPY10:%[0-9]+]]:vgpr_16 = COPY [[BUFFER_LOAD_USHORT_VBUFFER_OFFEN]].lo16
- ; GFX1250-NEXT: $vgpr0 = COPY [[COPY10]]
+ ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_16 = COPY [[BUFFER_LOAD_USHORT_VBUFFER_OFFEN]].lo16
+ ; GFX1250-NEXT: $vgpr0 = COPY [[COPY6]]
; GFX1250-NEXT: SI_RETURN implicit $vgpr0
%val = call half @llvm.amdgcn.raw.ptr.buffer.load.f16(ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 0)
ret half %val
@@ -1564,19 +1508,15 @@ define <2 x half> @raw_ptr_buffer_load_v2f16__sgpr_rsrc__vgpr_voffset__sgpr_soff
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: {{ $}}
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %32, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %28, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -1671,19 +1611,15 @@ define <4 x half> @raw_ptr_buffer_load_v4f16__sgpr_rsrc__vgpr_voffset__sgpr_soff
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: {{ $}}
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %34, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %30, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -1706,10 +1642,10 @@ define <4 x half> @raw_ptr_buffer_load_v4f16__sgpr_rsrc__vgpr_voffset__sgpr_soff
; GFX1250-NEXT: {{ $}}
; GFX1250-NEXT: bb.3:
; GFX1250-NEXT: $exec_lo = S_MOV_B32 [[S_MOV_B32_]]
- ; GFX1250-NEXT: [[COPY10:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_DWORDX2_VBUFFER_OFFEN]].sub0
- ; GFX1250-NEXT: [[COPY11:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_DWORDX2_VBUFFER_OFFEN]].sub1
- ; GFX1250-NEXT: $vgpr0 = COPY [[COPY10]]
- ; GFX1250-NEXT: $vgpr1 = COPY [[COPY11]]
+ ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_DWORDX2_VBUFFER_OFFEN]].sub0
+ ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_DWORDX2_VBUFFER_OFFEN]].sub1
+ ; GFX1250-NEXT: $vgpr0 = COPY [[COPY6]]
+ ; GFX1250-NEXT: $vgpr1 = COPY [[COPY7]]
; GFX1250-NEXT: SI_RETURN implicit $vgpr0, implicit $vgpr1
%val = call <4 x half> @llvm.amdgcn.raw.ptr.buffer.load.v4f16(ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 0)
ret <4 x half> %val
@@ -1778,19 +1714,15 @@ define float @raw_ptr_buffer_load_i8__sgpr_rsrc__vgpr_voffset__sgpr_soffset_zext
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: {{ $}}
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %32, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %28, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -1884,19 +1816,15 @@ define float @raw_ptr_buffer_load_i8__sgpr_rsrc__vgpr_voffset__sgpr_soffset_sext
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: {{ $}}
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %32, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %28, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -1990,19 +1918,15 @@ define float @raw_ptr_buffer_load_i16__sgpr_rsrc__vgpr_voffset__sgpr_soffset_zex
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: {{ $}}
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %32, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %28, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -2096,19 +2020,15 @@ define float @raw_ptr_buffer_load_i16__sgpr_rsrc__vgpr_voffset__sgpr_soffset_sex
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: {{ $}}
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %32, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %28, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -2204,19 +2124,15 @@ define half @raw_ptr_buffer_load_f16__vgpr_rsrc__vgpr_voffset__sgpr_soffset(ptr
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: {{ $}}
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %33, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %29, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -2239,8 +2155,8 @@ define half @raw_ptr_buffer_load_f16__vgpr_rsrc__vgpr_voffset__sgpr_soffset(ptr
; GFX1250-NEXT: {{ $}}
; GFX1250-NEXT: bb.3:
; GFX1250-NEXT: $exec_lo = S_MOV_B32 [[S_MOV_B32_]]
- ; GFX1250-NEXT: [[COPY10:%[0-9]+]]:vgpr_16 = COPY [[BUFFER_LOAD_USHORT_VBUFFER_OFFEN]].lo16
- ; GFX1250-NEXT: $vgpr0 = COPY [[COPY10]]
+ ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_16 = COPY [[BUFFER_LOAD_USHORT_VBUFFER_OFFEN]].lo16
+ ; GFX1250-NEXT: $vgpr0 = COPY [[COPY6]]
; GFX1250-NEXT: SI_RETURN implicit $vgpr0
%val = call half @llvm.amdgcn.raw.ptr.buffer.load.f16(ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 0)
ret half %val
@@ -2310,19 +2226,15 @@ define float @raw_ptr_buffer_load_i8__vgpr_rsrc__vgpr_voffset__sgpr_soffset(ptr
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: {{ $}}
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %32, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %28, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -2414,19 +2326,15 @@ define float @raw_ptr_buffer_load_f32__sgpr_rsrc__vdpr_voffset__sgpr_soffset__vo
; GFX1250-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY8]], %subreg.sub0, killed [[COPY7]], %subreg.sub1, killed [[COPY6]], %subreg.sub2, killed [[COPY5]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: {{ $}}
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %31, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %27, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -2516,19 +2424,15 @@ define float @raw_ptr_buffer_load_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset__vo
; GFX1250-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY8]], %subreg.sub0, killed [[COPY7]], %subreg.sub1, killed [[COPY6]], %subreg.sub2, killed [[COPY5]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: {{ $}}
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %31, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %27, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -2619,19 +2523,15 @@ define float @raw_ptr_buffer_load_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset__vo
; GFX1250-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY8]], %subreg.sub0, killed [[COPY7]], %subreg.sub1, killed [[COPY6]], %subreg.sub2, killed [[COPY5]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: {{ $}}
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %31, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %27, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -2718,12 +2618,8 @@ define float @raw_ptr_buffer_load_f32__sgpr_rsrc__voffset67108860_soffset0(ptr a
; GFX1250-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY7]], %subreg.sub0, killed [[COPY6]], %subreg.sub1, killed [[COPY5]], %subreg.sub2, killed [[COPY4]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 58720256, implicit $exec
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
@@ -2731,7 +2627,7 @@ define float @raw_ptr_buffer_load_f32__sgpr_rsrc__voffset67108860_soffset0(ptr a
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %30, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_1]], %bb.0, %26, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -2821,12 +2717,8 @@ define float @raw_ptr_buffer_load_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_vof
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 16
; GFX1250-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY1]], killed [[S_MOV_B32_]], 0, implicit $exec
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
@@ -2835,7 +2727,7 @@ define float @raw_ptr_buffer_load_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_vof
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_2]], %bb.0, %34, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_2]], %bb.0, %30, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -2928,12 +2820,8 @@ define float @raw_ptr_buffer_load_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset__vo
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4095
; GFX1250-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY1]], killed [[S_MOV_B32_]], 0, implicit $exec
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
@@ -2942,7 +2830,7 @@ define float @raw_ptr_buffer_load_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset__vo
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_2]], %bb.0, %34, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_2]], %bb.0, %30, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -3037,12 +2925,8 @@ define float @raw_ptr_buffer_load_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset__vo
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4096
; GFX1250-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY1]], killed [[S_MOV_B32_]], 0, implicit $exec
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
@@ -3051,7 +2935,7 @@ define float @raw_ptr_buffer_load_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset__vo
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_2]], %bb.0, %34, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_2]], %bb.0, %30, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -3140,12 +3024,8 @@ define float @raw_ptr_buffer_load_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_sof
; GFX1250-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY8]], %subreg.sub0, killed [[COPY7]], %subreg.sub1, killed [[COPY6]], %subreg.sub2, killed [[COPY5]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4095
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: [[S_MOV_B32_2:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
@@ -3153,7 +3033,7 @@ define float @raw_ptr_buffer_load_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_sof
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_2]], %bb.0, %31, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_2]], %bb.0, %27, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -3239,12 +3119,8 @@ define float @raw_ptr_buffer_load_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_sof
; GFX1250-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY8]], %subreg.sub0, killed [[COPY7]], %subreg.sub1, killed [[COPY6]], %subreg.sub2, killed [[COPY5]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4096
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
; GFX1250-NEXT: [[S_MOV_B32_2:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
@@ -3252,7 +3128,7 @@ define float @raw_ptr_buffer_load_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_sof
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_2]], %bb.0, %31, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_2]], %bb.0, %27, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -3344,12 +3220,8 @@ define float @raw_ptr_buffer_load_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_sof
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 16
; GFX1250-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], killed [[S_MOV_B32_]], 0, implicit $exec
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
@@ -3358,7 +3230,7 @@ define float @raw_ptr_buffer_load_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_sof
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_2]], %bb.0, %34, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_2]], %bb.0, %30, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -3453,12 +3325,8 @@ define float @raw_ptr_buffer_load_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_sof
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4095
; GFX1250-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], killed [[S_MOV_B32_]], 0, implicit $exec
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
@@ -3467,7 +3335,7 @@ define float @raw_ptr_buffer_load_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_sof
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_2]], %bb.0, %34, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_2]], %bb.0, %30, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -3562,12 +3430,8 @@ define float @raw_ptr_buffer_load_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_sof
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4096
; GFX1250-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], killed [[S_MOV_B32_]], 0, implicit $exec
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
@@ -3576,7 +3440,7 @@ define float @raw_ptr_buffer_load_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_sof
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_2]], %bb.0, %34, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_2]], %bb.0, %30, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -3672,12 +3536,8 @@ define float @raw_ptr_buffer_load_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_sof
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 5000
; GFX1250-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], killed [[S_MOV_B32_]], 0, implicit $exec
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
@@ -3686,7 +3546,7 @@ define float @raw_ptr_buffer_load_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_sof
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_2]], %bb.0, %34, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_2]], %bb.0, %30, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
@@ -3782,12 +3642,8 @@ define float @raw_ptr_buffer_load_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_vof
; GFX1250-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX1250-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX1250-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
- ; GFX1250-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
; GFX1250-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1
- ; GFX1250-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub1
- ; GFX1250-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0
- ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY9]], %subreg.sub0, killed [[COPY8]], %subreg.sub1, killed [[COPY7]], %subreg.sub2, killed [[COPY6]], %subreg.sub3
+ ; GFX1250-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE1]], %subreg.sub0_sub1, killed [[REG_SEQUENCE]], %subreg.sub2_sub3
; GFX1250-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 5000
; GFX1250-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY1]], killed [[S_MOV_B32_]], 0, implicit $exec
; GFX1250-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
@@ -3796,7 +3652,7 @@ define float @raw_ptr_buffer_load_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_vof
; GFX1250-NEXT: bb.1:
; GFX1250-NEXT: successors: %bb.2(0x80000000)
; GFX1250-NEXT: {{ $}}
- ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_2]], %bb.0, %34, %bb.2
+ ; GFX1250-NEXT: [[PHI:%[0-9]+]]:sreg_32_xm0_xexec = PHI [[S_MOV_B32_2]], %bb.0, %30, %bb.2
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub0, implicit $exec
; GFX1250-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE2]].sub1, implicit $exec
; GFX1250-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1
diff --git a/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.make.buffer.rsrc.ll b/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.make.buffer.rsrc.ll
index d39846a1744c1..c6eff32db0d28 100644
--- a/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.make.buffer.rsrc.ll
+++ b/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.make.buffer.rsrc.ll
@@ -310,10 +310,8 @@ define amdgpu_ps float @read_raw_buffer(ptr addrspace(1) inreg %p) {
; CHECK45-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr1
; CHECK45-NEXT: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr0
; CHECK45-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY]], %subreg.sub1
- ; CHECK45-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
- ; CHECK45-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
- ; CHECK45-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0
- ; CHECK45-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY3]], %subreg.sub0, killed [[COPY2]], %subreg.sub1, [[S_MOV_B32_]], %subreg.sub2, [[S_MOV_B32_]], %subreg.sub3
+ ; CHECK45-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 0
+ ; CHECK45-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[REG_SEQUENCE]], %subreg.sub0_sub1, killed [[S_MOV_B64_]], %subreg.sub2_sub3
; CHECK45-NEXT: [[BUFFER_LOAD_DWORD_VBUFFER_OFFSET:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_VBUFFER_OFFSET killed [[REG_SEQUENCE1]], $sgpr_null, 4, 0, 0, implicit $exec :: (dereferenceable load (s32) from %ir.rsrc, align 1, addrspace 8)
; CHECK45-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_VBUFFER_OFFSET]]
; CHECK45-NEXT: SI_RETURN_TO_EPILOG $vgpr0
@@ -590,18 +588,14 @@ define amdgpu_ps float @general_case_load(ptr inreg %p, i16 inreg %stride, i64 i
; CHECK45-NEXT: [[S_LSHL_B32_1:%[0-9]+]]:sreg_32 = S_LSHL_B32 [[COPY]], killed [[S_MOV_B32_3]], implicit-def dead $scc
; CHECK45-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[S_MOV_B32_1]], %subreg.sub0, killed [[S_LSHL_B32_1]], %subreg.sub1
; CHECK45-NEXT: [[S_OR_B64_1:%[0-9]+]]:sreg_64 = S_OR_B64 killed [[S_OR_B64_]], killed [[REG_SEQUENCE3]], implicit-def dead $scc
- ; CHECK45-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY [[S_OR_B64_1]].sub1
- ; CHECK45-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY [[S_OR_B64_1]].sub0
- ; CHECK45-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
+ ; CHECK45-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE1]].sub0
; CHECK45-NEXT: [[S_MOV_B32_4:%[0-9]+]]:sreg_32 = S_MOV_B32 25
- ; CHECK45-NEXT: [[S_LSHL_B32_2:%[0-9]+]]:sreg_32 = S_LSHL_B32 killed [[COPY9]], killed [[S_MOV_B32_4]], implicit-def dead $scc
+ ; CHECK45-NEXT: [[S_LSHL_B32_2:%[0-9]+]]:sreg_32 = S_LSHL_B32 killed [[COPY7]], killed [[S_MOV_B32_4]], implicit-def dead $scc
; CHECK45-NEXT: [[REG_SEQUENCE4:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[S_MOV_B32_1]], %subreg.sub0, killed [[S_LSHL_B32_2]], %subreg.sub1
; CHECK45-NEXT: [[S_OR_B64_2:%[0-9]+]]:sreg_64 = S_OR_B64 killed [[REG_SEQUENCE]], killed [[REG_SEQUENCE4]], implicit-def dead $scc
- ; CHECK45-NEXT: [[COPY10:%[0-9]+]]:sreg_32 = COPY [[S_OR_B64_2]].sub1
- ; CHECK45-NEXT: [[COPY11:%[0-9]+]]:sreg_32 = COPY [[S_OR_B64_2]].sub0
- ; CHECK45-NEXT: [[REG_SEQUENCE5:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY11]], %subreg.sub0, killed [[COPY10]], %subreg.sub1, killed [[COPY8]], %subreg.sub2, killed [[COPY7]], %subreg.sub3
- ; CHECK45-NEXT: [[COPY12:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_1]]
- ; CHECK45-NEXT: [[BUFFER_LOAD_DWORD_VBUFFER_IDXEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_VBUFFER_IDXEN [[COPY12]], killed [[REG_SEQUENCE5]], $sgpr_null, 0, 0, 0, implicit $exec :: (dereferenceable load (s32) from %ir.rsrc, align 1, addrspace 8)
+ ; CHECK45-NEXT: [[REG_SEQUENCE5:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[S_OR_B64_2]], %subreg.sub0_sub1, killed [[S_OR_B64_1]], %subreg.sub2_sub3
+ ; CHECK45-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_1]]
+ ; CHECK45-NEXT: [[BUFFER_LOAD_DWORD_VBUFFER_IDXEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_VBUFFER_IDXEN [[COPY8]], killed [[REG_SEQUENCE5]], $sgpr_null, 0, 0, 0, implicit $exec :: (dereferenceable load (s32) from %ir.rsrc, align 1, addrspace 8)
; CHECK45-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_VBUFFER_IDXEN]]
; CHECK45-NEXT: SI_RETURN_TO_EPILOG $vgpr0
%rsrc = call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p8.p0.i64(ptr %p, i16 %stride, i64 %numVals, i32 %flags)
@@ -660,34 +654,30 @@ define amdgpu_ps float @general_case_load_with_waterfall(ptr %p, i16 %stride, i6
; FAKE16-NEXT: [[COPY11:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE2]].sub0
; FAKE16-NEXT: [[V_OR_B32_e64_1:%[0-9]+]]:vgpr_32 = V_OR_B32_e64 killed [[COPY10]], killed [[COPY11]], implicit $exec
; FAKE16-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:vreg_64 = REG_SEQUENCE killed [[V_OR_B32_e64_1]], %subreg.sub0, killed [[V_OR_B32_e64_]], %subreg.sub1
- ; FAKE16-NEXT: [[COPY12:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE3]].sub1
- ; FAKE16-NEXT: [[COPY13:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE3]].sub0
; FAKE16-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 8191
; FAKE16-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 killed [[COPY6]], killed [[S_MOV_B32_1]], implicit $exec
; FAKE16-NEXT: [[REG_SEQUENCE4:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY7]], %subreg.sub0, killed [[V_AND_B32_e64_]], %subreg.sub1
; FAKE16-NEXT: [[S_MOV_B32_2:%[0-9]+]]:sreg_32 = S_MOV_B32 7
; FAKE16-NEXT: [[V_LSHRREV_B64_e64_:%[0-9]+]]:vreg_64_align2 = V_LSHRREV_B64_e64 killed [[S_MOV_B32_2]], killed [[REG_SEQUENCE4]], implicit $exec
- ; FAKE16-NEXT: [[COPY14:%[0-9]+]]:vgpr_32 = COPY [[V_LSHRREV_B64_e64_]].sub1
+ ; FAKE16-NEXT: [[COPY12:%[0-9]+]]:vgpr_32 = COPY [[V_LSHRREV_B64_e64_]].sub1
; FAKE16-NEXT: [[S_MOV_B32_3:%[0-9]+]]:sreg_32 = S_MOV_B32 28
; FAKE16-NEXT: [[V_LSHLREV_B32_e64_1:%[0-9]+]]:vgpr_32 = V_LSHLREV_B32_e64 killed [[S_MOV_B32_3]], [[COPY]], implicit $exec
; FAKE16-NEXT: [[REG_SEQUENCE5:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[V_MOV_B32_e32_]], %subreg.sub0, killed [[V_LSHLREV_B32_e64_1]], %subreg.sub1
- ; FAKE16-NEXT: [[COPY15:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE5]].sub1
- ; FAKE16-NEXT: [[COPY16:%[0-9]+]]:vgpr_32 = COPY [[COPY3]]
+ ; FAKE16-NEXT: [[COPY13:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE5]].sub1
+ ; FAKE16-NEXT: [[COPY14:%[0-9]+]]:vgpr_32 = COPY [[COPY3]]
; FAKE16-NEXT: [[S_MOV_B32_4:%[0-9]+]]:sreg_32 = S_MOV_B32 12
- ; FAKE16-NEXT: [[V_LSHLREV_B32_e64_2:%[0-9]+]]:vgpr_32 = V_LSHLREV_B32_e64 killed [[S_MOV_B32_4]], killed [[COPY16]], implicit $exec
+ ; FAKE16-NEXT: [[V_LSHLREV_B32_e64_2:%[0-9]+]]:vgpr_32 = V_LSHLREV_B32_e64 killed [[S_MOV_B32_4]], killed [[COPY14]], implicit $exec
; FAKE16-NEXT: [[REG_SEQUENCE6:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[V_MOV_B32_e32_]], %subreg.sub0, killed [[V_LSHLREV_B32_e64_2]], %subreg.sub1
- ; FAKE16-NEXT: [[COPY17:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE6]].sub1
- ; FAKE16-NEXT: [[V_OR3_B32_e64_:%[0-9]+]]:vgpr_32 = V_OR3_B32_e64 killed [[COPY14]], killed [[COPY17]], killed [[COPY15]], implicit $exec
- ; FAKE16-NEXT: [[COPY18:%[0-9]+]]:vgpr_32 = COPY [[V_LSHRREV_B64_e64_]].sub0
- ; FAKE16-NEXT: [[COPY19:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE5]].sub0
- ; FAKE16-NEXT: [[COPY20:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE6]].sub0
- ; FAKE16-NEXT: [[V_OR3_B32_e64_1:%[0-9]+]]:vgpr_32 = V_OR3_B32_e64 killed [[COPY18]], killed [[COPY20]], killed [[COPY19]], implicit $exec
+ ; FAKE16-NEXT: [[COPY15:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE6]].sub1
+ ; FAKE16-NEXT: [[V_OR3_B32_e64_:%[0-9]+]]:vgpr_32 = V_OR3_B32_e64 killed [[COPY12]], killed [[COPY15]], killed [[COPY13]], implicit $exec
+ ; FAKE16-NEXT: [[COPY16:%[0-9]+]]:vgpr_32 = COPY [[V_LSHRREV_B64_e64_]].sub0
+ ; FAKE16-NEXT: [[COPY17:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE5]].sub0
+ ; FAKE16-NEXT: [[COPY18:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE6]].sub0
+ ; FAKE16-NEXT: [[V_OR3_B32_e64_1:%[0-9]+]]:vgpr_32 = V_OR3_B32_e64 killed [[COPY16]], killed [[COPY18]], killed [[COPY17]], implicit $exec
; FAKE16-NEXT: [[REG_SEQUENCE7:%[0-9]+]]:vreg_64 = REG_SEQUENCE killed [[V_OR3_B32_e64_1]], %subreg.sub0, killed [[V_OR3_B32_e64_]], %subreg.sub1
- ; FAKE16-NEXT: [[COPY21:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE7]].sub1
- ; FAKE16-NEXT: [[COPY22:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE7]].sub0
- ; FAKE16-NEXT: [[REG_SEQUENCE8:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY13]], %subreg.sub0, killed [[COPY12]], %subreg.sub1, killed [[COPY22]], %subreg.sub2, killed [[COPY21]], %subreg.sub3
- ; FAKE16-NEXT: [[COPY23:%[0-9]+]]:sgpr_128 = COPY [[REG_SEQUENCE8]]
- ; FAKE16-NEXT: [[BUFFER_LOAD_DWORD_VBUFFER_IDXEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_VBUFFER_IDXEN [[V_MOV_B32_e32_]], killed [[COPY23]], $sgpr_null, 0, 0, 0, implicit $exec :: (dereferenceable load (s32) from %ir.rsrc, align 1, addrspace 8)
+ ; FAKE16-NEXT: [[REG_SEQUENCE8:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE3]], %subreg.sub0_sub1, killed [[REG_SEQUENCE7]], %subreg.sub2_sub3
+ ; FAKE16-NEXT: [[COPY19:%[0-9]+]]:sgpr_128 = COPY [[REG_SEQUENCE8]]
+ ; FAKE16-NEXT: [[BUFFER_LOAD_DWORD_VBUFFER_IDXEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_VBUFFER_IDXEN [[V_MOV_B32_e32_]], killed [[COPY19]], $sgpr_null, 0, 0, 0, implicit $exec :: (dereferenceable load (s32) from %ir.rsrc, align 1, addrspace 8)
; FAKE16-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_VBUFFER_IDXEN]]
; FAKE16-NEXT: SI_RETURN_TO_EPILOG $vgpr0
;
@@ -716,36 +706,32 @@ define amdgpu_ps float @general_case_load_with_waterfall(ptr %p, i16 %stride, i6
; REAL16-NEXT: [[COPY11:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE2]].sub0
; REAL16-NEXT: [[V_OR_B32_e64_1:%[0-9]+]]:vgpr_32 = V_OR_B32_e64 killed [[COPY10]], killed [[COPY11]], implicit $exec
; REAL16-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:vreg_64 = REG_SEQUENCE killed [[V_OR_B32_e64_1]], %subreg.sub0, killed [[V_OR_B32_e64_]], %subreg.sub1
- ; REAL16-NEXT: [[COPY12:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE3]].sub1
- ; REAL16-NEXT: [[COPY13:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE3]].sub0
; REAL16-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 8191
; REAL16-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 killed [[COPY6]], killed [[S_MOV_B32_1]], implicit $exec
; REAL16-NEXT: [[REG_SEQUENCE4:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY7]], %subreg.sub0, killed [[V_AND_B32_e64_]], %subreg.sub1
; REAL16-NEXT: [[S_MOV_B32_2:%[0-9]+]]:sreg_32 = S_MOV_B32 7
; REAL16-NEXT: [[V_LSHRREV_B64_e64_:%[0-9]+]]:vreg_64_align2 = V_LSHRREV_B64_e64 killed [[S_MOV_B32_2]], killed [[REG_SEQUENCE4]], implicit $exec
- ; REAL16-NEXT: [[COPY14:%[0-9]+]]:vgpr_32 = COPY [[V_LSHRREV_B64_e64_]].sub1
+ ; REAL16-NEXT: [[COPY12:%[0-9]+]]:vgpr_32 = COPY [[V_LSHRREV_B64_e64_]].sub1
; REAL16-NEXT: [[S_MOV_B32_3:%[0-9]+]]:sreg_32 = S_MOV_B32 28
; REAL16-NEXT: [[V_LSHLREV_B32_e64_1:%[0-9]+]]:vgpr_32 = V_LSHLREV_B32_e64 killed [[S_MOV_B32_3]], [[COPY]], implicit $exec
; REAL16-NEXT: [[REG_SEQUENCE5:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[V_MOV_B32_e32_]], %subreg.sub0, killed [[V_LSHLREV_B32_e64_1]], %subreg.sub1
- ; REAL16-NEXT: [[COPY15:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE5]].sub1
+ ; REAL16-NEXT: [[COPY13:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE5]].sub1
; REAL16-NEXT: [[DEF:%[0-9]+]]:sreg_32 = IMPLICIT_DEF
; REAL16-NEXT: [[DEF1:%[0-9]+]]:sreg_32 = IMPLICIT_DEF
; REAL16-NEXT: [[REG_SEQUENCE6:%[0-9]+]]:vgpr_32 = REG_SEQUENCE [[COPY3]], %subreg.lo16, killed [[DEF]], %subreg.hi16
; REAL16-NEXT: [[S_MOV_B32_4:%[0-9]+]]:sreg_32 = S_MOV_B32 12
; REAL16-NEXT: [[V_LSHLREV_B32_e64_2:%[0-9]+]]:vgpr_32 = V_LSHLREV_B32_e64 killed [[S_MOV_B32_4]], killed [[REG_SEQUENCE6]], implicit $exec
; REAL16-NEXT: [[REG_SEQUENCE7:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[V_MOV_B32_e32_]], %subreg.sub0, killed [[V_LSHLREV_B32_e64_2]], %subreg.sub1
- ; REAL16-NEXT: [[COPY16:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE7]].sub1
- ; REAL16-NEXT: [[V_OR3_B32_e64_:%[0-9]+]]:vgpr_32 = V_OR3_B32_e64 killed [[COPY14]], killed [[COPY16]], killed [[COPY15]], implicit $exec
- ; REAL16-NEXT: [[COPY17:%[0-9]+]]:vgpr_32 = COPY [[V_LSHRREV_B64_e64_]].sub0
- ; REAL16-NEXT: [[COPY18:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE5]].sub0
- ; REAL16-NEXT: [[COPY19:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE7]].sub0
- ; REAL16-NEXT: [[V_OR3_B32_e64_1:%[0-9]+]]:vgpr_32 = V_OR3_B32_e64 killed [[COPY17]], killed [[COPY19]], killed [[COPY18]], implicit $exec
+ ; REAL16-NEXT: [[COPY14:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE7]].sub1
+ ; REAL16-NEXT: [[V_OR3_B32_e64_:%[0-9]+]]:vgpr_32 = V_OR3_B32_e64 killed [[COPY12]], killed [[COPY14]], killed [[COPY13]], implicit $exec
+ ; REAL16-NEXT: [[COPY15:%[0-9]+]]:vgpr_32 = COPY [[V_LSHRREV_B64_e64_]].sub0
+ ; REAL16-NEXT: [[COPY16:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE5]].sub0
+ ; REAL16-NEXT: [[COPY17:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE7]].sub0
+ ; REAL16-NEXT: [[V_OR3_B32_e64_1:%[0-9]+]]:vgpr_32 = V_OR3_B32_e64 killed [[COPY15]], killed [[COPY17]], killed [[COPY16]], implicit $exec
; REAL16-NEXT: [[REG_SEQUENCE8:%[0-9]+]]:vreg_64 = REG_SEQUENCE killed [[V_OR3_B32_e64_1]], %subreg.sub0, killed [[V_OR3_B32_e64_]], %subreg.sub1
- ; REAL16-NEXT: [[COPY20:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE8]].sub1
- ; REAL16-NEXT: [[COPY21:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE8]].sub0
- ; REAL16-NEXT: [[REG_SEQUENCE9:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[COPY13]], %subreg.sub0, killed [[COPY12]], %subreg.sub1, killed [[COPY21]], %subreg.sub2, killed [[COPY20]], %subreg.sub3
- ; REAL16-NEXT: [[COPY22:%[0-9]+]]:sgpr_128 = COPY [[REG_SEQUENCE9]]
- ; REAL16-NEXT: [[BUFFER_LOAD_DWORD_VBUFFER_IDXEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_VBUFFER_IDXEN [[V_MOV_B32_e32_]], killed [[COPY22]], $sgpr_null, 0, 0, 0, implicit $exec :: (dereferenceable load (s32) from %ir.rsrc, align 1, addrspace 8)
+ ; REAL16-NEXT: [[REG_SEQUENCE9:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE killed [[REG_SEQUENCE3]], %subreg.sub0_sub1, killed [[REG_SEQUENCE8]], %subreg.sub2_sub3
+ ; REAL16-NEXT: [[COPY18:%[0-9]+]]:sgpr_128 = COPY [[REG_SEQUENCE9]]
+ ; REAL16-NEXT: [[BUFFER_LOAD_DWORD_VBUFFER_IDXEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_VBUFFER_IDXEN [[V_MOV_B32_e32_]], killed [[COPY18]], $sgpr_null, 0, 0, 0, implicit $exec :: (dereferenceable load (s32) from %ir.rsrc, align 1, addrspace 8)
; REAL16-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_VBUFFER_IDXEN]]
; REAL16-NEXT: SI_RETURN_TO_EPILOG $vgpr0
%rsrc = call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p8.p0.i64(ptr %p, i16 %stride, i64 %numVals, i32 %flags)
@@ -775,10 +761,8 @@ define amdgpu_ps float @read_buffer_fat_ptr_p0(ptr inreg %p) {
; CHECK45-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr1
; CHECK45-NEXT: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr0
; CHECK45-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY]], %subreg.sub1
- ; CHECK45-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
- ; CHECK45-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
- ; CHECK45-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0
- ; CHECK45-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY3]], %subreg.sub0, killed [[COPY2]], %subreg.sub1, [[S_MOV_B32_]], %subreg.sub2, [[S_MOV_B32_]], %subreg.sub3
+ ; CHECK45-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 0
+ ; CHECK45-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[REG_SEQUENCE]], %subreg.sub0_sub1, killed [[S_MOV_B64_]], %subreg.sub2_sub3
; CHECK45-NEXT: [[BUFFER_LOAD_DWORD_VBUFFER_OFFSET:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_VBUFFER_OFFSET killed [[REG_SEQUENCE1]], $sgpr_null, 0, 0, 0, implicit $exec :: (dereferenceable load (s32) from %ir.ptr, align 1, addrspace 8)
; CHECK45-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_VBUFFER_OFFSET]]
; CHECK45-NEXT: SI_RETURN_TO_EPILOG $vgpr0
@@ -809,10 +793,8 @@ define amdgpu_ps float @read_buffer_fat_ptr_p1(ptr addrspace(1) inreg %p) {
; CHECK45-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr1
; CHECK45-NEXT: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr0
; CHECK45-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY]], %subreg.sub1
- ; CHECK45-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
- ; CHECK45-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
- ; CHECK45-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0
- ; CHECK45-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[COPY3]], %subreg.sub0, killed [[COPY2]], %subreg.sub1, [[S_MOV_B32_]], %subreg.sub2, [[S_MOV_B32_]], %subreg.sub3
+ ; CHECK45-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 0
+ ; CHECK45-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE killed [[REG_SEQUENCE]], %subreg.sub0_sub1, killed [[S_MOV_B64_]], %subreg.sub2_sub3
; CHECK45-NEXT: [[BUFFER_LOAD_DWORD_VBUFFER_OFFSET:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_VBUFFER_OFFSET killed [[REG_SEQUENCE1]], $sgpr_null, 0, 0, 0, implicit $exec :: (dereferenceable load (s32) from %ir.ptr, align 1, addrspace 8)
; CHECK45-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_VBUFFER_OFFSET]]
; CHECK45-NEXT: SI_RETURN_TO_EPILOG $vgpr0
diff --git a/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.mfma.gfx90a.ll b/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.mfma.gfx90a.ll
index 4671993a13f0d..f83719a94ff6f 100644
--- a/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.mfma.gfx90a.ll
+++ b/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.mfma.gfx90a.ll
@@ -120,10 +120,9 @@ define amdgpu_kernel void @test_mfma_f32_32x32x4bf16_1k(ptr addrspace(1) %arg) #
; GFX942-LABEL: test_mfma_f32_32x32x4bf16_1k:
; GFX942: ; %bb.0: ; %bb
; GFX942-NEXT: s_load_dwordx2 s[34:35], s[4:5], 0x24
-; GFX942-NEXT: v_mov_b32_e32 v33, 0
-; GFX942-NEXT: v_mov_b32_e32 v34, 1
-; GFX942-NEXT: v_mov_b32_e32 v35, v33
-; GFX942-NEXT: v_mov_b32_e32 v32, 2
+; GFX942-NEXT: v_mov_b64_e32 v[32:33], 1
+; GFX942-NEXT: v_mov_b64_e32 v[34:35], 2
+; GFX942-NEXT: v_mov_b32_e32 v36, 0
; GFX942-NEXT: s_waitcnt lgkmcnt(0)
; GFX942-NEXT: s_load_dwordx16 s[16:31], s[34:35], 0x0
; GFX942-NEXT: s_load_dwordx16 s[0:15], s[34:35], 0x40
@@ -161,17 +160,17 @@ define amdgpu_kernel void @test_mfma_f32_32x32x4bf16_1k(ptr addrspace(1) %arg) #
; GFX942-NEXT: v_mov_b32_e32 v30, s14
; GFX942-NEXT: v_mov_b32_e32 v31, s15
; GFX942-NEXT: s_nop 1
-; GFX942-NEXT: v_mfma_f32_32x32x4_2b_bf16 v[0:31], v[34:35], v[32:33], v[0:31] cbsz:1 abid:2 blgp:3
+; GFX942-NEXT: v_mfma_f32_32x32x4_2b_bf16 v[0:31], v[32:33], v[34:35], v[0:31] cbsz:1 abid:2 blgp:3
; GFX942-NEXT: s_nop 15
; GFX942-NEXT: s_nop 2
-; GFX942-NEXT: global_store_dwordx4 v33, v[24:27], s[34:35] offset:96
-; GFX942-NEXT: global_store_dwordx4 v33, v[28:31], s[34:35] offset:112
-; GFX942-NEXT: global_store_dwordx4 v33, v[16:19], s[34:35] offset:64
-; GFX942-NEXT: global_store_dwordx4 v33, v[20:23], s[34:35] offset:80
-; GFX942-NEXT: global_store_dwordx4 v33, v[8:11], s[34:35] offset:32
-; GFX942-NEXT: global_store_dwordx4 v33, v[12:15], s[34:35] offset:48
-; GFX942-NEXT: global_store_dwordx4 v33, v[0:3], s[34:35]
-; GFX942-NEXT: global_store_dwordx4 v33, v[4:7], s[34:35] offset:16
+; GFX942-NEXT: global_store_dwordx4 v36, v[24:27], s[34:35] offset:96
+; GFX942-NEXT: global_store_dwordx4 v36, v[28:31], s[34:35] offset:112
+; GFX942-NEXT: global_store_dwordx4 v36, v[16:19], s[34:35] offset:64
+; GFX942-NEXT: global_store_dwordx4 v36, v[20:23], s[34:35] offset:80
+; GFX942-NEXT: global_store_dwordx4 v36, v[8:11], s[34:35] offset:32
+; GFX942-NEXT: global_store_dwordx4 v36, v[12:15], s[34:35] offset:48
+; GFX942-NEXT: global_store_dwordx4 v36, v[0:3], s[34:35]
+; GFX942-NEXT: global_store_dwordx4 v36, v[4:7], s[34:35] offset:16
; GFX942-NEXT: s_endpgm
;
; GFX942-GISEL-LABEL: test_mfma_f32_32x32x4bf16_1k:
@@ -318,10 +317,9 @@ define amdgpu_kernel void @test_mfma_f32_32x32x4bf16_1k(ptr addrspace(1) %arg) #
; GFX942-VGPR-LABEL: test_mfma_f32_32x32x4bf16_1k:
; GFX942-VGPR: ; %bb.0: ; %bb
; GFX942-VGPR-NEXT: s_load_dwordx2 s[34:35], s[4:5], 0x24
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v33, 0
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v34, 1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v35, v33
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v32, 2
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[32:33], 1
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[34:35], 2
+; GFX942-VGPR-NEXT: v_mov_b32_e32 v36, 0
; GFX942-VGPR-NEXT: s_waitcnt lgkmcnt(0)
; GFX942-VGPR-NEXT: s_load_dwordx16 s[16:31], s[34:35], 0x0
; GFX942-VGPR-NEXT: s_load_dwordx16 s[0:15], s[34:35], 0x40
@@ -359,17 +357,17 @@ define amdgpu_kernel void @test_mfma_f32_32x32x4bf16_1k(ptr addrspace(1) %arg) #
; GFX942-VGPR-NEXT: v_mov_b32_e32 v30, s14
; GFX942-VGPR-NEXT: v_mov_b32_e32 v31, s15
; GFX942-VGPR-NEXT: s_nop 1
-; GFX942-VGPR-NEXT: v_mfma_f32_32x32x4_2b_bf16 v[0:31], v[34:35], v[32:33], v[0:31] cbsz:1 abid:2 blgp:3
+; GFX942-VGPR-NEXT: v_mfma_f32_32x32x4_2b_bf16 v[0:31], v[32:33], v[34:35], v[0:31] cbsz:1 abid:2 blgp:3
; GFX942-VGPR-NEXT: s_nop 15
; GFX942-VGPR-NEXT: s_nop 2
-; GFX942-VGPR-NEXT: global_store_dwordx4 v33, v[24:27], s[34:35] offset:96
-; GFX942-VGPR-NEXT: global_store_dwordx4 v33, v[28:31], s[34:35] offset:112
-; GFX942-VGPR-NEXT: global_store_dwordx4 v33, v[16:19], s[34:35] offset:64
-; GFX942-VGPR-NEXT: global_store_dwordx4 v33, v[20:23], s[34:35] offset:80
-; GFX942-VGPR-NEXT: global_store_dwordx4 v33, v[8:11], s[34:35] offset:32
-; GFX942-VGPR-NEXT: global_store_dwordx4 v33, v[12:15], s[34:35] offset:48
-; GFX942-VGPR-NEXT: global_store_dwordx4 v33, v[0:3], s[34:35]
-; GFX942-VGPR-NEXT: global_store_dwordx4 v33, v[4:7], s[34:35] offset:16
+; GFX942-VGPR-NEXT: global_store_dwordx4 v36, v[24:27], s[34:35] offset:96
+; GFX942-VGPR-NEXT: global_store_dwordx4 v36, v[28:31], s[34:35] offset:112
+; GFX942-VGPR-NEXT: global_store_dwordx4 v36, v[16:19], s[34:35] offset:64
+; GFX942-VGPR-NEXT: global_store_dwordx4 v36, v[20:23], s[34:35] offset:80
+; GFX942-VGPR-NEXT: global_store_dwordx4 v36, v[8:11], s[34:35] offset:32
+; GFX942-VGPR-NEXT: global_store_dwordx4 v36, v[12:15], s[34:35] offset:48
+; GFX942-VGPR-NEXT: global_store_dwordx4 v36, v[0:3], s[34:35]
+; GFX942-VGPR-NEXT: global_store_dwordx4 v36, v[4:7], s[34:35] offset:16
; GFX942-VGPR-NEXT: s_endpgm
;
; GFX942-VGPR-GISEL-LABEL: test_mfma_f32_32x32x4bf16_1k:
@@ -481,10 +479,8 @@ define amdgpu_kernel void @test_mfma_f32_16x16x4bf16_1k(ptr addrspace(1) %arg) #
; GFX942-LABEL: test_mfma_f32_16x16x4bf16_1k:
; GFX942: ; %bb.0: ; %bb
; GFX942-NEXT: s_load_dwordx2 s[16:17], s[4:5], 0x24
-; GFX942-NEXT: v_mov_b32_e32 v17, 0
-; GFX942-NEXT: v_mov_b32_e32 v18, 1
-; GFX942-NEXT: v_mov_b32_e32 v19, v17
-; GFX942-NEXT: v_mov_b32_e32 v16, 2
+; GFX942-NEXT: v_mov_b64_e32 v[16:17], 1
+; GFX942-NEXT: v_mov_b64_e32 v[18:19], 2
; GFX942-NEXT: s_waitcnt lgkmcnt(0)
; GFX942-NEXT: s_load_dwordx16 s[0:15], s[16:17], 0x0
; GFX942-NEXT: s_waitcnt lgkmcnt(0)
@@ -497,12 +493,13 @@ define amdgpu_kernel void @test_mfma_f32_16x16x4bf16_1k(ptr addrspace(1) %arg) #
; GFX942-NEXT: v_mov_b64_e32 v[12:13], s[12:13]
; GFX942-NEXT: v_mov_b64_e32 v[14:15], s[14:15]
; GFX942-NEXT: s_nop 1
-; GFX942-NEXT: v_mfma_f32_16x16x4_4b_bf16 v[0:15], v[18:19], v[16:17], v[0:15] cbsz:1 abid:2 blgp:3
-; GFX942-NEXT: s_nop 10
-; GFX942-NEXT: global_store_dwordx4 v17, v[12:15], s[16:17] offset:48
-; GFX942-NEXT: global_store_dwordx4 v17, v[8:11], s[16:17] offset:32
-; GFX942-NEXT: global_store_dwordx4 v17, v[4:7], s[16:17] offset:16
-; GFX942-NEXT: global_store_dwordx4 v17, v[0:3], s[16:17]
+; GFX942-NEXT: v_mfma_f32_16x16x4_4b_bf16 v[0:15], v[16:17], v[18:19], v[0:15] cbsz:1 abid:2 blgp:3
+; GFX942-NEXT: v_mov_b32_e32 v16, 0
+; GFX942-NEXT: s_nop 9
+; GFX942-NEXT: global_store_dwordx4 v16, v[12:15], s[16:17] offset:48
+; GFX942-NEXT: global_store_dwordx4 v16, v[8:11], s[16:17] offset:32
+; GFX942-NEXT: global_store_dwordx4 v16, v[4:7], s[16:17] offset:16
+; GFX942-NEXT: global_store_dwordx4 v16, v[0:3], s[16:17]
; GFX942-NEXT: s_endpgm
;
; GFX942-GISEL-LABEL: test_mfma_f32_16x16x4bf16_1k:
@@ -591,10 +588,8 @@ define amdgpu_kernel void @test_mfma_f32_16x16x4bf16_1k(ptr addrspace(1) %arg) #
; GFX942-VGPR-LABEL: test_mfma_f32_16x16x4bf16_1k:
; GFX942-VGPR: ; %bb.0: ; %bb
; GFX942-VGPR-NEXT: s_load_dwordx2 s[16:17], s[4:5], 0x24
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v17, 0
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v18, 1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v19, v17
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v16, 2
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[16:17], 1
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[18:19], 2
; GFX942-VGPR-NEXT: s_waitcnt lgkmcnt(0)
; GFX942-VGPR-NEXT: s_load_dwordx16 s[0:15], s[16:17], 0x0
; GFX942-VGPR-NEXT: s_waitcnt lgkmcnt(0)
@@ -607,12 +602,13 @@ define amdgpu_kernel void @test_mfma_f32_16x16x4bf16_1k(ptr addrspace(1) %arg) #
; GFX942-VGPR-NEXT: v_mov_b64_e32 v[12:13], s[12:13]
; GFX942-VGPR-NEXT: v_mov_b64_e32 v[14:15], s[14:15]
; GFX942-VGPR-NEXT: s_nop 1
-; GFX942-VGPR-NEXT: v_mfma_f32_16x16x4_4b_bf16 v[0:15], v[18:19], v[16:17], v[0:15] cbsz:1 abid:2 blgp:3
-; GFX942-VGPR-NEXT: s_nop 10
-; GFX942-VGPR-NEXT: global_store_dwordx4 v17, v[12:15], s[16:17] offset:48
-; GFX942-VGPR-NEXT: global_store_dwordx4 v17, v[8:11], s[16:17] offset:32
-; GFX942-VGPR-NEXT: global_store_dwordx4 v17, v[4:7], s[16:17] offset:16
-; GFX942-VGPR-NEXT: global_store_dwordx4 v17, v[0:3], s[16:17]
+; GFX942-VGPR-NEXT: v_mfma_f32_16x16x4_4b_bf16 v[0:15], v[16:17], v[18:19], v[0:15] cbsz:1 abid:2 blgp:3
+; GFX942-VGPR-NEXT: v_mov_b32_e32 v16, 0
+; GFX942-VGPR-NEXT: s_nop 9
+; GFX942-VGPR-NEXT: global_store_dwordx4 v16, v[12:15], s[16:17] offset:48
+; GFX942-VGPR-NEXT: global_store_dwordx4 v16, v[8:11], s[16:17] offset:32
+; GFX942-VGPR-NEXT: global_store_dwordx4 v16, v[4:7], s[16:17] offset:16
+; GFX942-VGPR-NEXT: global_store_dwordx4 v16, v[0:3], s[16:17]
; GFX942-VGPR-NEXT: s_endpgm
;
; GFX942-VGPR-GISEL-LABEL: test_mfma_f32_16x16x4bf16_1k:
@@ -692,19 +688,18 @@ define amdgpu_kernel void @test_mfma_f32_4x4x4bf16_1k(ptr addrspace(1) %arg) #0
; GFX942-LABEL: test_mfma_f32_4x4x4bf16_1k:
; GFX942: ; %bb.0: ; %bb
; GFX942-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x24
-; GFX942-NEXT: v_mov_b32_e32 v5, 0
-; GFX942-NEXT: v_mov_b32_e32 v6, 1
-; GFX942-NEXT: v_mov_b32_e32 v7, v5
-; GFX942-NEXT: v_mov_b32_e32 v4, 2
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], 1
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], 2
+; GFX942-NEXT: v_mov_b32_e32 v8, 0
; GFX942-NEXT: s_waitcnt lgkmcnt(0)
; GFX942-NEXT: s_load_dwordx4 s[0:3], s[6:7], 0x0
; GFX942-NEXT: s_waitcnt lgkmcnt(0)
; GFX942-NEXT: v_mov_b64_e32 v[0:1], s[0:1]
; GFX942-NEXT: v_mov_b64_e32 v[2:3], s[2:3]
; GFX942-NEXT: s_nop 1
-; GFX942-NEXT: v_mfma_f32_4x4x4_16b_bf16 v[0:3], v[6:7], v[4:5], v[0:3] cbsz:1 abid:2 blgp:3
+; GFX942-NEXT: v_mfma_f32_4x4x4_16b_bf16 v[0:3], v[4:5], v[6:7], v[0:3] cbsz:1 abid:2 blgp:3
; GFX942-NEXT: s_nop 4
-; GFX942-NEXT: global_store_dwordx4 v5, v[0:3], s[6:7]
+; GFX942-NEXT: global_store_dwordx4 v8, v[0:3], s[6:7]
; GFX942-NEXT: s_endpgm
;
; GFX942-GISEL-LABEL: test_mfma_f32_4x4x4bf16_1k:
@@ -766,19 +761,18 @@ define amdgpu_kernel void @test_mfma_f32_4x4x4bf16_1k(ptr addrspace(1) %arg) #0
; GFX942-VGPR-LABEL: test_mfma_f32_4x4x4bf16_1k:
; GFX942-VGPR: ; %bb.0: ; %bb
; GFX942-VGPR-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x24
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v5, 0
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v6, 1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v7, v5
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v4, 2
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[4:5], 1
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[6:7], 2
+; GFX942-VGPR-NEXT: v_mov_b32_e32 v8, 0
; GFX942-VGPR-NEXT: s_waitcnt lgkmcnt(0)
; GFX942-VGPR-NEXT: s_load_dwordx4 s[0:3], s[6:7], 0x0
; GFX942-VGPR-NEXT: s_waitcnt lgkmcnt(0)
; GFX942-VGPR-NEXT: v_mov_b64_e32 v[0:1], s[0:1]
; GFX942-VGPR-NEXT: v_mov_b64_e32 v[2:3], s[2:3]
; GFX942-VGPR-NEXT: s_nop 1
-; GFX942-VGPR-NEXT: v_mfma_f32_4x4x4_16b_bf16 v[0:3], v[6:7], v[4:5], v[0:3] cbsz:1 abid:2 blgp:3
+; GFX942-VGPR-NEXT: v_mfma_f32_4x4x4_16b_bf16 v[0:3], v[4:5], v[6:7], v[0:3] cbsz:1 abid:2 blgp:3
; GFX942-VGPR-NEXT: s_nop 4
-; GFX942-VGPR-NEXT: global_store_dwordx4 v5, v[0:3], s[6:7]
+; GFX942-VGPR-NEXT: global_store_dwordx4 v8, v[0:3], s[6:7]
; GFX942-VGPR-NEXT: s_endpgm
;
; GFX942-VGPR-GISEL-LABEL: test_mfma_f32_4x4x4bf16_1k:
@@ -869,10 +863,8 @@ define amdgpu_kernel void @test_mfma_f32_32x32x8bf16_1k(ptr addrspace(1) %arg) #
; GFX942-LABEL: test_mfma_f32_32x32x8bf16_1k:
; GFX942: ; %bb.0: ; %bb
; GFX942-NEXT: s_load_dwordx2 s[16:17], s[4:5], 0x24
-; GFX942-NEXT: v_mov_b32_e32 v17, 0
-; GFX942-NEXT: v_mov_b32_e32 v18, 1
-; GFX942-NEXT: v_mov_b32_e32 v19, v17
-; GFX942-NEXT: v_mov_b32_e32 v16, 2
+; GFX942-NEXT: v_mov_b64_e32 v[16:17], 1
+; GFX942-NEXT: v_mov_b64_e32 v[18:19], 2
; GFX942-NEXT: s_waitcnt lgkmcnt(0)
; GFX942-NEXT: s_load_dwordx16 s[0:15], s[16:17], 0x0
; GFX942-NEXT: s_waitcnt lgkmcnt(0)
@@ -885,12 +877,13 @@ define amdgpu_kernel void @test_mfma_f32_32x32x8bf16_1k(ptr addrspace(1) %arg) #
; GFX942-NEXT: v_mov_b64_e32 v[12:13], s[12:13]
; GFX942-NEXT: v_mov_b64_e32 v[14:15], s[14:15]
; GFX942-NEXT: s_nop 1
-; GFX942-NEXT: v_mfma_f32_32x32x8_bf16 v[0:15], v[18:19], v[16:17], v[0:15] cbsz:1 abid:2 blgp:3
-; GFX942-NEXT: s_nop 10
-; GFX942-NEXT: global_store_dwordx4 v17, v[12:15], s[16:17] offset:48
-; GFX942-NEXT: global_store_dwordx4 v17, v[8:11], s[16:17] offset:32
-; GFX942-NEXT: global_store_dwordx4 v17, v[4:7], s[16:17] offset:16
-; GFX942-NEXT: global_store_dwordx4 v17, v[0:3], s[16:17]
+; GFX942-NEXT: v_mfma_f32_32x32x8_bf16 v[0:15], v[16:17], v[18:19], v[0:15] cbsz:1 abid:2 blgp:3
+; GFX942-NEXT: v_mov_b32_e32 v16, 0
+; GFX942-NEXT: s_nop 9
+; GFX942-NEXT: global_store_dwordx4 v16, v[12:15], s[16:17] offset:48
+; GFX942-NEXT: global_store_dwordx4 v16, v[8:11], s[16:17] offset:32
+; GFX942-NEXT: global_store_dwordx4 v16, v[4:7], s[16:17] offset:16
+; GFX942-NEXT: global_store_dwordx4 v16, v[0:3], s[16:17]
; GFX942-NEXT: s_endpgm
;
; GFX942-GISEL-LABEL: test_mfma_f32_32x32x8bf16_1k:
@@ -981,10 +974,8 @@ define amdgpu_kernel void @test_mfma_f32_32x32x8bf16_1k(ptr addrspace(1) %arg) #
; GFX942-VGPR-LABEL: test_mfma_f32_32x32x8bf16_1k:
; GFX942-VGPR: ; %bb.0: ; %bb
; GFX942-VGPR-NEXT: s_load_dwordx2 s[16:17], s[4:5], 0x24
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v17, 0
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v18, 1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v19, v17
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v16, 2
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[16:17], 1
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[18:19], 2
; GFX942-VGPR-NEXT: s_waitcnt lgkmcnt(0)
; GFX942-VGPR-NEXT: s_load_dwordx16 s[0:15], s[16:17], 0x0
; GFX942-VGPR-NEXT: s_waitcnt lgkmcnt(0)
@@ -997,12 +988,13 @@ define amdgpu_kernel void @test_mfma_f32_32x32x8bf16_1k(ptr addrspace(1) %arg) #
; GFX942-VGPR-NEXT: v_mov_b64_e32 v[12:13], s[12:13]
; GFX942-VGPR-NEXT: v_mov_b64_e32 v[14:15], s[14:15]
; GFX942-VGPR-NEXT: s_nop 1
-; GFX942-VGPR-NEXT: v_mfma_f32_32x32x8_bf16 v[0:15], v[18:19], v[16:17], v[0:15] cbsz:1 abid:2 blgp:3
-; GFX942-VGPR-NEXT: s_nop 10
-; GFX942-VGPR-NEXT: global_store_dwordx4 v17, v[12:15], s[16:17] offset:48
-; GFX942-VGPR-NEXT: global_store_dwordx4 v17, v[8:11], s[16:17] offset:32
-; GFX942-VGPR-NEXT: global_store_dwordx4 v17, v[4:7], s[16:17] offset:16
-; GFX942-VGPR-NEXT: global_store_dwordx4 v17, v[0:3], s[16:17]
+; GFX942-VGPR-NEXT: v_mfma_f32_32x32x8_bf16 v[0:15], v[16:17], v[18:19], v[0:15] cbsz:1 abid:2 blgp:3
+; GFX942-VGPR-NEXT: v_mov_b32_e32 v16, 0
+; GFX942-VGPR-NEXT: s_nop 9
+; GFX942-VGPR-NEXT: global_store_dwordx4 v16, v[12:15], s[16:17] offset:48
+; GFX942-VGPR-NEXT: global_store_dwordx4 v16, v[8:11], s[16:17] offset:32
+; GFX942-VGPR-NEXT: global_store_dwordx4 v16, v[4:7], s[16:17] offset:16
+; GFX942-VGPR-NEXT: global_store_dwordx4 v16, v[0:3], s[16:17]
; GFX942-VGPR-NEXT: s_endpgm
;
; GFX942-VGPR-GISEL-LABEL: test_mfma_f32_32x32x8bf16_1k:
@@ -1082,19 +1074,18 @@ define amdgpu_kernel void @test_mfma_f32_16x16x16bf16_1k(ptr addrspace(1) %arg)
; GFX942-LABEL: test_mfma_f32_16x16x16bf16_1k:
; GFX942: ; %bb.0: ; %bb
; GFX942-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x24
-; GFX942-NEXT: v_mov_b32_e32 v5, 0
-; GFX942-NEXT: v_mov_b32_e32 v6, 1
-; GFX942-NEXT: v_mov_b32_e32 v7, v5
-; GFX942-NEXT: v_mov_b32_e32 v4, 2
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], 1
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], 2
+; GFX942-NEXT: v_mov_b32_e32 v8, 0
; GFX942-NEXT: s_waitcnt lgkmcnt(0)
; GFX942-NEXT: s_load_dwordx4 s[0:3], s[6:7], 0x0
; GFX942-NEXT: s_waitcnt lgkmcnt(0)
; GFX942-NEXT: v_mov_b64_e32 v[0:1], s[0:1]
; GFX942-NEXT: v_mov_b64_e32 v[2:3], s[2:3]
; GFX942-NEXT: s_nop 1
-; GFX942-NEXT: v_mfma_f32_16x16x16_bf16 v[0:3], v[6:7], v[4:5], v[0:3] cbsz:1 abid:2 blgp:3
+; GFX942-NEXT: v_mfma_f32_16x16x16_bf16 v[0:3], v[4:5], v[6:7], v[0:3] cbsz:1 abid:2 blgp:3
; GFX942-NEXT: s_nop 6
-; GFX942-NEXT: global_store_dwordx4 v5, v[0:3], s[6:7]
+; GFX942-NEXT: global_store_dwordx4 v8, v[0:3], s[6:7]
; GFX942-NEXT: s_endpgm
;
; GFX942-GISEL-LABEL: test_mfma_f32_16x16x16bf16_1k:
@@ -1156,19 +1147,18 @@ define amdgpu_kernel void @test_mfma_f32_16x16x16bf16_1k(ptr addrspace(1) %arg)
; GFX942-VGPR-LABEL: test_mfma_f32_16x16x16bf16_1k:
; GFX942-VGPR: ; %bb.0: ; %bb
; GFX942-VGPR-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x24
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v5, 0
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v6, 1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v7, v5
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v4, 2
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[4:5], 1
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[6:7], 2
+; GFX942-VGPR-NEXT: v_mov_b32_e32 v8, 0
; GFX942-VGPR-NEXT: s_waitcnt lgkmcnt(0)
; GFX942-VGPR-NEXT: s_load_dwordx4 s[0:3], s[6:7], 0x0
; GFX942-VGPR-NEXT: s_waitcnt lgkmcnt(0)
; GFX942-VGPR-NEXT: v_mov_b64_e32 v[0:1], s[0:1]
; GFX942-VGPR-NEXT: v_mov_b64_e32 v[2:3], s[2:3]
; GFX942-VGPR-NEXT: s_nop 1
-; GFX942-VGPR-NEXT: v_mfma_f32_16x16x16_bf16 v[0:3], v[6:7], v[4:5], v[0:3] cbsz:1 abid:2 blgp:3
+; GFX942-VGPR-NEXT: v_mfma_f32_16x16x16_bf16 v[0:3], v[4:5], v[6:7], v[0:3] cbsz:1 abid:2 blgp:3
; GFX942-VGPR-NEXT: s_nop 6
-; GFX942-VGPR-NEXT: global_store_dwordx4 v5, v[0:3], s[6:7]
+; GFX942-VGPR-NEXT: global_store_dwordx4 v8, v[0:3], s[6:7]
; GFX942-VGPR-NEXT: s_endpgm
;
; GFX942-VGPR-GISEL-LABEL: test_mfma_f32_16x16x16bf16_1k:
@@ -2392,26 +2382,20 @@ define amdgpu_kernel void @test_mfma_f64_16x16x4f64_splat_imm_int_64_in_high_bit
; GFX942-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34
; GFX942-NEXT: v_mov_b32_e32 v0, 0
; GFX942-NEXT: v_mov_b32_e32 v1, 64
-; GFX942-NEXT: v_mov_b32_e32 v2, v0
-; GFX942-NEXT: s_waitcnt lgkmcnt(0)
-; GFX942-NEXT: v_mov_b64_e32 v[10:11], s[2:3]
-; GFX942-NEXT: v_mov_b32_e32 v3, v1
-; GFX942-NEXT: v_mov_b32_e32 v4, v0
-; GFX942-NEXT: v_mov_b32_e32 v5, v1
-; GFX942-NEXT: v_mov_b32_e32 v6, v0
-; GFX942-NEXT: v_mov_b32_e32 v7, v1
-; GFX942-NEXT: v_mov_b64_e32 v[12:13], s[6:7]
-; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[6:7]
-; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[4:5]
-; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[2:3]
; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[0:1]
+; GFX942-NEXT: s_waitcnt lgkmcnt(0)
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], s[2:3]
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[0:1]
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[0:1]
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], s[6:7]
; GFX942-NEXT: s_nop 1
-; GFX942-NEXT: v_mfma_f64_16x16x4_f64 v[2:9], v[10:11], v[12:13], v[2:9]
-; GFX942-NEXT: v_mfma_f64_16x16x4_f64 v[2:9], v[10:11], v[12:13], v[2:9] cbsz:1 abid:2 neg:[1,1,0]
+; GFX942-NEXT: v_mfma_f64_16x16x4_f64 v[0:7], v[8:9], v[10:11], v[0:7]
+; GFX942-NEXT: v_mfma_f64_16x16x4_f64 v[0:7], v[8:9], v[10:11], v[0:7] cbsz:1 abid:2 neg:[1,1,0]
+; GFX942-NEXT: v_mov_b32_e32 v8, 0
; GFX942-NEXT: s_nop 15
-; GFX942-NEXT: s_nop 1
-; GFX942-NEXT: global_store_dwordx4 v0, v[6:9], s[0:1] offset:16
-; GFX942-NEXT: global_store_dwordx4 v0, v[2:5], s[0:1]
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1] offset:16
+; GFX942-NEXT: global_store_dwordx4 v8, v[0:3], s[0:1]
; GFX942-NEXT: s_endpgm
;
; GFX942-GISEL-LABEL: test_mfma_f64_16x16x4f64_splat_imm_int_64_in_high_bits:
@@ -2500,26 +2484,20 @@ define amdgpu_kernel void @test_mfma_f64_16x16x4f64_splat_imm_int_64_in_high_bit
; GFX942-VGPR-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34
; GFX942-VGPR-NEXT: v_mov_b32_e32 v0, 0
; GFX942-VGPR-NEXT: v_mov_b32_e32 v1, 64
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v2, v0
-; GFX942-VGPR-NEXT: s_waitcnt lgkmcnt(0)
-; GFX942-VGPR-NEXT: v_mov_b64_e32 v[10:11], s[2:3]
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v3, v1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v4, v0
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v5, v1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v6, v0
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v7, v1
-; GFX942-VGPR-NEXT: v_mov_b64_e32 v[12:13], s[6:7]
-; GFX942-VGPR-NEXT: v_mov_b64_e32 v[8:9], v[6:7]
-; GFX942-VGPR-NEXT: v_mov_b64_e32 v[6:7], v[4:5]
-; GFX942-VGPR-NEXT: v_mov_b64_e32 v[4:5], v[2:3]
; GFX942-VGPR-NEXT: v_mov_b64_e32 v[2:3], v[0:1]
+; GFX942-VGPR-NEXT: s_waitcnt lgkmcnt(0)
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[8:9], s[2:3]
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[4:5], v[0:1]
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[6:7], v[0:1]
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[10:11], s[6:7]
; GFX942-VGPR-NEXT: s_nop 1
-; GFX942-VGPR-NEXT: v_mfma_f64_16x16x4_f64 v[2:9], v[10:11], v[12:13], v[2:9]
-; GFX942-VGPR-NEXT: v_mfma_f64_16x16x4_f64 v[2:9], v[10:11], v[12:13], v[2:9] cbsz:1 abid:2 neg:[1,1,0]
+; GFX942-VGPR-NEXT: v_mfma_f64_16x16x4_f64 v[0:7], v[8:9], v[10:11], v[0:7]
+; GFX942-VGPR-NEXT: v_mfma_f64_16x16x4_f64 v[0:7], v[8:9], v[10:11], v[0:7] cbsz:1 abid:2 neg:[1,1,0]
+; GFX942-VGPR-NEXT: v_mov_b32_e32 v8, 0
; GFX942-VGPR-NEXT: s_nop 15
-; GFX942-VGPR-NEXT: s_nop 1
-; GFX942-VGPR-NEXT: global_store_dwordx4 v0, v[6:9], s[0:1] offset:16
-; GFX942-VGPR-NEXT: global_store_dwordx4 v0, v[2:5], s[0:1]
+; GFX942-VGPR-NEXT: s_nop 0
+; GFX942-VGPR-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1] offset:16
+; GFX942-VGPR-NEXT: global_store_dwordx4 v8, v[0:3], s[0:1]
; GFX942-VGPR-NEXT: s_endpgm
;
; GFX942-VGPR-GISEL-LABEL: test_mfma_f64_16x16x4f64_splat_imm_int_64_in_high_bits:
@@ -2609,18 +2587,16 @@ define amdgpu_kernel void @test_mfma_f64_16x16x4f64_splat_imm_int_64_in_high_and
; GFX942-LABEL: test_mfma_f64_16x16x4f64_splat_imm_int_64_in_high_and_low:
; GFX942: ; %bb.0: ; %bb
; GFX942-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24
-; GFX942-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34
-; GFX942-NEXT: v_mov_b32_e32 v0, 64
-; GFX942-NEXT: v_mov_b32_e32 v1, v0
-; GFX942-NEXT: v_mov_b32_e32 v2, v0
+; GFX942-NEXT: s_load_dwordx2 s[8:9], s[4:5], 0x34
+; GFX942-NEXT: s_mov_b32 s6, 64
+; GFX942-NEXT: s_mov_b32 s7, s6
+; GFX942-NEXT: v_mov_b64_e32 v[0:1], s[6:7]
; GFX942-NEXT: s_waitcnt lgkmcnt(0)
; GFX942-NEXT: v_mov_b64_e32 v[8:9], s[2:3]
-; GFX942-NEXT: v_mov_b32_e32 v3, v0
-; GFX942-NEXT: v_mov_b32_e32 v4, v0
-; GFX942-NEXT: v_mov_b32_e32 v5, v0
-; GFX942-NEXT: v_mov_b32_e32 v6, v0
-; GFX942-NEXT: v_mov_b32_e32 v7, v0
-; GFX942-NEXT: v_mov_b64_e32 v[10:11], s[6:7]
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], s[6:7]
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], s[6:7]
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], s[6:7]
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], s[8:9]
; GFX942-NEXT: s_nop 1
; GFX942-NEXT: v_mfma_f64_16x16x4_f64 v[0:7], v[8:9], v[10:11], v[0:7]
; GFX942-NEXT: v_mfma_f64_16x16x4_f64 v[0:7], v[8:9], v[10:11], v[0:7] cbsz:1 abid:2 neg:[1,1,0]
@@ -2711,18 +2687,16 @@ define amdgpu_kernel void @test_mfma_f64_16x16x4f64_splat_imm_int_64_in_high_and
; GFX942-VGPR-LABEL: test_mfma_f64_16x16x4f64_splat_imm_int_64_in_high_and_low:
; GFX942-VGPR: ; %bb.0: ; %bb
; GFX942-VGPR-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24
-; GFX942-VGPR-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v0, 64
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v1, v0
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v2, v0
+; GFX942-VGPR-NEXT: s_load_dwordx2 s[8:9], s[4:5], 0x34
+; GFX942-VGPR-NEXT: s_mov_b32 s6, 64
+; GFX942-VGPR-NEXT: s_mov_b32 s7, s6
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[0:1], s[6:7]
; GFX942-VGPR-NEXT: s_waitcnt lgkmcnt(0)
; GFX942-VGPR-NEXT: v_mov_b64_e32 v[8:9], s[2:3]
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v3, v0
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v4, v0
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v5, v0
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v6, v0
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v7, v0
-; GFX942-VGPR-NEXT: v_mov_b64_e32 v[10:11], s[6:7]
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[2:3], s[6:7]
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[4:5], s[6:7]
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[6:7], s[6:7]
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[10:11], s[8:9]
; GFX942-VGPR-NEXT: s_nop 1
; GFX942-VGPR-NEXT: v_mfma_f64_16x16x4_f64 v[0:7], v[8:9], v[10:11], v[0:7]
; GFX942-VGPR-NEXT: v_mfma_f64_16x16x4_f64 v[0:7], v[8:9], v[10:11], v[0:7] cbsz:1 abid:2 neg:[1,1,0]
@@ -2820,18 +2794,16 @@ define amdgpu_kernel void @test_mfma_f64_16x16x4f64_splat_imm_f32_1_in_high_and_
; GFX942-LABEL: test_mfma_f64_16x16x4f64_splat_imm_f32_1_in_high_and_low:
; GFX942: ; %bb.0: ; %bb
; GFX942-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24
-; GFX942-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34
-; GFX942-NEXT: v_mov_b32_e32 v0, 1.0
-; GFX942-NEXT: v_mov_b32_e32 v1, v0
-; GFX942-NEXT: v_mov_b32_e32 v2, v0
+; GFX942-NEXT: s_load_dwordx2 s[8:9], s[4:5], 0x34
+; GFX942-NEXT: s_mov_b32 s6, 1.0
+; GFX942-NEXT: s_mov_b32 s7, s6
+; GFX942-NEXT: v_mov_b64_e32 v[0:1], s[6:7]
; GFX942-NEXT: s_waitcnt lgkmcnt(0)
; GFX942-NEXT: v_mov_b64_e32 v[8:9], s[2:3]
-; GFX942-NEXT: v_mov_b32_e32 v3, v0
-; GFX942-NEXT: v_mov_b32_e32 v4, v0
-; GFX942-NEXT: v_mov_b32_e32 v5, v0
-; GFX942-NEXT: v_mov_b32_e32 v6, v0
-; GFX942-NEXT: v_mov_b32_e32 v7, v0
-; GFX942-NEXT: v_mov_b64_e32 v[10:11], s[6:7]
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], s[6:7]
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], s[6:7]
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], s[6:7]
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], s[8:9]
; GFX942-NEXT: s_nop 1
; GFX942-NEXT: v_mfma_f64_16x16x4_f64 v[0:7], v[8:9], v[10:11], v[0:7]
; GFX942-NEXT: v_mfma_f64_16x16x4_f64 v[0:7], v[8:9], v[10:11], v[0:7] cbsz:1 abid:2 neg:[1,1,0]
@@ -2922,18 +2894,16 @@ define amdgpu_kernel void @test_mfma_f64_16x16x4f64_splat_imm_f32_1_in_high_and_
; GFX942-VGPR-LABEL: test_mfma_f64_16x16x4f64_splat_imm_f32_1_in_high_and_low:
; GFX942-VGPR: ; %bb.0: ; %bb
; GFX942-VGPR-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24
-; GFX942-VGPR-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v0, 1.0
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v1, v0
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v2, v0
+; GFX942-VGPR-NEXT: s_load_dwordx2 s[8:9], s[4:5], 0x34
+; GFX942-VGPR-NEXT: s_mov_b32 s6, 1.0
+; GFX942-VGPR-NEXT: s_mov_b32 s7, s6
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[0:1], s[6:7]
; GFX942-VGPR-NEXT: s_waitcnt lgkmcnt(0)
; GFX942-VGPR-NEXT: v_mov_b64_e32 v[8:9], s[2:3]
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v3, v0
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v4, v0
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v5, v0
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v6, v0
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v7, v0
-; GFX942-VGPR-NEXT: v_mov_b64_e32 v[10:11], s[6:7]
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[2:3], s[6:7]
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[4:5], s[6:7]
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[6:7], s[6:7]
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[10:11], s[8:9]
; GFX942-VGPR-NEXT: s_nop 1
; GFX942-VGPR-NEXT: v_mfma_f64_16x16x4_f64 v[0:7], v[8:9], v[10:11], v[0:7]
; GFX942-VGPR-NEXT: v_mfma_f64_16x16x4_f64 v[0:7], v[8:9], v[10:11], v[0:7] cbsz:1 abid:2 neg:[1,1,0]
@@ -3033,28 +3003,21 @@ define amdgpu_kernel void @test_mfma_f64_16x16x4f64_imm(ptr addrspace(1) %arg, d
; GFX942: ; %bb.0: ; %bb
; GFX942-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24
; GFX942-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34
-; GFX942-NEXT: v_mov_b32_e32 v0, 0
-; GFX942-NEXT: v_mov_b32_e32 v7, 0x3ff00000
-; GFX942-NEXT: v_mov_b32_e32 v1, v0
-; GFX942-NEXT: s_waitcnt lgkmcnt(0)
-; GFX942-NEXT: v_mov_b32_e32 v10, s2
-; GFX942-NEXT: v_mov_b32_e32 v11, s3
-; GFX942-NEXT: v_mov_b32_e32 v2, v0
-; GFX942-NEXT: v_mov_b32_e32 v3, v0
-; GFX942-NEXT: v_mov_b32_e32 v4, v0
-; GFX942-NEXT: v_mov_b32_e32 v5, v0
-; GFX942-NEXT: v_mov_b32_e32 v6, v0
-; GFX942-NEXT: v_mov_b64_e32 v[12:13], s[6:7]
-; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[6:7]
-; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[4:5]
-; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[2:3]
+; GFX942-NEXT: v_mov_b64_e32 v[0:1], 0
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], 1.0
; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[0:1]
+; GFX942-NEXT: s_waitcnt lgkmcnt(0)
+; GFX942-NEXT: v_mov_b32_e32 v8, s2
+; GFX942-NEXT: v_mov_b32_e32 v9, s3
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[0:1]
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], s[6:7]
; GFX942-NEXT: s_nop 1
-; GFX942-NEXT: v_mfma_f64_16x16x4_f64 v[2:9], v[10:11], v[12:13], v[2:9]
+; GFX942-NEXT: v_mfma_f64_16x16x4_f64 v[0:7], v[8:9], v[10:11], v[0:7]
+; GFX942-NEXT: v_mov_b32_e32 v8, 0
; GFX942-NEXT: s_nop 15
-; GFX942-NEXT: s_nop 1
-; GFX942-NEXT: global_store_dwordx4 v0, v[6:9], s[0:1] offset:16
-; GFX942-NEXT: global_store_dwordx4 v0, v[2:5], s[0:1]
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1] offset:16
+; GFX942-NEXT: global_store_dwordx4 v8, v[0:3], s[0:1]
; GFX942-NEXT: s_endpgm
;
; GFX942-GISEL-LABEL: test_mfma_f64_16x16x4f64_imm:
@@ -3137,28 +3100,21 @@ define amdgpu_kernel void @test_mfma_f64_16x16x4f64_imm(ptr addrspace(1) %arg, d
; GFX942-VGPR: ; %bb.0: ; %bb
; GFX942-VGPR-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24
; GFX942-VGPR-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v0, 0
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v7, 0x3ff00000
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v1, v0
-; GFX942-VGPR-NEXT: s_waitcnt lgkmcnt(0)
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v10, s2
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v11, s3
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v2, v0
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v3, v0
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v4, v0
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v5, v0
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v6, v0
-; GFX942-VGPR-NEXT: v_mov_b64_e32 v[12:13], s[6:7]
-; GFX942-VGPR-NEXT: v_mov_b64_e32 v[8:9], v[6:7]
-; GFX942-VGPR-NEXT: v_mov_b64_e32 v[6:7], v[4:5]
-; GFX942-VGPR-NEXT: v_mov_b64_e32 v[4:5], v[2:3]
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[0:1], 0
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[6:7], 1.0
; GFX942-VGPR-NEXT: v_mov_b64_e32 v[2:3], v[0:1]
+; GFX942-VGPR-NEXT: s_waitcnt lgkmcnt(0)
+; GFX942-VGPR-NEXT: v_mov_b32_e32 v8, s2
+; GFX942-VGPR-NEXT: v_mov_b32_e32 v9, s3
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[4:5], v[0:1]
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[10:11], s[6:7]
; GFX942-VGPR-NEXT: s_nop 1
-; GFX942-VGPR-NEXT: v_mfma_f64_16x16x4_f64 v[2:9], v[10:11], v[12:13], v[2:9]
+; GFX942-VGPR-NEXT: v_mfma_f64_16x16x4_f64 v[0:7], v[8:9], v[10:11], v[0:7]
+; GFX942-VGPR-NEXT: v_mov_b32_e32 v8, 0
; GFX942-VGPR-NEXT: s_nop 15
-; GFX942-VGPR-NEXT: s_nop 1
-; GFX942-VGPR-NEXT: global_store_dwordx4 v0, v[6:9], s[0:1] offset:16
-; GFX942-VGPR-NEXT: global_store_dwordx4 v0, v[2:5], s[0:1]
+; GFX942-VGPR-NEXT: s_nop 0
+; GFX942-VGPR-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1] offset:16
+; GFX942-VGPR-NEXT: global_store_dwordx4 v8, v[0:3], s[0:1]
; GFX942-VGPR-NEXT: s_endpgm
;
; GFX942-VGPR-GISEL-LABEL: test_mfma_f64_16x16x4f64_imm:
@@ -3250,26 +3206,20 @@ define amdgpu_kernel void @test_mfma_f64_16x16x4f64_splat_lit(ptr addrspace(1) %
; GFX942-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34
; GFX942-NEXT: v_mov_b32_e32 v0, 0
; GFX942-NEXT: v_mov_b32_e32 v1, 0x405ec000
-; GFX942-NEXT: v_mov_b32_e32 v2, v0
-; GFX942-NEXT: s_waitcnt lgkmcnt(0)
-; GFX942-NEXT: v_mov_b32_e32 v10, s2
-; GFX942-NEXT: v_mov_b32_e32 v11, s3
-; GFX942-NEXT: v_mov_b32_e32 v3, v1
-; GFX942-NEXT: v_mov_b32_e32 v4, v0
-; GFX942-NEXT: v_mov_b32_e32 v5, v1
-; GFX942-NEXT: v_mov_b32_e32 v6, v0
-; GFX942-NEXT: v_mov_b32_e32 v7, v1
-; GFX942-NEXT: v_mov_b64_e32 v[12:13], s[6:7]
-; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[6:7]
-; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[4:5]
-; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[2:3]
; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[0:1]
+; GFX942-NEXT: s_waitcnt lgkmcnt(0)
+; GFX942-NEXT: v_mov_b32_e32 v8, s2
+; GFX942-NEXT: v_mov_b32_e32 v9, s3
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[0:1]
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[0:1]
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], s[6:7]
; GFX942-NEXT: s_nop 1
-; GFX942-NEXT: v_mfma_f64_16x16x4_f64 v[2:9], v[10:11], v[12:13], v[2:9]
+; GFX942-NEXT: v_mfma_f64_16x16x4_f64 v[0:7], v[8:9], v[10:11], v[0:7]
+; GFX942-NEXT: v_mov_b32_e32 v8, 0
; GFX942-NEXT: s_nop 15
-; GFX942-NEXT: s_nop 1
-; GFX942-NEXT: global_store_dwordx4 v0, v[6:9], s[0:1] offset:16
-; GFX942-NEXT: global_store_dwordx4 v0, v[2:5], s[0:1]
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1] offset:16
+; GFX942-NEXT: global_store_dwordx4 v8, v[0:3], s[0:1]
; GFX942-NEXT: s_endpgm
;
; GFX942-GISEL-LABEL: test_mfma_f64_16x16x4f64_splat_lit:
@@ -3356,26 +3306,20 @@ define amdgpu_kernel void @test_mfma_f64_16x16x4f64_splat_lit(ptr addrspace(1) %
; GFX942-VGPR-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34
; GFX942-VGPR-NEXT: v_mov_b32_e32 v0, 0
; GFX942-VGPR-NEXT: v_mov_b32_e32 v1, 0x405ec000
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v2, v0
-; GFX942-VGPR-NEXT: s_waitcnt lgkmcnt(0)
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v10, s2
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v11, s3
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v3, v1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v4, v0
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v5, v1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v6, v0
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v7, v1
-; GFX942-VGPR-NEXT: v_mov_b64_e32 v[12:13], s[6:7]
-; GFX942-VGPR-NEXT: v_mov_b64_e32 v[8:9], v[6:7]
-; GFX942-VGPR-NEXT: v_mov_b64_e32 v[6:7], v[4:5]
-; GFX942-VGPR-NEXT: v_mov_b64_e32 v[4:5], v[2:3]
; GFX942-VGPR-NEXT: v_mov_b64_e32 v[2:3], v[0:1]
+; GFX942-VGPR-NEXT: s_waitcnt lgkmcnt(0)
+; GFX942-VGPR-NEXT: v_mov_b32_e32 v8, s2
+; GFX942-VGPR-NEXT: v_mov_b32_e32 v9, s3
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[4:5], v[0:1]
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[6:7], v[0:1]
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[10:11], s[6:7]
; GFX942-VGPR-NEXT: s_nop 1
-; GFX942-VGPR-NEXT: v_mfma_f64_16x16x4_f64 v[2:9], v[10:11], v[12:13], v[2:9]
+; GFX942-VGPR-NEXT: v_mfma_f64_16x16x4_f64 v[0:7], v[8:9], v[10:11], v[0:7]
+; GFX942-VGPR-NEXT: v_mov_b32_e32 v8, 0
; GFX942-VGPR-NEXT: s_nop 15
-; GFX942-VGPR-NEXT: s_nop 1
-; GFX942-VGPR-NEXT: global_store_dwordx4 v0, v[6:9], s[0:1] offset:16
-; GFX942-VGPR-NEXT: global_store_dwordx4 v0, v[2:5], s[0:1]
+; GFX942-VGPR-NEXT: s_nop 0
+; GFX942-VGPR-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1] offset:16
+; GFX942-VGPR-NEXT: global_store_dwordx4 v8, v[0:3], s[0:1]
; GFX942-VGPR-NEXT: s_endpgm
;
; GFX942-VGPR-GISEL-LABEL: test_mfma_f64_16x16x4f64_splat_lit:
diff --git a/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.mfma.ll b/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.mfma.ll
index bf99ad5bf9bad..aacc5540b7aed 100644
--- a/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.mfma.ll
+++ b/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.mfma.ll
@@ -9085,69 +9085,38 @@ define amdgpu_kernel void @test_mfma_f32_32x32x1f32_imm(ptr addrspace(1) %arg) #
;
; GFX942-LABEL: test_mfma_f32_32x32x1f32_imm:
; GFX942: ; %bb.0: ; %bb
-; GFX942-NEXT: v_mov_b32_e32 v0, 1.0
-; GFX942-NEXT: v_mov_b32_e32 v1, 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v1
-; GFX942-NEXT: v_mov_b32_e32 v3, v1
-; GFX942-NEXT: v_mov_b32_e32 v4, v1
-; GFX942-NEXT: v_mov_b32_e32 v5, v1
-; GFX942-NEXT: v_mov_b32_e32 v6, v1
-; GFX942-NEXT: v_mov_b32_e32 v7, v1
-; GFX942-NEXT: v_mov_b32_e32 v8, v1
-; GFX942-NEXT: v_mov_b32_e32 v9, v1
-; GFX942-NEXT: v_mov_b32_e32 v10, v1
-; GFX942-NEXT: v_mov_b32_e32 v11, v1
-; GFX942-NEXT: v_mov_b32_e32 v12, v1
-; GFX942-NEXT: v_mov_b32_e32 v13, v1
-; GFX942-NEXT: v_mov_b32_e32 v14, v1
-; GFX942-NEXT: v_mov_b32_e32 v15, v1
-; GFX942-NEXT: v_mov_b32_e32 v16, v1
-; GFX942-NEXT: v_mov_b32_e32 v17, v1
-; GFX942-NEXT: v_mov_b32_e32 v18, v1
-; GFX942-NEXT: v_mov_b32_e32 v19, v1
-; GFX942-NEXT: v_mov_b32_e32 v20, v1
-; GFX942-NEXT: v_mov_b32_e32 v21, v1
-; GFX942-NEXT: v_mov_b32_e32 v22, v1
-; GFX942-NEXT: v_mov_b32_e32 v23, v1
-; GFX942-NEXT: v_mov_b32_e32 v24, v1
-; GFX942-NEXT: v_mov_b32_e32 v25, v1
-; GFX942-NEXT: v_mov_b32_e32 v26, v1
-; GFX942-NEXT: v_mov_b32_e32 v27, v1
-; GFX942-NEXT: v_mov_b32_e32 v28, v1
-; GFX942-NEXT: v_mov_b32_e32 v29, v1
-; GFX942-NEXT: v_mov_b32_e32 v30, v1
-; GFX942-NEXT: v_mov_b32_e32 v31, v1
-; GFX942-NEXT: v_mov_b32_e32 v34, 2.0
-; GFX942-NEXT: v_mov_b64_e32 v[32:33], v[30:31]
-; GFX942-NEXT: v_mov_b64_e32 v[30:31], v[28:29]
-; GFX942-NEXT: v_mov_b64_e32 v[28:29], v[26:27]
-; GFX942-NEXT: v_mov_b64_e32 v[26:27], v[24:25]
-; GFX942-NEXT: v_mov_b64_e32 v[24:25], v[22:23]
-; GFX942-NEXT: v_mov_b64_e32 v[22:23], v[20:21]
-; GFX942-NEXT: v_mov_b64_e32 v[20:21], v[18:19]
-; GFX942-NEXT: v_mov_b64_e32 v[18:19], v[16:17]
-; GFX942-NEXT: v_mov_b64_e32 v[16:17], v[14:15]
-; GFX942-NEXT: v_mov_b64_e32 v[14:15], v[12:13]
-; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[10:11]
-; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[8:9]
-; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[6:7]
-; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[4:5]
+; GFX942-NEXT: v_mov_b32_e32 v33, 1.0
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], 0
+; GFX942-NEXT: v_mov_b64_e32 v[0:1], 0x3f800000
; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[2:3]
-; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[0:1]
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[2:3]
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[2:3]
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[2:3]
+; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[2:3]
+; GFX942-NEXT: v_mov_b64_e32 v[14:15], v[2:3]
+; GFX942-NEXT: v_mov_b64_e32 v[16:17], v[2:3]
+; GFX942-NEXT: v_mov_b64_e32 v[18:19], v[2:3]
+; GFX942-NEXT: v_mov_b64_e32 v[20:21], v[2:3]
+; GFX942-NEXT: v_mov_b64_e32 v[22:23], v[2:3]
+; GFX942-NEXT: v_mov_b64_e32 v[24:25], v[2:3]
+; GFX942-NEXT: v_mov_b64_e32 v[26:27], v[2:3]
+; GFX942-NEXT: v_mov_b64_e32 v[28:29], v[2:3]
+; GFX942-NEXT: v_mov_b64_e32 v[30:31], v[2:3]
+; GFX942-NEXT: v_mov_b32_e32 v34, 2.0
; GFX942-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24
-; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mfma_f32_32x32x1_2b_f32 v[2:33], v0, v34, v[2:33]
+; GFX942-NEXT: v_mov_b32_e32 v32, 0
+; GFX942-NEXT: v_mfma_f32_32x32x1_2b_f32 v[0:31], v33, v34, v[0:31]
; GFX942-NEXT: s_waitcnt lgkmcnt(0)
; GFX942-NEXT: s_nop 15
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: global_store_dwordx4 v1, v[30:33], s[0:1] offset:112
-; GFX942-NEXT: global_store_dwordx4 v1, v[26:29], s[0:1] offset:96
-; GFX942-NEXT: global_store_dwordx4 v1, v[22:25], s[0:1] offset:80
-; GFX942-NEXT: global_store_dwordx4 v1, v[18:21], s[0:1] offset:64
-; GFX942-NEXT: global_store_dwordx4 v1, v[14:17], s[0:1] offset:48
-; GFX942-NEXT: global_store_dwordx4 v1, v[10:13], s[0:1] offset:32
-; GFX942-NEXT: global_store_dwordx4 v1, v[6:9], s[0:1] offset:16
-; GFX942-NEXT: global_store_dwordx4 v1, v[2:5], s[0:1]
+; GFX942-NEXT: global_store_dwordx4 v32, v[28:31], s[0:1] offset:112
+; GFX942-NEXT: global_store_dwordx4 v32, v[24:27], s[0:1] offset:96
+; GFX942-NEXT: global_store_dwordx4 v32, v[20:23], s[0:1] offset:80
+; GFX942-NEXT: global_store_dwordx4 v32, v[16:19], s[0:1] offset:64
+; GFX942-NEXT: global_store_dwordx4 v32, v[12:15], s[0:1] offset:48
+; GFX942-NEXT: global_store_dwordx4 v32, v[8:11], s[0:1] offset:32
+; GFX942-NEXT: global_store_dwordx4 v32, v[4:7], s[0:1] offset:16
+; GFX942-NEXT: global_store_dwordx4 v32, v[0:3], s[0:1]
; GFX942-NEXT: s_endpgm
;
; GFX942-GISEL-LABEL: test_mfma_f32_32x32x1f32_imm:
@@ -9220,69 +9189,38 @@ define amdgpu_kernel void @test_mfma_f32_32x32x1f32_imm(ptr addrspace(1) %arg) #
;
; GFX942-VGPR-LABEL: test_mfma_f32_32x32x1f32_imm:
; GFX942-VGPR: ; %bb.0: ; %bb
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v0, 1.0
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v1, 0
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v2, v1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v3, v1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v4, v1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v5, v1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v6, v1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v7, v1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v8, v1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v9, v1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v10, v1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v11, v1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v12, v1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v13, v1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v14, v1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v15, v1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v16, v1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v17, v1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v18, v1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v19, v1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v20, v1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v21, v1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v22, v1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v23, v1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v24, v1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v25, v1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v26, v1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v27, v1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v28, v1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v29, v1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v30, v1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v31, v1
-; GFX942-VGPR-NEXT: v_mov_b32_e32 v34, 2.0
-; GFX942-VGPR-NEXT: v_mov_b64_e32 v[32:33], v[30:31]
-; GFX942-VGPR-NEXT: v_mov_b64_e32 v[30:31], v[28:29]
-; GFX942-VGPR-NEXT: v_mov_b64_e32 v[28:29], v[26:27]
-; GFX942-VGPR-NEXT: v_mov_b64_e32 v[26:27], v[24:25]
-; GFX942-VGPR-NEXT: v_mov_b64_e32 v[24:25], v[22:23]
-; GFX942-VGPR-NEXT: v_mov_b64_e32 v[22:23], v[20:21]
-; GFX942-VGPR-NEXT: v_mov_b64_e32 v[20:21], v[18:19]
-; GFX942-VGPR-NEXT: v_mov_b64_e32 v[18:19], v[16:17]
-; GFX942-VGPR-NEXT: v_mov_b64_e32 v[16:17], v[14:15]
-; GFX942-VGPR-NEXT: v_mov_b64_e32 v[14:15], v[12:13]
-; GFX942-VGPR-NEXT: v_mov_b64_e32 v[12:13], v[10:11]
-; GFX942-VGPR-NEXT: v_mov_b64_e32 v[10:11], v[8:9]
-; GFX942-VGPR-NEXT: v_mov_b64_e32 v[8:9], v[6:7]
-; GFX942-VGPR-NEXT: v_mov_b64_e32 v[6:7], v[4:5]
+; GFX942-VGPR-NEXT: v_mov_b32_e32 v33, 1.0
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[2:3], 0
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[0:1], 0x3f800000
; GFX942-VGPR-NEXT: v_mov_b64_e32 v[4:5], v[2:3]
-; GFX942-VGPR-NEXT: v_mov_b64_e32 v[2:3], v[0:1]
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[6:7], v[2:3]
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[8:9], v[2:3]
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[10:11], v[2:3]
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[12:13], v[2:3]
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[14:15], v[2:3]
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[16:17], v[2:3]
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[18:19], v[2:3]
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[20:21], v[2:3]
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[22:23], v[2:3]
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[24:25], v[2:3]
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[26:27], v[2:3]
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[28:29], v[2:3]
+; GFX942-VGPR-NEXT: v_mov_b64_e32 v[30:31], v[2:3]
+; GFX942-VGPR-NEXT: v_mov_b32_e32 v34, 2.0
; GFX942-VGPR-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24
-; GFX942-VGPR-NEXT: s_nop 0
-; GFX942-VGPR-NEXT: v_mfma_f32_32x32x1_2b_f32 v[2:33], v0, v34, v[2:33]
+; GFX942-VGPR-NEXT: v_mov_b32_e32 v32, 0
+; GFX942-VGPR-NEXT: v_mfma_f32_32x32x1_2b_f32 v[0:31], v33, v34, v[0:31]
; GFX942-VGPR-NEXT: s_waitcnt lgkmcnt(0)
; GFX942-VGPR-NEXT: s_nop 15
; GFX942-VGPR-NEXT: s_nop 0
-; GFX942-VGPR-NEXT: global_store_dwordx4 v1, v[30:33], s[0:1] offset:112
-; GFX942-VGPR-NEXT: global_store_dwordx4 v1, v[26:29], s[0:1] offset:96
-; GFX942-VGPR-NEXT: global_store_dwordx4 v1, v[22:25], s[0:1] offset:80
-; GFX942-VGPR-NEXT: global_store_dwordx4 v1, v[18:21], s[0:1] offset:64
-; GFX942-VGPR-NEXT: global_store_dwordx4 v1, v[14:17], s[0:1] offset:48
-; GFX942-VGPR-NEXT: global_store_dwordx4 v1, v[10:13], s[0:1] offset:32
-; GFX942-VGPR-NEXT: global_store_dwordx4 v1, v[6:9], s[0:1] offset:16
-; GFX942-VGPR-NEXT: global_store_dwordx4 v1, v[2:5], s[0:1]
+; GFX942-VGPR-NEXT: global_store_dwordx4 v32, v[28:31], s[0:1] offset:112
+; GFX942-VGPR-NEXT: global_store_dwordx4 v32, v[24:27], s[0:1] offset:96
+; GFX942-VGPR-NEXT: global_store_dwordx4 v32, v[20:23], s[0:1] offset:80
+; GFX942-VGPR-NEXT: global_store_dwordx4 v32, v[16:19], s[0:1] offset:64
+; GFX942-VGPR-NEXT: global_store_dwordx4 v32, v[12:15], s[0:1] offset:48
+; GFX942-VGPR-NEXT: global_store_dwordx4 v32, v[8:11], s[0:1] offset:32
+; GFX942-VGPR-NEXT: global_store_dwordx4 v32, v[4:7], s[0:1] offset:16
+; GFX942-VGPR-NEXT: global_store_dwordx4 v32, v[0:3], s[0:1]
; GFX942-VGPR-NEXT: s_endpgm
;
; GFX942-VGPR-GISEL-LABEL: test_mfma_f32_32x32x1f32_imm:
diff --git a/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.wmma.imm.gfx1251.w32.ll b/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.wmma.imm.gfx1251.w32.ll
index 208861a3d549f..f9428506505ff 100644
--- a/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.wmma.imm.gfx1251.w32.ll
+++ b/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.wmma.imm.gfx1251.w32.ll
@@ -9,7 +9,7 @@ define amdgpu_ps void @test_wmma_f64_16x16x4_f64(<2 x double> %A, <2 x double> %
; GFX1251-NEXT: s_mov_b64 s[64:65], 0
; GFX1251-NEXT: v_nop
; GFX1251-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
-; GFX1251-NEXT: v_wmma_f64_16x16x4_f64 v[10:25], v[0:3], v[4:7], 1.0
+; GFX1251-NEXT: v_wmma_f64_16x16x4_f64 v[10:25], v[0:3], v[4:7], 0
; GFX1251-NEXT: s_clause 0x3
; GFX1251-NEXT: global_store_b128 v[8:9], v[22:25], off offset:48
; GFX1251-NEXT: global_store_b128 v[8:9], v[18:21], off offset:32
@@ -43,15 +43,15 @@ define amdgpu_ps void @test_wmma_f64_16x16x4_f64_non_splat(<2 x double> %A, <2 x
; GFX1251-NEXT: s_mov_b64 s[64:65], 0
; GFX1251-NEXT: v_nop
; GFX1251-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
-; GFX1251-NEXT: v_dual_mov_b32 v10, 0 :: v_dual_mov_b32 v11, 0x3ff00000
-; GFX1251-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
-; GFX1251-NEXT: v_dual_mov_b32 v15, 2.0 :: v_dual_mov_b32 v12, v10
-; GFX1251-NEXT: v_dual_mov_b32 v13, v11 :: v_dual_mov_b32 v14, v10
-; GFX1251-NEXT: v_dual_mov_b32 v16, v10 :: v_dual_mov_b32 v17, v11
-; GFX1251-NEXT: v_dual_mov_b32 v18, v10 :: v_dual_mov_b32 v19, v11
-; GFX1251-NEXT: v_dual_mov_b32 v20, v10 :: v_dual_mov_b32 v21, v11
-; GFX1251-NEXT: v_dual_mov_b32 v22, v10 :: v_dual_mov_b32 v23, v11
-; GFX1251-NEXT: v_dual_mov_b32 v24, v10 :: v_dual_mov_b32 v25, v11
+; GFX1251-NEXT: v_mov_b64_e32 v[10:11], 1.0
+; GFX1251-NEXT: v_mov_b64_e32 v[14:15], 2.0
+; GFX1251-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX1251-NEXT: v_mov_b64_e32 v[12:13], v[10:11]
+; GFX1251-NEXT: v_mov_b64_e32 v[16:17], v[10:11]
+; GFX1251-NEXT: v_mov_b64_e32 v[18:19], v[10:11]
+; GFX1251-NEXT: v_mov_b64_e32 v[20:21], v[10:11]
+; GFX1251-NEXT: v_mov_b64_e32 v[22:23], v[10:11]
+; GFX1251-NEXT: v_mov_b64_e32 v[24:25], v[10:11]
; GFX1251-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX1251-NEXT: v_wmma_f64_16x16x4_f64 v[10:25], v[0:3], v[4:7], v[10:25]
; GFX1251-NEXT: s_clause 0x3
@@ -104,15 +104,15 @@ define amdgpu_ps void @test_wmma_f64_16x16x4_f64_non_inlineable(<2 x double> %A,
; GFX1251-NEXT: s_mov_b64 s[64:65], 0
; GFX1251-NEXT: v_nop
; GFX1251-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
-; GFX1251-NEXT: v_dual_mov_b32 v10, 0 :: v_dual_mov_b32 v11, 0x40080000
+; GFX1251-NEXT: v_mov_b64_e32 v[10:11], 0x4008000000000000
; GFX1251-NEXT: s_delay_alu instid0(VALU_DEP_1)
-; GFX1251-NEXT: v_dual_mov_b32 v12, v10 :: v_dual_mov_b32 v13, v11
-; GFX1251-NEXT: v_dual_mov_b32 v14, v10 :: v_dual_mov_b32 v15, v11
-; GFX1251-NEXT: v_dual_mov_b32 v16, v10 :: v_dual_mov_b32 v17, v11
-; GFX1251-NEXT: v_dual_mov_b32 v18, v10 :: v_dual_mov_b32 v19, v11
-; GFX1251-NEXT: v_dual_mov_b32 v20, v10 :: v_dual_mov_b32 v21, v11
-; GFX1251-NEXT: v_dual_mov_b32 v22, v10 :: v_dual_mov_b32 v23, v11
-; GFX1251-NEXT: v_dual_mov_b32 v24, v10 :: v_dual_mov_b32 v25, v11
+; GFX1251-NEXT: v_mov_b64_e32 v[12:13], v[10:11]
+; GFX1251-NEXT: v_mov_b64_e32 v[14:15], v[10:11]
+; GFX1251-NEXT: v_mov_b64_e32 v[16:17], v[10:11]
+; GFX1251-NEXT: v_mov_b64_e32 v[18:19], v[10:11]
+; GFX1251-NEXT: v_mov_b64_e32 v[20:21], v[10:11]
+; GFX1251-NEXT: v_mov_b64_e32 v[22:23], v[10:11]
+; GFX1251-NEXT: v_mov_b64_e32 v[24:25], v[10:11]
; GFX1251-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX1251-NEXT: v_wmma_f64_16x16x4_f64 v[10:25], v[0:3], v[4:7], v[10:25]
; GFX1251-NEXT: s_clause 0x3
diff --git a/llvm/test/CodeGen/AMDGPU/llvm.maximum.f64.ll b/llvm/test/CodeGen/AMDGPU/llvm.maximum.f64.ll
index c3ac43d143e29..40e193823d06f 100644
--- a/llvm/test/CodeGen/AMDGPU/llvm.maximum.f64.ll
+++ b/llvm/test/CodeGen/AMDGPU/llvm.maximum.f64.ll
@@ -610,17 +610,17 @@ define <2 x double> @v_maximum_v2f64(<2 x double> %src0, <2 x double> %src1) #0
; GFX950-LABEL: v_maximum_v2f64:
; GFX950: ; %bb.0:
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX950-NEXT: v_max_f64 v[8:9], v[0:1], v[4:5]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[4:5]
-; GFX950-NEXT: v_max_f64 v[4:5], v[2:3], v[6:7]
-; GFX950-NEXT: s_nop 0
-; GFX950-NEXT: v_cndmask_b32_e64 v0, v8, 0, vcc
-; GFX950-NEXT: v_mov_b32_e32 v8, 0x7ff80000
-; GFX950-NEXT: v_cndmask_b32_e32 v1, v9, v8, vcc
+; GFX950-NEXT: v_max_f64 v[8:9], v[2:3], v[6:7]
+; GFX950-NEXT: v_mov_b32_e32 v10, 0x7ff80000
; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[2:3], v[6:7]
+; GFX950-NEXT: v_max_f64 v[6:7], v[0:1], v[4:5]
+; GFX950-NEXT: s_nop 0
+; GFX950-NEXT: v_cndmask_b32_e32 v3, v9, v10, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v2, v8, 0, vcc
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[4:5]
; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v2, v4, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v3, v5, v8, vcc
+; GFX950-NEXT: v_cndmask_b32_e32 v1, v7, v10, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v0, v6, 0, vcc
; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_maximum_v2f64:
@@ -686,12 +686,19 @@ define <2 x double> @v_maximum_v2f64__nnan(<2 x double> %src0, <2 x double> %src
; GFX8-NEXT: v_max_f64 v[2:3], v[2:3], v[6:7]
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
-; GFX9-LABEL: v_maximum_v2f64__nnan:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f64 v[0:1], v[0:1], v[4:5]
-; GFX9-NEXT: v_max_f64 v[2:3], v[2:3], v[6:7]
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: v_maximum_v2f64__nnan:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: v_max_f64 v[0:1], v[0:1], v[4:5]
+; GFX900-NEXT: v_max_f64 v[2:3], v[2:3], v[6:7]
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX950-LABEL: v_maximum_v2f64__nnan:
+; GFX950: ; %bb.0:
+; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX950-NEXT: v_max_f64 v[2:3], v[2:3], v[6:7]
+; GFX950-NEXT: v_max_f64 v[0:1], v[0:1], v[4:5]
+; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_maximum_v2f64__nnan:
; GFX10: ; %bb.0:
@@ -774,17 +781,17 @@ define <2 x double> @v_maximum_v2f64__nsz(<2 x double> %src0, <2 x double> %src1
; GFX950-LABEL: v_maximum_v2f64__nsz:
; GFX950: ; %bb.0:
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX950-NEXT: v_max_f64 v[8:9], v[0:1], v[4:5]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[4:5]
-; GFX950-NEXT: v_max_f64 v[4:5], v[2:3], v[6:7]
-; GFX950-NEXT: s_nop 0
-; GFX950-NEXT: v_cndmask_b32_e64 v0, v8, 0, vcc
-; GFX950-NEXT: v_mov_b32_e32 v8, 0x7ff80000
-; GFX950-NEXT: v_cndmask_b32_e32 v1, v9, v8, vcc
+; GFX950-NEXT: v_max_f64 v[8:9], v[2:3], v[6:7]
+; GFX950-NEXT: v_mov_b32_e32 v10, 0x7ff80000
; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[2:3], v[6:7]
+; GFX950-NEXT: v_max_f64 v[6:7], v[0:1], v[4:5]
+; GFX950-NEXT: s_nop 0
+; GFX950-NEXT: v_cndmask_b32_e32 v3, v9, v10, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v2, v8, 0, vcc
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[4:5]
; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v2, v4, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v3, v5, v8, vcc
+; GFX950-NEXT: v_cndmask_b32_e32 v1, v7, v10, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v0, v6, 0, vcc
; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_maximum_v2f64__nsz:
@@ -850,12 +857,19 @@ define <2 x double> @v_maximum_v2f64__nnan_nsz(<2 x double> %src0, <2 x double>
; GFX8-NEXT: v_max_f64 v[2:3], v[2:3], v[6:7]
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
-; GFX9-LABEL: v_maximum_v2f64__nnan_nsz:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f64 v[0:1], v[0:1], v[4:5]
-; GFX9-NEXT: v_max_f64 v[2:3], v[2:3], v[6:7]
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: v_maximum_v2f64__nnan_nsz:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: v_max_f64 v[0:1], v[0:1], v[4:5]
+; GFX900-NEXT: v_max_f64 v[2:3], v[2:3], v[6:7]
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX950-LABEL: v_maximum_v2f64__nnan_nsz:
+; GFX950: ; %bb.0:
+; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX950-NEXT: v_max_f64 v[2:3], v[2:3], v[6:7]
+; GFX950-NEXT: v_max_f64 v[0:1], v[0:1], v[4:5]
+; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_maximum_v2f64__nnan_nsz:
; GFX10: ; %bb.0:
@@ -1095,22 +1109,22 @@ define <3 x double> @v_maximum_v3f64(<3 x double> %src0, <3 x double> %src1) #0
; GFX950-LABEL: v_maximum_v3f64:
; GFX950: ; %bb.0:
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX950-NEXT: v_max_f64 v[12:13], v[0:1], v[6:7]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[6:7]
-; GFX950-NEXT: v_max_f64 v[6:7], v[2:3], v[8:9]
+; GFX950-NEXT: v_max_f64 v[12:13], v[4:5], v[10:11]
+; GFX950-NEXT: v_mov_b32_e32 v14, 0x7ff80000
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[4:5], v[10:11]
+; GFX950-NEXT: v_max_f64 v[10:11], v[2:3], v[8:9]
; GFX950-NEXT: s_nop 0
-; GFX950-NEXT: v_cndmask_b32_e64 v0, v12, 0, vcc
-; GFX950-NEXT: v_mov_b32_e32 v12, 0x7ff80000
-; GFX950-NEXT: v_cndmask_b32_e32 v1, v13, v12, vcc
+; GFX950-NEXT: v_cndmask_b32_e32 v5, v13, v14, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v4, v12, 0, vcc
; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[2:3], v[8:9]
+; GFX950-NEXT: v_max_f64 v[8:9], v[0:1], v[6:7]
+; GFX950-NEXT: s_nop 0
+; GFX950-NEXT: v_cndmask_b32_e32 v3, v11, v14, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v2, v10, 0, vcc
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[6:7]
; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v2, v6, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v3, v7, v12, vcc
-; GFX950-NEXT: v_max_f64 v[6:7], v[4:5], v[10:11]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[4:5], v[10:11]
-; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v4, v6, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v5, v7, v12, vcc
+; GFX950-NEXT: v_cndmask_b32_e32 v1, v9, v14, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v0, v8, 0, vcc
; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_maximum_v3f64:
@@ -1187,13 +1201,21 @@ define <3 x double> @v_maximum_v3f64__nnan(<3 x double> %src0, <3 x double> %src
; GFX8-NEXT: v_max_f64 v[4:5], v[4:5], v[10:11]
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
-; GFX9-LABEL: v_maximum_v3f64__nnan:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f64 v[0:1], v[0:1], v[6:7]
-; GFX9-NEXT: v_max_f64 v[2:3], v[2:3], v[8:9]
-; GFX9-NEXT: v_max_f64 v[4:5], v[4:5], v[10:11]
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: v_maximum_v3f64__nnan:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: v_max_f64 v[0:1], v[0:1], v[6:7]
+; GFX900-NEXT: v_max_f64 v[2:3], v[2:3], v[8:9]
+; GFX900-NEXT: v_max_f64 v[4:5], v[4:5], v[10:11]
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX950-LABEL: v_maximum_v3f64__nnan:
+; GFX950: ; %bb.0:
+; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX950-NEXT: v_max_f64 v[4:5], v[4:5], v[10:11]
+; GFX950-NEXT: v_max_f64 v[2:3], v[2:3], v[8:9]
+; GFX950-NEXT: v_max_f64 v[0:1], v[0:1], v[6:7]
+; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_maximum_v3f64__nnan:
; GFX10: ; %bb.0:
@@ -1292,22 +1314,22 @@ define <3 x double> @v_maximum_v3f64__nsz(<3 x double> %src0, <3 x double> %src1
; GFX950-LABEL: v_maximum_v3f64__nsz:
; GFX950: ; %bb.0:
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX950-NEXT: v_max_f64 v[12:13], v[0:1], v[6:7]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[6:7]
-; GFX950-NEXT: v_max_f64 v[6:7], v[2:3], v[8:9]
+; GFX950-NEXT: v_max_f64 v[12:13], v[4:5], v[10:11]
+; GFX950-NEXT: v_mov_b32_e32 v14, 0x7ff80000
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[4:5], v[10:11]
+; GFX950-NEXT: v_max_f64 v[10:11], v[2:3], v[8:9]
; GFX950-NEXT: s_nop 0
-; GFX950-NEXT: v_cndmask_b32_e64 v0, v12, 0, vcc
-; GFX950-NEXT: v_mov_b32_e32 v12, 0x7ff80000
-; GFX950-NEXT: v_cndmask_b32_e32 v1, v13, v12, vcc
+; GFX950-NEXT: v_cndmask_b32_e32 v5, v13, v14, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v4, v12, 0, vcc
; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[2:3], v[8:9]
+; GFX950-NEXT: v_max_f64 v[8:9], v[0:1], v[6:7]
+; GFX950-NEXT: s_nop 0
+; GFX950-NEXT: v_cndmask_b32_e32 v3, v11, v14, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v2, v10, 0, vcc
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[6:7]
; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v2, v6, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v3, v7, v12, vcc
-; GFX950-NEXT: v_max_f64 v[6:7], v[4:5], v[10:11]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[4:5], v[10:11]
-; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v4, v6, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v5, v7, v12, vcc
+; GFX950-NEXT: v_cndmask_b32_e32 v1, v9, v14, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v0, v8, 0, vcc
; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_maximum_v3f64__nsz:
@@ -1384,13 +1406,21 @@ define <3 x double> @v_maximum_v3f64__nnan_nsz(<3 x double> %src0, <3 x double>
; GFX8-NEXT: v_max_f64 v[4:5], v[4:5], v[10:11]
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
-; GFX9-LABEL: v_maximum_v3f64__nnan_nsz:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f64 v[0:1], v[0:1], v[6:7]
-; GFX9-NEXT: v_max_f64 v[2:3], v[2:3], v[8:9]
-; GFX9-NEXT: v_max_f64 v[4:5], v[4:5], v[10:11]
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: v_maximum_v3f64__nnan_nsz:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: v_max_f64 v[0:1], v[0:1], v[6:7]
+; GFX900-NEXT: v_max_f64 v[2:3], v[2:3], v[8:9]
+; GFX900-NEXT: v_max_f64 v[4:5], v[4:5], v[10:11]
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX950-LABEL: v_maximum_v3f64__nnan_nsz:
+; GFX950: ; %bb.0:
+; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX950-NEXT: v_max_f64 v[4:5], v[4:5], v[10:11]
+; GFX950-NEXT: v_max_f64 v[2:3], v[2:3], v[8:9]
+; GFX950-NEXT: v_max_f64 v[0:1], v[0:1], v[6:7]
+; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_maximum_v3f64__nnan_nsz:
; GFX10: ; %bb.0:
@@ -1501,27 +1531,27 @@ define <4 x double> @v_maximum_v4f64(<4 x double> %src0, <4 x double> %src1) #0
; GFX950-LABEL: v_maximum_v4f64:
; GFX950: ; %bb.0:
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX950-NEXT: v_max_f64 v[16:17], v[0:1], v[8:9]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[8:9]
-; GFX950-NEXT: v_max_f64 v[8:9], v[2:3], v[10:11]
+; GFX950-NEXT: v_max_f64 v[16:17], v[6:7], v[14:15]
+; GFX950-NEXT: v_mov_b32_e32 v18, 0x7ff80000
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[6:7], v[14:15]
+; GFX950-NEXT: v_max_f64 v[14:15], v[4:5], v[12:13]
; GFX950-NEXT: s_nop 0
-; GFX950-NEXT: v_cndmask_b32_e64 v0, v16, 0, vcc
-; GFX950-NEXT: v_mov_b32_e32 v16, 0x7ff80000
-; GFX950-NEXT: v_cndmask_b32_e32 v1, v17, v16, vcc
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[2:3], v[10:11]
-; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v2, v8, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v3, v9, v16, vcc
-; GFX950-NEXT: v_max_f64 v[8:9], v[4:5], v[12:13]
+; GFX950-NEXT: v_cndmask_b32_e32 v7, v17, v18, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v6, v16, 0, vcc
; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[4:5], v[12:13]
+; GFX950-NEXT: v_max_f64 v[12:13], v[2:3], v[10:11]
+; GFX950-NEXT: s_nop 0
+; GFX950-NEXT: v_cndmask_b32_e32 v5, v15, v18, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v4, v14, 0, vcc
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[2:3], v[10:11]
+; GFX950-NEXT: v_max_f64 v[10:11], v[0:1], v[8:9]
+; GFX950-NEXT: s_nop 0
+; GFX950-NEXT: v_cndmask_b32_e32 v3, v13, v18, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v2, v12, 0, vcc
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[8:9]
; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v4, v8, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v5, v9, v16, vcc
-; GFX950-NEXT: v_max_f64 v[8:9], v[6:7], v[14:15]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[6:7], v[14:15]
-; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v6, v8, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v7, v9, v16, vcc
+; GFX950-NEXT: v_cndmask_b32_e32 v1, v11, v18, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v0, v10, 0, vcc
; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_maximum_v4f64:
@@ -1610,14 +1640,23 @@ define <4 x double> @v_maximum_v4f64__nnan(<4 x double> %src0, <4 x double> %src
; GFX8-NEXT: v_max_f64 v[6:7], v[6:7], v[14:15]
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
-; GFX9-LABEL: v_maximum_v4f64__nnan:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f64 v[0:1], v[0:1], v[8:9]
-; GFX9-NEXT: v_max_f64 v[2:3], v[2:3], v[10:11]
-; GFX9-NEXT: v_max_f64 v[4:5], v[4:5], v[12:13]
-; GFX9-NEXT: v_max_f64 v[6:7], v[6:7], v[14:15]
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: v_maximum_v4f64__nnan:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: v_max_f64 v[0:1], v[0:1], v[8:9]
+; GFX900-NEXT: v_max_f64 v[2:3], v[2:3], v[10:11]
+; GFX900-NEXT: v_max_f64 v[4:5], v[4:5], v[12:13]
+; GFX900-NEXT: v_max_f64 v[6:7], v[6:7], v[14:15]
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX950-LABEL: v_maximum_v4f64__nnan:
+; GFX950: ; %bb.0:
+; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX950-NEXT: v_max_f64 v[6:7], v[6:7], v[14:15]
+; GFX950-NEXT: v_max_f64 v[4:5], v[4:5], v[12:13]
+; GFX950-NEXT: v_max_f64 v[2:3], v[2:3], v[10:11]
+; GFX950-NEXT: v_max_f64 v[0:1], v[0:1], v[8:9]
+; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_maximum_v4f64__nnan:
; GFX10: ; %bb.0:
@@ -1732,27 +1771,27 @@ define <4 x double> @v_maximum_v4f64__nsz(<4 x double> %src0, <4 x double> %src1
; GFX950-LABEL: v_maximum_v4f64__nsz:
; GFX950: ; %bb.0:
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX950-NEXT: v_max_f64 v[16:17], v[0:1], v[8:9]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[8:9]
-; GFX950-NEXT: v_max_f64 v[8:9], v[2:3], v[10:11]
+; GFX950-NEXT: v_max_f64 v[16:17], v[6:7], v[14:15]
+; GFX950-NEXT: v_mov_b32_e32 v18, 0x7ff80000
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[6:7], v[14:15]
+; GFX950-NEXT: v_max_f64 v[14:15], v[4:5], v[12:13]
; GFX950-NEXT: s_nop 0
-; GFX950-NEXT: v_cndmask_b32_e64 v0, v16, 0, vcc
-; GFX950-NEXT: v_mov_b32_e32 v16, 0x7ff80000
-; GFX950-NEXT: v_cndmask_b32_e32 v1, v17, v16, vcc
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[2:3], v[10:11]
-; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v2, v8, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v3, v9, v16, vcc
-; GFX950-NEXT: v_max_f64 v[8:9], v[4:5], v[12:13]
+; GFX950-NEXT: v_cndmask_b32_e32 v7, v17, v18, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v6, v16, 0, vcc
; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[4:5], v[12:13]
+; GFX950-NEXT: v_max_f64 v[12:13], v[2:3], v[10:11]
+; GFX950-NEXT: s_nop 0
+; GFX950-NEXT: v_cndmask_b32_e32 v5, v15, v18, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v4, v14, 0, vcc
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[2:3], v[10:11]
+; GFX950-NEXT: v_max_f64 v[10:11], v[0:1], v[8:9]
+; GFX950-NEXT: s_nop 0
+; GFX950-NEXT: v_cndmask_b32_e32 v3, v13, v18, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v2, v12, 0, vcc
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[8:9]
; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v4, v8, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v5, v9, v16, vcc
-; GFX950-NEXT: v_max_f64 v[8:9], v[6:7], v[14:15]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[6:7], v[14:15]
-; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v6, v8, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v7, v9, v16, vcc
+; GFX950-NEXT: v_cndmask_b32_e32 v1, v11, v18, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v0, v10, 0, vcc
; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_maximum_v4f64__nsz:
@@ -1841,14 +1880,23 @@ define <4 x double> @v_maximum_v4f64__nnan_nsz(<4 x double> %src0, <4 x double>
; GFX8-NEXT: v_max_f64 v[6:7], v[6:7], v[14:15]
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
-; GFX9-LABEL: v_maximum_v4f64__nnan_nsz:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f64 v[0:1], v[0:1], v[8:9]
-; GFX9-NEXT: v_max_f64 v[2:3], v[2:3], v[10:11]
-; GFX9-NEXT: v_max_f64 v[4:5], v[4:5], v[12:13]
-; GFX9-NEXT: v_max_f64 v[6:7], v[6:7], v[14:15]
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: v_maximum_v4f64__nnan_nsz:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: v_max_f64 v[0:1], v[0:1], v[8:9]
+; GFX900-NEXT: v_max_f64 v[2:3], v[2:3], v[10:11]
+; GFX900-NEXT: v_max_f64 v[4:5], v[4:5], v[12:13]
+; GFX900-NEXT: v_max_f64 v[6:7], v[6:7], v[14:15]
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX950-LABEL: v_maximum_v4f64__nnan_nsz:
+; GFX950: ; %bb.0:
+; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX950-NEXT: v_max_f64 v[6:7], v[6:7], v[14:15]
+; GFX950-NEXT: v_max_f64 v[4:5], v[4:5], v[12:13]
+; GFX950-NEXT: v_max_f64 v[2:3], v[2:3], v[10:11]
+; GFX950-NEXT: v_max_f64 v[0:1], v[0:1], v[8:9]
+; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_maximum_v4f64__nnan_nsz:
; GFX10: ; %bb.0:
@@ -2019,43 +2067,43 @@ define <8 x double> @v_maximum_v8f64(<8 x double> %src0, <8 x double> %src1) #0
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX950-NEXT: scratch_load_dword v31, off, s32
; GFX950-NEXT: v_mov_b32_e32 v54, 0x7ff80000
-; GFX950-NEXT: v_max_f64 v[32:33], v[0:1], v[16:17]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[16:17]
-; GFX950-NEXT: v_max_f64 v[34:35], v[2:3], v[18:19]
-; GFX950-NEXT: v_max_f64 v[36:37], v[4:5], v[20:21]
-; GFX950-NEXT: v_cndmask_b32_e64 v0, v32, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v1, v33, v54, vcc
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[2:3], v[18:19]
+; GFX950-NEXT: v_max_f64 v[32:33], v[12:13], v[28:29]
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[12:13], v[28:29]
+; GFX950-NEXT: v_max_f64 v[34:35], v[10:11], v[26:27]
+; GFX950-NEXT: v_max_f64 v[36:37], v[8:9], v[24:25]
+; GFX950-NEXT: v_cndmask_b32_e32 v13, v33, v54, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v12, v32, 0, vcc
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[10:11], v[26:27]
; GFX950-NEXT: v_max_f64 v[38:39], v[6:7], v[22:23]
-; GFX950-NEXT: v_max_f64 v[48:49], v[8:9], v[24:25]
-; GFX950-NEXT: v_cndmask_b32_e64 v2, v34, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v3, v35, v54, vcc
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[4:5], v[20:21]
-; GFX950-NEXT: v_max_f64 v[50:51], v[10:11], v[26:27]
-; GFX950-NEXT: v_max_f64 v[52:53], v[12:13], v[28:29]
-; GFX950-NEXT: v_cndmask_b32_e64 v4, v36, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v5, v37, v54, vcc
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[6:7], v[22:23]
-; GFX950-NEXT: s_waitcnt vmcnt(0)
-; GFX950-NEXT: v_max_f64 v[16:17], v[14:15], v[30:31]
-; GFX950-NEXT: v_cndmask_b32_e64 v6, v38, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v7, v39, v54, vcc
+; GFX950-NEXT: v_max_f64 v[48:49], v[4:5], v[20:21]
+; GFX950-NEXT: v_cndmask_b32_e32 v11, v35, v54, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v10, v34, 0, vcc
; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[8:9], v[24:25]
+; GFX950-NEXT: v_max_f64 v[50:51], v[2:3], v[18:19]
+; GFX950-NEXT: v_max_f64 v[52:53], v[0:1], v[16:17]
+; GFX950-NEXT: v_cndmask_b32_e32 v9, v37, v54, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v8, v36, 0, vcc
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[6:7], v[22:23]
; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v8, v48, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v9, v49, v54, vcc
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[10:11], v[26:27]
+; GFX950-NEXT: v_cndmask_b32_e32 v7, v39, v54, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v6, v38, 0, vcc
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[4:5], v[20:21]
; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v10, v50, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v11, v51, v54, vcc
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[12:13], v[28:29]
+; GFX950-NEXT: v_cndmask_b32_e32 v5, v49, v54, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v4, v48, 0, vcc
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[2:3], v[18:19]
; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v12, v52, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v13, v53, v54, vcc
+; GFX950-NEXT: v_cndmask_b32_e32 v3, v51, v54, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v2, v50, 0, vcc
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[16:17]
+; GFX950-NEXT: s_waitcnt vmcnt(0)
+; GFX950-NEXT: v_max_f64 v[16:17], v[14:15], v[30:31]
+; GFX950-NEXT: v_cndmask_b32_e32 v1, v53, v54, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v0, v52, 0, vcc
; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[14:15], v[30:31]
; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v14, v16, 0, vcc
; GFX950-NEXT: v_cndmask_b32_e32 v15, v17, v54, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v14, v16, 0, vcc
; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_maximum_v8f64:
@@ -2535,159 +2583,164 @@ define <16 x double> @v_maximum_v16f64(<16 x double> %src0, <16 x double> %src1)
; GFX950-LABEL: v_maximum_v16f64:
; GFX950: ; %bb.0:
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX950-NEXT: v_accvgpr_write_b32 a0, v40 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_write_b32 a1, v41 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_write_b32 a2, v42 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_write_b32 a3, v43 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_write_b32 a4, v44 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_write_b32 a5, v45 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_write_b32 a6, v46 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_write_b32 a7, v47 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_write_b32 a8, v56 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_write_b32 a9, v57 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_write_b32 a10, v58 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_write_b32 a11, v59 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_write_b32 a12, v60 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_write_b32 a13, v61 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_write_b32 a14, v62 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_write_b32 a15, v63 ; Reload Reuse
-; GFX950-NEXT: scratch_load_dword v35, off, s32 offset:8
-; GFX950-NEXT: scratch_load_dword v34, off, s32 offset:4
-; GFX950-NEXT: scratch_load_dword v37, off, s32 offset:16
-; GFX950-NEXT: scratch_load_dword v36, off, s32 offset:12
-; GFX950-NEXT: scratch_load_dword v39, off, s32 offset:24
-; GFX950-NEXT: scratch_load_dword v38, off, s32 offset:20
-; GFX950-NEXT: scratch_load_dword v57, off, s32 offset:32
-; GFX950-NEXT: scratch_load_dword v56, off, s32 offset:28
-; GFX950-NEXT: scratch_load_dword v47, off, s32 offset:40
-; GFX950-NEXT: scratch_load_dword v46, off, s32 offset:36
-; GFX950-NEXT: scratch_load_dword v45, off, s32 offset:48
-; GFX950-NEXT: scratch_load_dword v44, off, s32 offset:44
-; GFX950-NEXT: scratch_load_dword v43, off, s32 offset:56
-; GFX950-NEXT: scratch_load_dword v42, off, s32 offset:52
-; GFX950-NEXT: scratch_load_dword v41, off, s32 offset:64
-; GFX950-NEXT: scratch_load_dword v40, off, s32 offset:60
-; GFX950-NEXT: scratch_load_dword v55, off, s32 offset:72
-; GFX950-NEXT: scratch_load_dword v54, off, s32 offset:68
-; GFX950-NEXT: scratch_load_dword v53, off, s32 offset:80
-; GFX950-NEXT: scratch_load_dword v52, off, s32 offset:76
-; GFX950-NEXT: scratch_load_dword v51, off, s32 offset:88
-; GFX950-NEXT: scratch_load_dword v50, off, s32 offset:84
-; GFX950-NEXT: scratch_load_dword v49, off, s32 offset:96
-; GFX950-NEXT: scratch_load_dword v48, off, s32 offset:92
+; GFX950-NEXT: v_accvgpr_write_b32 a4, v40 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_write_b32 a5, v41 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_write_b32 a6, v42 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_write_b32 a7, v43 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_write_b32 a8, v44 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_write_b32 a9, v45 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_write_b32 a10, v46 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_write_b32 a11, v47 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_write_b32 a12, v56 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_write_b32 a13, v57 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_write_b32 a14, v58 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_write_b32 a15, v59 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_write_b32 a16, v60 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_write_b32 a17, v61 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_write_b32 a18, v62 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_write_b32 a19, v63 ; Reload Reuse
; GFX950-NEXT: scratch_load_dword v31, off, s32
-; GFX950-NEXT: scratch_load_dword v33, off, s32 offset:104
-; GFX950-NEXT: scratch_load_dword v32, off, s32 offset:100
-; GFX950-NEXT: s_waitcnt vmcnt(25)
-; GFX950-NEXT: v_max_f64 v[58:59], v[0:1], v[34:35]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[34:35]
-; GFX950-NEXT: scratch_load_dword v35, off, s32 offset:112
-; GFX950-NEXT: scratch_load_dword v34, off, s32 offset:108
-; GFX950-NEXT: s_waitcnt vmcnt(25)
-; GFX950-NEXT: v_max_f64 v[60:61], v[2:3], v[36:37]
-; GFX950-NEXT: v_cmp_u_f64_e64 s[0:1], v[2:3], v[36:37]
+; GFX950-NEXT: scratch_load_dword v35, off, s32 offset:128
+; GFX950-NEXT: scratch_load_dword v34, off, s32 offset:124
; GFX950-NEXT: scratch_load_dword v37, off, s32 offset:120
; GFX950-NEXT: scratch_load_dword v36, off, s32 offset:116
-; GFX950-NEXT: s_waitcnt vmcnt(25)
-; GFX950-NEXT: v_max_f64 v[62:63], v[4:5], v[38:39]
-; GFX950-NEXT: v_cmp_u_f64_e64 s[2:3], v[4:5], v[38:39]
-; GFX950-NEXT: scratch_load_dword v39, off, s32 offset:128
-; GFX950-NEXT: scratch_load_dword v38, off, s32 offset:124
-; GFX950-NEXT: s_waitcnt vmcnt(25)
-; GFX950-NEXT: v_max_f64 v[2:3], v[6:7], v[56:57]
-; GFX950-NEXT: v_cmp_u_f64_e64 s[4:5], v[6:7], v[56:57]
-; GFX950-NEXT: v_mov_b32_e32 v56, 0x7ff80000
-; GFX950-NEXT: s_waitcnt vmcnt(23)
-; GFX950-NEXT: v_max_f64 v[0:1], v[8:9], v[46:47]
-; GFX950-NEXT: v_cndmask_b32_e64 v57, v58, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v58, v59, v56, vcc
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[8:9], v[46:47]
-; GFX950-NEXT: v_cndmask_b32_e64 v59, v60, 0, s[0:1]
-; GFX950-NEXT: v_cndmask_b32_e64 v60, v61, v56, s[0:1]
-; GFX950-NEXT: v_cndmask_b32_e64 v8, v0, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v9, v1, v56, vcc
-; GFX950-NEXT: s_waitcnt vmcnt(21)
-; GFX950-NEXT: v_max_f64 v[0:1], v[10:11], v[44:45]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[10:11], v[44:45]
-; GFX950-NEXT: v_cndmask_b32_e64 v4, v62, 0, s[2:3]
-; GFX950-NEXT: v_cndmask_b32_e64 v5, v63, v56, s[2:3]
-; GFX950-NEXT: v_cndmask_b32_e64 v10, v0, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v11, v1, v56, vcc
-; GFX950-NEXT: s_waitcnt vmcnt(19)
-; GFX950-NEXT: v_max_f64 v[0:1], v[12:13], v[42:43]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[12:13], v[42:43]
-; GFX950-NEXT: v_cndmask_b32_e64 v6, v2, 0, s[4:5]
-; GFX950-NEXT: v_cndmask_b32_e64 v7, v3, v56, s[4:5]
-; GFX950-NEXT: v_cndmask_b32_e64 v12, v0, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v13, v1, v56, vcc
-; GFX950-NEXT: s_waitcnt vmcnt(17)
-; GFX950-NEXT: v_max_f64 v[0:1], v[14:15], v[40:41]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[14:15], v[40:41]
-; GFX950-NEXT: v_mov_b32_e32 v2, v59
-; GFX950-NEXT: v_mov_b32_e32 v3, v60
-; GFX950-NEXT: v_cndmask_b32_e64 v14, v0, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v15, v1, v56, vcc
-; GFX950-NEXT: s_waitcnt vmcnt(15)
-; GFX950-NEXT: v_max_f64 v[0:1], v[16:17], v[54:55]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[16:17], v[54:55]
-; GFX950-NEXT: v_accvgpr_read_b32 v63, a15 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_read_b32 v62, a14 ; Reload Reuse
-; GFX950-NEXT: v_cndmask_b32_e64 v16, v0, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v17, v1, v56, vcc
-; GFX950-NEXT: s_waitcnt vmcnt(13)
-; GFX950-NEXT: v_max_f64 v[0:1], v[18:19], v[52:53]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[18:19], v[52:53]
-; GFX950-NEXT: v_accvgpr_read_b32 v61, a13 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_read_b32 v60, a12 ; Reload Reuse
-; GFX950-NEXT: v_cndmask_b32_e64 v18, v0, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v19, v1, v56, vcc
-; GFX950-NEXT: s_waitcnt vmcnt(11)
-; GFX950-NEXT: v_max_f64 v[0:1], v[20:21], v[50:51]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[20:21], v[50:51]
-; GFX950-NEXT: v_accvgpr_read_b32 v59, a11 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_read_b32 v47, a7 ; Reload Reuse
-; GFX950-NEXT: v_cndmask_b32_e64 v20, v0, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v21, v1, v56, vcc
-; GFX950-NEXT: s_waitcnt vmcnt(9)
-; GFX950-NEXT: v_max_f64 v[0:1], v[22:23], v[48:49]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[22:23], v[48:49]
-; GFX950-NEXT: v_accvgpr_read_b32 v46, a6 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_read_b32 v45, a5 ; Reload Reuse
+; GFX950-NEXT: scratch_load_dword v39, off, s32 offset:112
+; GFX950-NEXT: scratch_load_dword v38, off, s32 offset:108
+; GFX950-NEXT: scratch_load_dword v49, off, s32 offset:104
+; GFX950-NEXT: scratch_load_dword v48, off, s32 offset:100
+; GFX950-NEXT: scratch_load_dword v47, off, s32 offset:96
+; GFX950-NEXT: scratch_load_dword v46, off, s32 offset:92
+; GFX950-NEXT: scratch_load_dword v45, off, s32 offset:88
+; GFX950-NEXT: scratch_load_dword v44, off, s32 offset:84
+; GFX950-NEXT: scratch_load_dword v43, off, s32 offset:80
+; GFX950-NEXT: scratch_load_dword v42, off, s32 offset:76
+; GFX950-NEXT: scratch_load_dword v41, off, s32 offset:72
+; GFX950-NEXT: scratch_load_dword v40, off, s32 offset:68
+; GFX950-NEXT: scratch_load_dword v55, off, s32 offset:64
+; GFX950-NEXT: scratch_load_dword v54, off, s32 offset:60
+; GFX950-NEXT: scratch_load_dword v53, off, s32 offset:56
+; GFX950-NEXT: scratch_load_dword v52, off, s32 offset:52
+; GFX950-NEXT: scratch_load_dword v51, off, s32 offset:48
+; GFX950-NEXT: scratch_load_dword v50, off, s32 offset:44
+; GFX950-NEXT: scratch_load_dword v33, off, s32 offset:40
+; GFX950-NEXT: scratch_load_dword v32, off, s32 offset:36
+; GFX950-NEXT: v_accvgpr_write_b32 a2, v2
+; GFX950-NEXT: v_mov_b32_e32 v2, 0x7ff80000
+; GFX950-NEXT: v_accvgpr_write_b32 a1, v1
+; GFX950-NEXT: v_accvgpr_write_b32 a0, v0
+; GFX950-NEXT: v_accvgpr_write_b32 a3, v3
+; GFX950-NEXT: s_waitcnt vmcnt(22)
+; GFX950-NEXT: v_max_f64 v[56:57], v[30:31], v[34:35]
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[30:31], v[34:35]
+; GFX950-NEXT: scratch_load_dword v35, off, s32 offset:32
+; GFX950-NEXT: scratch_load_dword v34, off, s32 offset:28
+; GFX950-NEXT: s_waitcnt vmcnt(22)
+; GFX950-NEXT: v_max_f64 v[60:61], v[28:29], v[36:37]
+; GFX950-NEXT: v_cmp_u_f64_e64 s[0:1], v[28:29], v[36:37]
+; GFX950-NEXT: scratch_load_dword v37, off, s32 offset:24
+; GFX950-NEXT: scratch_load_dword v36, off, s32 offset:20
+; GFX950-NEXT: s_waitcnt vmcnt(22)
+; GFX950-NEXT: v_max_f64 v[62:63], v[26:27], v[38:39]
+; GFX950-NEXT: v_cmp_u_f64_e64 s[2:3], v[26:27], v[38:39]
+; GFX950-NEXT: scratch_load_dword v39, off, s32 offset:16
+; GFX950-NEXT: scratch_load_dword v38, off, s32 offset:12
+; GFX950-NEXT: s_waitcnt vmcnt(22)
+; GFX950-NEXT: v_max_f64 v[58:59], v[24:25], v[48:49]
+; GFX950-NEXT: v_cmp_u_f64_e64 s[4:5], v[24:25], v[48:49]
+; GFX950-NEXT: scratch_load_dword v49, off, s32 offset:8
+; GFX950-NEXT: scratch_load_dword v48, off, s32 offset:4
+; GFX950-NEXT: s_waitcnt vmcnt(22)
+; GFX950-NEXT: v_max_f64 v[0:1], v[22:23], v[46:47]
+; GFX950-NEXT: v_cndmask_b32_e32 v31, v57, v2, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v30, v56, 0, vcc
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[22:23], v[46:47]
+; GFX950-NEXT: v_cndmask_b32_e64 v29, v61, v2, s[0:1]
+; GFX950-NEXT: v_cndmask_b32_e64 v28, v60, 0, s[0:1]
+; GFX950-NEXT: v_cndmask_b32_e32 v23, v1, v2, vcc
; GFX950-NEXT: v_cndmask_b32_e64 v22, v0, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v23, v1, v56, vcc
+; GFX950-NEXT: s_waitcnt vmcnt(20)
+; GFX950-NEXT: v_max_f64 v[0:1], v[20:21], v[44:45]
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[20:21], v[44:45]
+; GFX950-NEXT: v_cndmask_b32_e64 v27, v63, v2, s[2:3]
+; GFX950-NEXT: v_cndmask_b32_e64 v26, v62, 0, s[2:3]
+; GFX950-NEXT: v_cndmask_b32_e32 v21, v1, v2, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v20, v0, 0, vcc
+; GFX950-NEXT: s_waitcnt vmcnt(18)
+; GFX950-NEXT: v_max_f64 v[0:1], v[18:19], v[42:43]
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[18:19], v[42:43]
+; GFX950-NEXT: v_cndmask_b32_e64 v25, v59, v2, s[4:5]
+; GFX950-NEXT: v_cndmask_b32_e64 v24, v58, 0, s[4:5]
+; GFX950-NEXT: v_cndmask_b32_e32 v19, v1, v2, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v18, v0, 0, vcc
+; GFX950-NEXT: s_waitcnt vmcnt(16)
+; GFX950-NEXT: v_max_f64 v[0:1], v[16:17], v[40:41]
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[16:17], v[40:41]
+; GFX950-NEXT: v_accvgpr_read_b32 v63, a19 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_read_b32 v62, a18 ; Reload Reuse
+; GFX950-NEXT: v_cndmask_b32_e32 v17, v1, v2, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v16, v0, 0, vcc
+; GFX950-NEXT: s_waitcnt vmcnt(14)
+; GFX950-NEXT: v_max_f64 v[0:1], v[14:15], v[54:55]
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[14:15], v[54:55]
+; GFX950-NEXT: v_accvgpr_read_b32 v61, a17 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_read_b32 v60, a16 ; Reload Reuse
+; GFX950-NEXT: v_cndmask_b32_e32 v15, v1, v2, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v14, v0, 0, vcc
+; GFX950-NEXT: s_waitcnt vmcnt(12)
+; GFX950-NEXT: v_max_f64 v[0:1], v[12:13], v[52:53]
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[12:13], v[52:53]
+; GFX950-NEXT: v_accvgpr_read_b32 v59, a15 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_read_b32 v58, a14 ; Reload Reuse
+; GFX950-NEXT: v_cndmask_b32_e32 v13, v1, v2, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v12, v0, 0, vcc
+; GFX950-NEXT: s_waitcnt vmcnt(10)
+; GFX950-NEXT: v_max_f64 v[0:1], v[10:11], v[50:51]
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[10:11], v[50:51]
+; GFX950-NEXT: v_accvgpr_read_b32 v57, a13 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_read_b32 v56, a12 ; Reload Reuse
+; GFX950-NEXT: v_cndmask_b32_e32 v11, v1, v2, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v10, v0, 0, vcc
+; GFX950-NEXT: s_waitcnt vmcnt(8)
+; GFX950-NEXT: v_max_f64 v[0:1], v[8:9], v[32:33]
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[8:9], v[32:33]
+; GFX950-NEXT: v_accvgpr_read_b32 v33, a3
+; GFX950-NEXT: v_accvgpr_read_b32 v32, a2
+; GFX950-NEXT: v_cndmask_b32_e32 v9, v1, v2, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v8, v0, 0, vcc
+; GFX950-NEXT: v_accvgpr_read_b32 v47, a11 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_read_b32 v46, a10 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_read_b32 v45, a9 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_read_b32 v44, a8 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_read_b32 v43, a7 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_read_b32 v42, a6 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_read_b32 v41, a5 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_read_b32 v40, a4 ; Reload Reuse
; GFX950-NEXT: s_waitcnt vmcnt(6)
-; GFX950-NEXT: v_max_f64 v[0:1], v[24:25], v[32:33]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[24:25], v[32:33]
-; GFX950-NEXT: v_accvgpr_read_b32 v44, a4 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_read_b32 v43, a3 ; Reload Reuse
-; GFX950-NEXT: v_cndmask_b32_e64 v24, v0, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v25, v1, v56, vcc
-; GFX950-NEXT: v_accvgpr_read_b32 v42, a2 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_read_b32 v41, a1 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_read_b32 v40, a0 ; Reload Reuse
+; GFX950-NEXT: v_max_f64 v[0:1], v[6:7], v[34:35]
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[6:7], v[34:35]
+; GFX950-NEXT: v_accvgpr_read_b32 v35, a1
+; GFX950-NEXT: v_accvgpr_read_b32 v34, a0
+; GFX950-NEXT: v_cndmask_b32_e32 v7, v1, v2, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v6, v0, 0, vcc
; GFX950-NEXT: s_waitcnt vmcnt(4)
-; GFX950-NEXT: v_max_f64 v[0:1], v[26:27], v[34:35]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[26:27], v[34:35]
+; GFX950-NEXT: v_max_f64 v[0:1], v[4:5], v[36:37]
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[4:5], v[36:37]
; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v26, v0, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v27, v1, v56, vcc
+; GFX950-NEXT: v_cndmask_b32_e32 v5, v1, v2, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v4, v0, 0, vcc
; GFX950-NEXT: s_waitcnt vmcnt(2)
-; GFX950-NEXT: v_max_f64 v[0:1], v[28:29], v[36:37]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[28:29], v[36:37]
+; GFX950-NEXT: v_max_f64 v[0:1], v[32:33], v[38:39]
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[32:33], v[38:39]
; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v28, v0, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v29, v1, v56, vcc
+; GFX950-NEXT: v_cndmask_b32_e32 v3, v1, v2, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v32, v0, 0, vcc
; GFX950-NEXT: s_waitcnt vmcnt(0)
-; GFX950-NEXT: v_max_f64 v[0:1], v[30:31], v[38:39]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[30:31], v[38:39]
+; GFX950-NEXT: v_max_f64 v[0:1], v[34:35], v[48:49]
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[34:35], v[48:49]
; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v30, v0, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v31, v1, v56, vcc
-; GFX950-NEXT: v_mov_b32_e32 v0, v57
-; GFX950-NEXT: v_mov_b32_e32 v1, v58
-; GFX950-NEXT: v_accvgpr_read_b32 v58, a10 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_read_b32 v57, a9 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_read_b32 v56, a8 ; Reload Reuse
+; GFX950-NEXT: v_cndmask_b32_e32 v1, v1, v2, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v0, v0, 0, vcc
+; GFX950-NEXT: v_mov_b32_e32 v2, v32
; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_maximum_v16f64:
diff --git a/llvm/test/CodeGen/AMDGPU/llvm.minimum.f64.ll b/llvm/test/CodeGen/AMDGPU/llvm.minimum.f64.ll
index c7e76771769b9..d2d4838b85a39 100644
--- a/llvm/test/CodeGen/AMDGPU/llvm.minimum.f64.ll
+++ b/llvm/test/CodeGen/AMDGPU/llvm.minimum.f64.ll
@@ -610,17 +610,17 @@ define <2 x double> @v_minimum_v2f64(<2 x double> %src0, <2 x double> %src1) #0
; GFX950-LABEL: v_minimum_v2f64:
; GFX950: ; %bb.0:
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX950-NEXT: v_min_f64 v[8:9], v[0:1], v[4:5]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[4:5]
-; GFX950-NEXT: v_min_f64 v[4:5], v[2:3], v[6:7]
-; GFX950-NEXT: s_nop 0
-; GFX950-NEXT: v_cndmask_b32_e64 v0, v8, 0, vcc
-; GFX950-NEXT: v_mov_b32_e32 v8, 0x7ff80000
-; GFX950-NEXT: v_cndmask_b32_e32 v1, v9, v8, vcc
+; GFX950-NEXT: v_min_f64 v[8:9], v[2:3], v[6:7]
+; GFX950-NEXT: v_mov_b32_e32 v10, 0x7ff80000
; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[2:3], v[6:7]
+; GFX950-NEXT: v_min_f64 v[6:7], v[0:1], v[4:5]
+; GFX950-NEXT: s_nop 0
+; GFX950-NEXT: v_cndmask_b32_e32 v3, v9, v10, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v2, v8, 0, vcc
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[4:5]
; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v2, v4, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v3, v5, v8, vcc
+; GFX950-NEXT: v_cndmask_b32_e32 v1, v7, v10, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v0, v6, 0, vcc
; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_minimum_v2f64:
@@ -686,12 +686,19 @@ define <2 x double> @v_minimum_v2f64__nnan(<2 x double> %src0, <2 x double> %src
; GFX8-NEXT: v_min_f64 v[2:3], v[2:3], v[6:7]
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
-; GFX9-LABEL: v_minimum_v2f64__nnan:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_min_f64 v[0:1], v[0:1], v[4:5]
-; GFX9-NEXT: v_min_f64 v[2:3], v[2:3], v[6:7]
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: v_minimum_v2f64__nnan:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: v_min_f64 v[0:1], v[0:1], v[4:5]
+; GFX900-NEXT: v_min_f64 v[2:3], v[2:3], v[6:7]
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX950-LABEL: v_minimum_v2f64__nnan:
+; GFX950: ; %bb.0:
+; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX950-NEXT: v_min_f64 v[2:3], v[2:3], v[6:7]
+; GFX950-NEXT: v_min_f64 v[0:1], v[0:1], v[4:5]
+; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_minimum_v2f64__nnan:
; GFX10: ; %bb.0:
@@ -774,17 +781,17 @@ define <2 x double> @v_minimum_v2f64__nsz(<2 x double> %src0, <2 x double> %src1
; GFX950-LABEL: v_minimum_v2f64__nsz:
; GFX950: ; %bb.0:
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX950-NEXT: v_min_f64 v[8:9], v[0:1], v[4:5]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[4:5]
-; GFX950-NEXT: v_min_f64 v[4:5], v[2:3], v[6:7]
-; GFX950-NEXT: s_nop 0
-; GFX950-NEXT: v_cndmask_b32_e64 v0, v8, 0, vcc
-; GFX950-NEXT: v_mov_b32_e32 v8, 0x7ff80000
-; GFX950-NEXT: v_cndmask_b32_e32 v1, v9, v8, vcc
+; GFX950-NEXT: v_min_f64 v[8:9], v[2:3], v[6:7]
+; GFX950-NEXT: v_mov_b32_e32 v10, 0x7ff80000
; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[2:3], v[6:7]
+; GFX950-NEXT: v_min_f64 v[6:7], v[0:1], v[4:5]
+; GFX950-NEXT: s_nop 0
+; GFX950-NEXT: v_cndmask_b32_e32 v3, v9, v10, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v2, v8, 0, vcc
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[4:5]
; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v2, v4, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v3, v5, v8, vcc
+; GFX950-NEXT: v_cndmask_b32_e32 v1, v7, v10, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v0, v6, 0, vcc
; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_minimum_v2f64__nsz:
@@ -850,12 +857,19 @@ define <2 x double> @v_minimum_v2f64__nnan_nsz(<2 x double> %src0, <2 x double>
; GFX8-NEXT: v_min_f64 v[2:3], v[2:3], v[6:7]
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
-; GFX9-LABEL: v_minimum_v2f64__nnan_nsz:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_min_f64 v[0:1], v[0:1], v[4:5]
-; GFX9-NEXT: v_min_f64 v[2:3], v[2:3], v[6:7]
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: v_minimum_v2f64__nnan_nsz:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: v_min_f64 v[0:1], v[0:1], v[4:5]
+; GFX900-NEXT: v_min_f64 v[2:3], v[2:3], v[6:7]
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX950-LABEL: v_minimum_v2f64__nnan_nsz:
+; GFX950: ; %bb.0:
+; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX950-NEXT: v_min_f64 v[2:3], v[2:3], v[6:7]
+; GFX950-NEXT: v_min_f64 v[0:1], v[0:1], v[4:5]
+; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_minimum_v2f64__nnan_nsz:
; GFX10: ; %bb.0:
@@ -1095,22 +1109,22 @@ define <3 x double> @v_minimum_v3f64(<3 x double> %src0, <3 x double> %src1) #0
; GFX950-LABEL: v_minimum_v3f64:
; GFX950: ; %bb.0:
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX950-NEXT: v_min_f64 v[12:13], v[0:1], v[6:7]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[6:7]
-; GFX950-NEXT: v_min_f64 v[6:7], v[2:3], v[8:9]
+; GFX950-NEXT: v_min_f64 v[12:13], v[4:5], v[10:11]
+; GFX950-NEXT: v_mov_b32_e32 v14, 0x7ff80000
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[4:5], v[10:11]
+; GFX950-NEXT: v_min_f64 v[10:11], v[2:3], v[8:9]
; GFX950-NEXT: s_nop 0
-; GFX950-NEXT: v_cndmask_b32_e64 v0, v12, 0, vcc
-; GFX950-NEXT: v_mov_b32_e32 v12, 0x7ff80000
-; GFX950-NEXT: v_cndmask_b32_e32 v1, v13, v12, vcc
+; GFX950-NEXT: v_cndmask_b32_e32 v5, v13, v14, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v4, v12, 0, vcc
; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[2:3], v[8:9]
+; GFX950-NEXT: v_min_f64 v[8:9], v[0:1], v[6:7]
+; GFX950-NEXT: s_nop 0
+; GFX950-NEXT: v_cndmask_b32_e32 v3, v11, v14, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v2, v10, 0, vcc
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[6:7]
; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v2, v6, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v3, v7, v12, vcc
-; GFX950-NEXT: v_min_f64 v[6:7], v[4:5], v[10:11]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[4:5], v[10:11]
-; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v4, v6, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v5, v7, v12, vcc
+; GFX950-NEXT: v_cndmask_b32_e32 v1, v9, v14, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v0, v8, 0, vcc
; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_minimum_v3f64:
@@ -1187,13 +1201,21 @@ define <3 x double> @v_minimum_v3f64__nnan(<3 x double> %src0, <3 x double> %src
; GFX8-NEXT: v_min_f64 v[4:5], v[4:5], v[10:11]
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
-; GFX9-LABEL: v_minimum_v3f64__nnan:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_min_f64 v[0:1], v[0:1], v[6:7]
-; GFX9-NEXT: v_min_f64 v[2:3], v[2:3], v[8:9]
-; GFX9-NEXT: v_min_f64 v[4:5], v[4:5], v[10:11]
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: v_minimum_v3f64__nnan:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: v_min_f64 v[0:1], v[0:1], v[6:7]
+; GFX900-NEXT: v_min_f64 v[2:3], v[2:3], v[8:9]
+; GFX900-NEXT: v_min_f64 v[4:5], v[4:5], v[10:11]
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX950-LABEL: v_minimum_v3f64__nnan:
+; GFX950: ; %bb.0:
+; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX950-NEXT: v_min_f64 v[4:5], v[4:5], v[10:11]
+; GFX950-NEXT: v_min_f64 v[2:3], v[2:3], v[8:9]
+; GFX950-NEXT: v_min_f64 v[0:1], v[0:1], v[6:7]
+; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_minimum_v3f64__nnan:
; GFX10: ; %bb.0:
@@ -1292,22 +1314,22 @@ define <3 x double> @v_minimum_v3f64__nsz(<3 x double> %src0, <3 x double> %src1
; GFX950-LABEL: v_minimum_v3f64__nsz:
; GFX950: ; %bb.0:
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX950-NEXT: v_min_f64 v[12:13], v[0:1], v[6:7]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[6:7]
-; GFX950-NEXT: v_min_f64 v[6:7], v[2:3], v[8:9]
+; GFX950-NEXT: v_min_f64 v[12:13], v[4:5], v[10:11]
+; GFX950-NEXT: v_mov_b32_e32 v14, 0x7ff80000
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[4:5], v[10:11]
+; GFX950-NEXT: v_min_f64 v[10:11], v[2:3], v[8:9]
; GFX950-NEXT: s_nop 0
-; GFX950-NEXT: v_cndmask_b32_e64 v0, v12, 0, vcc
-; GFX950-NEXT: v_mov_b32_e32 v12, 0x7ff80000
-; GFX950-NEXT: v_cndmask_b32_e32 v1, v13, v12, vcc
+; GFX950-NEXT: v_cndmask_b32_e32 v5, v13, v14, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v4, v12, 0, vcc
; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[2:3], v[8:9]
+; GFX950-NEXT: v_min_f64 v[8:9], v[0:1], v[6:7]
+; GFX950-NEXT: s_nop 0
+; GFX950-NEXT: v_cndmask_b32_e32 v3, v11, v14, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v2, v10, 0, vcc
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[6:7]
; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v2, v6, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v3, v7, v12, vcc
-; GFX950-NEXT: v_min_f64 v[6:7], v[4:5], v[10:11]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[4:5], v[10:11]
-; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v4, v6, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v5, v7, v12, vcc
+; GFX950-NEXT: v_cndmask_b32_e32 v1, v9, v14, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v0, v8, 0, vcc
; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_minimum_v3f64__nsz:
@@ -1384,13 +1406,21 @@ define <3 x double> @v_minimum_v3f64__nnan_nsz(<3 x double> %src0, <3 x double>
; GFX8-NEXT: v_min_f64 v[4:5], v[4:5], v[10:11]
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
-; GFX9-LABEL: v_minimum_v3f64__nnan_nsz:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_min_f64 v[0:1], v[0:1], v[6:7]
-; GFX9-NEXT: v_min_f64 v[2:3], v[2:3], v[8:9]
-; GFX9-NEXT: v_min_f64 v[4:5], v[4:5], v[10:11]
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: v_minimum_v3f64__nnan_nsz:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: v_min_f64 v[0:1], v[0:1], v[6:7]
+; GFX900-NEXT: v_min_f64 v[2:3], v[2:3], v[8:9]
+; GFX900-NEXT: v_min_f64 v[4:5], v[4:5], v[10:11]
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX950-LABEL: v_minimum_v3f64__nnan_nsz:
+; GFX950: ; %bb.0:
+; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX950-NEXT: v_min_f64 v[4:5], v[4:5], v[10:11]
+; GFX950-NEXT: v_min_f64 v[2:3], v[2:3], v[8:9]
+; GFX950-NEXT: v_min_f64 v[0:1], v[0:1], v[6:7]
+; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_minimum_v3f64__nnan_nsz:
; GFX10: ; %bb.0:
@@ -1501,27 +1531,27 @@ define <4 x double> @v_minimum_v4f64(<4 x double> %src0, <4 x double> %src1) #0
; GFX950-LABEL: v_minimum_v4f64:
; GFX950: ; %bb.0:
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX950-NEXT: v_min_f64 v[16:17], v[0:1], v[8:9]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[8:9]
-; GFX950-NEXT: v_min_f64 v[8:9], v[2:3], v[10:11]
+; GFX950-NEXT: v_min_f64 v[16:17], v[6:7], v[14:15]
+; GFX950-NEXT: v_mov_b32_e32 v18, 0x7ff80000
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[6:7], v[14:15]
+; GFX950-NEXT: v_min_f64 v[14:15], v[4:5], v[12:13]
; GFX950-NEXT: s_nop 0
-; GFX950-NEXT: v_cndmask_b32_e64 v0, v16, 0, vcc
-; GFX950-NEXT: v_mov_b32_e32 v16, 0x7ff80000
-; GFX950-NEXT: v_cndmask_b32_e32 v1, v17, v16, vcc
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[2:3], v[10:11]
-; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v2, v8, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v3, v9, v16, vcc
-; GFX950-NEXT: v_min_f64 v[8:9], v[4:5], v[12:13]
+; GFX950-NEXT: v_cndmask_b32_e32 v7, v17, v18, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v6, v16, 0, vcc
; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[4:5], v[12:13]
+; GFX950-NEXT: v_min_f64 v[12:13], v[2:3], v[10:11]
+; GFX950-NEXT: s_nop 0
+; GFX950-NEXT: v_cndmask_b32_e32 v5, v15, v18, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v4, v14, 0, vcc
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[2:3], v[10:11]
+; GFX950-NEXT: v_min_f64 v[10:11], v[0:1], v[8:9]
+; GFX950-NEXT: s_nop 0
+; GFX950-NEXT: v_cndmask_b32_e32 v3, v13, v18, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v2, v12, 0, vcc
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[8:9]
; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v4, v8, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v5, v9, v16, vcc
-; GFX950-NEXT: v_min_f64 v[8:9], v[6:7], v[14:15]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[6:7], v[14:15]
-; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v6, v8, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v7, v9, v16, vcc
+; GFX950-NEXT: v_cndmask_b32_e32 v1, v11, v18, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v0, v10, 0, vcc
; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_minimum_v4f64:
@@ -1610,14 +1640,23 @@ define <4 x double> @v_minimum_v4f64__nnan(<4 x double> %src0, <4 x double> %src
; GFX8-NEXT: v_min_f64 v[6:7], v[6:7], v[14:15]
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
-; GFX9-LABEL: v_minimum_v4f64__nnan:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_min_f64 v[0:1], v[0:1], v[8:9]
-; GFX9-NEXT: v_min_f64 v[2:3], v[2:3], v[10:11]
-; GFX9-NEXT: v_min_f64 v[4:5], v[4:5], v[12:13]
-; GFX9-NEXT: v_min_f64 v[6:7], v[6:7], v[14:15]
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: v_minimum_v4f64__nnan:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: v_min_f64 v[0:1], v[0:1], v[8:9]
+; GFX900-NEXT: v_min_f64 v[2:3], v[2:3], v[10:11]
+; GFX900-NEXT: v_min_f64 v[4:5], v[4:5], v[12:13]
+; GFX900-NEXT: v_min_f64 v[6:7], v[6:7], v[14:15]
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX950-LABEL: v_minimum_v4f64__nnan:
+; GFX950: ; %bb.0:
+; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX950-NEXT: v_min_f64 v[6:7], v[6:7], v[14:15]
+; GFX950-NEXT: v_min_f64 v[4:5], v[4:5], v[12:13]
+; GFX950-NEXT: v_min_f64 v[2:3], v[2:3], v[10:11]
+; GFX950-NEXT: v_min_f64 v[0:1], v[0:1], v[8:9]
+; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_minimum_v4f64__nnan:
; GFX10: ; %bb.0:
@@ -1732,27 +1771,27 @@ define <4 x double> @v_minimum_v4f64__nsz(<4 x double> %src0, <4 x double> %src1
; GFX950-LABEL: v_minimum_v4f64__nsz:
; GFX950: ; %bb.0:
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX950-NEXT: v_min_f64 v[16:17], v[0:1], v[8:9]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[8:9]
-; GFX950-NEXT: v_min_f64 v[8:9], v[2:3], v[10:11]
+; GFX950-NEXT: v_min_f64 v[16:17], v[6:7], v[14:15]
+; GFX950-NEXT: v_mov_b32_e32 v18, 0x7ff80000
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[6:7], v[14:15]
+; GFX950-NEXT: v_min_f64 v[14:15], v[4:5], v[12:13]
; GFX950-NEXT: s_nop 0
-; GFX950-NEXT: v_cndmask_b32_e64 v0, v16, 0, vcc
-; GFX950-NEXT: v_mov_b32_e32 v16, 0x7ff80000
-; GFX950-NEXT: v_cndmask_b32_e32 v1, v17, v16, vcc
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[2:3], v[10:11]
-; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v2, v8, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v3, v9, v16, vcc
-; GFX950-NEXT: v_min_f64 v[8:9], v[4:5], v[12:13]
+; GFX950-NEXT: v_cndmask_b32_e32 v7, v17, v18, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v6, v16, 0, vcc
; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[4:5], v[12:13]
+; GFX950-NEXT: v_min_f64 v[12:13], v[2:3], v[10:11]
+; GFX950-NEXT: s_nop 0
+; GFX950-NEXT: v_cndmask_b32_e32 v5, v15, v18, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v4, v14, 0, vcc
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[2:3], v[10:11]
+; GFX950-NEXT: v_min_f64 v[10:11], v[0:1], v[8:9]
+; GFX950-NEXT: s_nop 0
+; GFX950-NEXT: v_cndmask_b32_e32 v3, v13, v18, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v2, v12, 0, vcc
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[8:9]
; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v4, v8, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v5, v9, v16, vcc
-; GFX950-NEXT: v_min_f64 v[8:9], v[6:7], v[14:15]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[6:7], v[14:15]
-; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v6, v8, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v7, v9, v16, vcc
+; GFX950-NEXT: v_cndmask_b32_e32 v1, v11, v18, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v0, v10, 0, vcc
; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_minimum_v4f64__nsz:
@@ -1841,14 +1880,23 @@ define <4 x double> @v_minimum_v4f64__nnan_nsz(<4 x double> %src0, <4 x double>
; GFX8-NEXT: v_min_f64 v[6:7], v[6:7], v[14:15]
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
-; GFX9-LABEL: v_minimum_v4f64__nnan_nsz:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_min_f64 v[0:1], v[0:1], v[8:9]
-; GFX9-NEXT: v_min_f64 v[2:3], v[2:3], v[10:11]
-; GFX9-NEXT: v_min_f64 v[4:5], v[4:5], v[12:13]
-; GFX9-NEXT: v_min_f64 v[6:7], v[6:7], v[14:15]
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: v_minimum_v4f64__nnan_nsz:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: v_min_f64 v[0:1], v[0:1], v[8:9]
+; GFX900-NEXT: v_min_f64 v[2:3], v[2:3], v[10:11]
+; GFX900-NEXT: v_min_f64 v[4:5], v[4:5], v[12:13]
+; GFX900-NEXT: v_min_f64 v[6:7], v[6:7], v[14:15]
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX950-LABEL: v_minimum_v4f64__nnan_nsz:
+; GFX950: ; %bb.0:
+; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX950-NEXT: v_min_f64 v[6:7], v[6:7], v[14:15]
+; GFX950-NEXT: v_min_f64 v[4:5], v[4:5], v[12:13]
+; GFX950-NEXT: v_min_f64 v[2:3], v[2:3], v[10:11]
+; GFX950-NEXT: v_min_f64 v[0:1], v[0:1], v[8:9]
+; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_minimum_v4f64__nnan_nsz:
; GFX10: ; %bb.0:
@@ -2019,43 +2067,43 @@ define <8 x double> @v_minimum_v8f64(<8 x double> %src0, <8 x double> %src1) #0
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX950-NEXT: scratch_load_dword v31, off, s32
; GFX950-NEXT: v_mov_b32_e32 v54, 0x7ff80000
-; GFX950-NEXT: v_min_f64 v[32:33], v[0:1], v[16:17]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[16:17]
-; GFX950-NEXT: v_min_f64 v[34:35], v[2:3], v[18:19]
-; GFX950-NEXT: v_min_f64 v[36:37], v[4:5], v[20:21]
-; GFX950-NEXT: v_cndmask_b32_e64 v0, v32, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v1, v33, v54, vcc
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[2:3], v[18:19]
+; GFX950-NEXT: v_min_f64 v[32:33], v[12:13], v[28:29]
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[12:13], v[28:29]
+; GFX950-NEXT: v_min_f64 v[34:35], v[10:11], v[26:27]
+; GFX950-NEXT: v_min_f64 v[36:37], v[8:9], v[24:25]
+; GFX950-NEXT: v_cndmask_b32_e32 v13, v33, v54, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v12, v32, 0, vcc
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[10:11], v[26:27]
; GFX950-NEXT: v_min_f64 v[38:39], v[6:7], v[22:23]
-; GFX950-NEXT: v_min_f64 v[48:49], v[8:9], v[24:25]
-; GFX950-NEXT: v_cndmask_b32_e64 v2, v34, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v3, v35, v54, vcc
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[4:5], v[20:21]
-; GFX950-NEXT: v_min_f64 v[50:51], v[10:11], v[26:27]
-; GFX950-NEXT: v_min_f64 v[52:53], v[12:13], v[28:29]
-; GFX950-NEXT: v_cndmask_b32_e64 v4, v36, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v5, v37, v54, vcc
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[6:7], v[22:23]
-; GFX950-NEXT: s_waitcnt vmcnt(0)
-; GFX950-NEXT: v_min_f64 v[16:17], v[14:15], v[30:31]
-; GFX950-NEXT: v_cndmask_b32_e64 v6, v38, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v7, v39, v54, vcc
+; GFX950-NEXT: v_min_f64 v[48:49], v[4:5], v[20:21]
+; GFX950-NEXT: v_cndmask_b32_e32 v11, v35, v54, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v10, v34, 0, vcc
; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[8:9], v[24:25]
+; GFX950-NEXT: v_min_f64 v[50:51], v[2:3], v[18:19]
+; GFX950-NEXT: v_min_f64 v[52:53], v[0:1], v[16:17]
+; GFX950-NEXT: v_cndmask_b32_e32 v9, v37, v54, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v8, v36, 0, vcc
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[6:7], v[22:23]
; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v8, v48, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v9, v49, v54, vcc
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[10:11], v[26:27]
+; GFX950-NEXT: v_cndmask_b32_e32 v7, v39, v54, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v6, v38, 0, vcc
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[4:5], v[20:21]
; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v10, v50, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v11, v51, v54, vcc
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[12:13], v[28:29]
+; GFX950-NEXT: v_cndmask_b32_e32 v5, v49, v54, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v4, v48, 0, vcc
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[2:3], v[18:19]
; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v12, v52, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v13, v53, v54, vcc
+; GFX950-NEXT: v_cndmask_b32_e32 v3, v51, v54, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v2, v50, 0, vcc
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[16:17]
+; GFX950-NEXT: s_waitcnt vmcnt(0)
+; GFX950-NEXT: v_min_f64 v[16:17], v[14:15], v[30:31]
+; GFX950-NEXT: v_cndmask_b32_e32 v1, v53, v54, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v0, v52, 0, vcc
; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[14:15], v[30:31]
; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v14, v16, 0, vcc
; GFX950-NEXT: v_cndmask_b32_e32 v15, v17, v54, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v14, v16, 0, vcc
; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_minimum_v8f64:
@@ -2535,159 +2583,164 @@ define <16 x double> @v_minimum_v16f64(<16 x double> %src0, <16 x double> %src1)
; GFX950-LABEL: v_minimum_v16f64:
; GFX950: ; %bb.0:
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX950-NEXT: v_accvgpr_write_b32 a0, v40 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_write_b32 a1, v41 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_write_b32 a2, v42 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_write_b32 a3, v43 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_write_b32 a4, v44 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_write_b32 a5, v45 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_write_b32 a6, v46 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_write_b32 a7, v47 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_write_b32 a8, v56 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_write_b32 a9, v57 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_write_b32 a10, v58 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_write_b32 a11, v59 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_write_b32 a12, v60 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_write_b32 a13, v61 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_write_b32 a14, v62 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_write_b32 a15, v63 ; Reload Reuse
-; GFX950-NEXT: scratch_load_dword v35, off, s32 offset:8
-; GFX950-NEXT: scratch_load_dword v34, off, s32 offset:4
-; GFX950-NEXT: scratch_load_dword v37, off, s32 offset:16
-; GFX950-NEXT: scratch_load_dword v36, off, s32 offset:12
-; GFX950-NEXT: scratch_load_dword v39, off, s32 offset:24
-; GFX950-NEXT: scratch_load_dword v38, off, s32 offset:20
-; GFX950-NEXT: scratch_load_dword v57, off, s32 offset:32
-; GFX950-NEXT: scratch_load_dword v56, off, s32 offset:28
-; GFX950-NEXT: scratch_load_dword v47, off, s32 offset:40
-; GFX950-NEXT: scratch_load_dword v46, off, s32 offset:36
-; GFX950-NEXT: scratch_load_dword v45, off, s32 offset:48
-; GFX950-NEXT: scratch_load_dword v44, off, s32 offset:44
-; GFX950-NEXT: scratch_load_dword v43, off, s32 offset:56
-; GFX950-NEXT: scratch_load_dword v42, off, s32 offset:52
-; GFX950-NEXT: scratch_load_dword v41, off, s32 offset:64
-; GFX950-NEXT: scratch_load_dword v40, off, s32 offset:60
-; GFX950-NEXT: scratch_load_dword v55, off, s32 offset:72
-; GFX950-NEXT: scratch_load_dword v54, off, s32 offset:68
-; GFX950-NEXT: scratch_load_dword v53, off, s32 offset:80
-; GFX950-NEXT: scratch_load_dword v52, off, s32 offset:76
-; GFX950-NEXT: scratch_load_dword v51, off, s32 offset:88
-; GFX950-NEXT: scratch_load_dword v50, off, s32 offset:84
-; GFX950-NEXT: scratch_load_dword v49, off, s32 offset:96
-; GFX950-NEXT: scratch_load_dword v48, off, s32 offset:92
+; GFX950-NEXT: v_accvgpr_write_b32 a4, v40 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_write_b32 a5, v41 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_write_b32 a6, v42 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_write_b32 a7, v43 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_write_b32 a8, v44 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_write_b32 a9, v45 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_write_b32 a10, v46 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_write_b32 a11, v47 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_write_b32 a12, v56 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_write_b32 a13, v57 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_write_b32 a14, v58 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_write_b32 a15, v59 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_write_b32 a16, v60 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_write_b32 a17, v61 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_write_b32 a18, v62 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_write_b32 a19, v63 ; Reload Reuse
; GFX950-NEXT: scratch_load_dword v31, off, s32
-; GFX950-NEXT: scratch_load_dword v33, off, s32 offset:104
-; GFX950-NEXT: scratch_load_dword v32, off, s32 offset:100
-; GFX950-NEXT: s_waitcnt vmcnt(25)
-; GFX950-NEXT: v_min_f64 v[58:59], v[0:1], v[34:35]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[34:35]
-; GFX950-NEXT: scratch_load_dword v35, off, s32 offset:112
-; GFX950-NEXT: scratch_load_dword v34, off, s32 offset:108
-; GFX950-NEXT: s_waitcnt vmcnt(25)
-; GFX950-NEXT: v_min_f64 v[60:61], v[2:3], v[36:37]
-; GFX950-NEXT: v_cmp_u_f64_e64 s[0:1], v[2:3], v[36:37]
+; GFX950-NEXT: scratch_load_dword v35, off, s32 offset:128
+; GFX950-NEXT: scratch_load_dword v34, off, s32 offset:124
; GFX950-NEXT: scratch_load_dword v37, off, s32 offset:120
; GFX950-NEXT: scratch_load_dword v36, off, s32 offset:116
-; GFX950-NEXT: s_waitcnt vmcnt(25)
-; GFX950-NEXT: v_min_f64 v[62:63], v[4:5], v[38:39]
-; GFX950-NEXT: v_cmp_u_f64_e64 s[2:3], v[4:5], v[38:39]
-; GFX950-NEXT: scratch_load_dword v39, off, s32 offset:128
-; GFX950-NEXT: scratch_load_dword v38, off, s32 offset:124
-; GFX950-NEXT: s_waitcnt vmcnt(25)
-; GFX950-NEXT: v_min_f64 v[2:3], v[6:7], v[56:57]
-; GFX950-NEXT: v_cmp_u_f64_e64 s[4:5], v[6:7], v[56:57]
-; GFX950-NEXT: v_mov_b32_e32 v56, 0x7ff80000
-; GFX950-NEXT: s_waitcnt vmcnt(23)
-; GFX950-NEXT: v_min_f64 v[0:1], v[8:9], v[46:47]
-; GFX950-NEXT: v_cndmask_b32_e64 v57, v58, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v58, v59, v56, vcc
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[8:9], v[46:47]
-; GFX950-NEXT: v_cndmask_b32_e64 v59, v60, 0, s[0:1]
-; GFX950-NEXT: v_cndmask_b32_e64 v60, v61, v56, s[0:1]
-; GFX950-NEXT: v_cndmask_b32_e64 v8, v0, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v9, v1, v56, vcc
-; GFX950-NEXT: s_waitcnt vmcnt(21)
-; GFX950-NEXT: v_min_f64 v[0:1], v[10:11], v[44:45]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[10:11], v[44:45]
-; GFX950-NEXT: v_cndmask_b32_e64 v4, v62, 0, s[2:3]
-; GFX950-NEXT: v_cndmask_b32_e64 v5, v63, v56, s[2:3]
-; GFX950-NEXT: v_cndmask_b32_e64 v10, v0, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v11, v1, v56, vcc
-; GFX950-NEXT: s_waitcnt vmcnt(19)
-; GFX950-NEXT: v_min_f64 v[0:1], v[12:13], v[42:43]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[12:13], v[42:43]
-; GFX950-NEXT: v_cndmask_b32_e64 v6, v2, 0, s[4:5]
-; GFX950-NEXT: v_cndmask_b32_e64 v7, v3, v56, s[4:5]
-; GFX950-NEXT: v_cndmask_b32_e64 v12, v0, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v13, v1, v56, vcc
-; GFX950-NEXT: s_waitcnt vmcnt(17)
-; GFX950-NEXT: v_min_f64 v[0:1], v[14:15], v[40:41]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[14:15], v[40:41]
-; GFX950-NEXT: v_mov_b32_e32 v2, v59
-; GFX950-NEXT: v_mov_b32_e32 v3, v60
-; GFX950-NEXT: v_cndmask_b32_e64 v14, v0, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v15, v1, v56, vcc
-; GFX950-NEXT: s_waitcnt vmcnt(15)
-; GFX950-NEXT: v_min_f64 v[0:1], v[16:17], v[54:55]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[16:17], v[54:55]
-; GFX950-NEXT: v_accvgpr_read_b32 v63, a15 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_read_b32 v62, a14 ; Reload Reuse
-; GFX950-NEXT: v_cndmask_b32_e64 v16, v0, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v17, v1, v56, vcc
-; GFX950-NEXT: s_waitcnt vmcnt(13)
-; GFX950-NEXT: v_min_f64 v[0:1], v[18:19], v[52:53]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[18:19], v[52:53]
-; GFX950-NEXT: v_accvgpr_read_b32 v61, a13 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_read_b32 v60, a12 ; Reload Reuse
-; GFX950-NEXT: v_cndmask_b32_e64 v18, v0, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v19, v1, v56, vcc
-; GFX950-NEXT: s_waitcnt vmcnt(11)
-; GFX950-NEXT: v_min_f64 v[0:1], v[20:21], v[50:51]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[20:21], v[50:51]
-; GFX950-NEXT: v_accvgpr_read_b32 v59, a11 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_read_b32 v47, a7 ; Reload Reuse
-; GFX950-NEXT: v_cndmask_b32_e64 v20, v0, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v21, v1, v56, vcc
-; GFX950-NEXT: s_waitcnt vmcnt(9)
-; GFX950-NEXT: v_min_f64 v[0:1], v[22:23], v[48:49]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[22:23], v[48:49]
-; GFX950-NEXT: v_accvgpr_read_b32 v46, a6 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_read_b32 v45, a5 ; Reload Reuse
+; GFX950-NEXT: scratch_load_dword v39, off, s32 offset:112
+; GFX950-NEXT: scratch_load_dword v38, off, s32 offset:108
+; GFX950-NEXT: scratch_load_dword v49, off, s32 offset:104
+; GFX950-NEXT: scratch_load_dword v48, off, s32 offset:100
+; GFX950-NEXT: scratch_load_dword v47, off, s32 offset:96
+; GFX950-NEXT: scratch_load_dword v46, off, s32 offset:92
+; GFX950-NEXT: scratch_load_dword v45, off, s32 offset:88
+; GFX950-NEXT: scratch_load_dword v44, off, s32 offset:84
+; GFX950-NEXT: scratch_load_dword v43, off, s32 offset:80
+; GFX950-NEXT: scratch_load_dword v42, off, s32 offset:76
+; GFX950-NEXT: scratch_load_dword v41, off, s32 offset:72
+; GFX950-NEXT: scratch_load_dword v40, off, s32 offset:68
+; GFX950-NEXT: scratch_load_dword v55, off, s32 offset:64
+; GFX950-NEXT: scratch_load_dword v54, off, s32 offset:60
+; GFX950-NEXT: scratch_load_dword v53, off, s32 offset:56
+; GFX950-NEXT: scratch_load_dword v52, off, s32 offset:52
+; GFX950-NEXT: scratch_load_dword v51, off, s32 offset:48
+; GFX950-NEXT: scratch_load_dword v50, off, s32 offset:44
+; GFX950-NEXT: scratch_load_dword v33, off, s32 offset:40
+; GFX950-NEXT: scratch_load_dword v32, off, s32 offset:36
+; GFX950-NEXT: v_accvgpr_write_b32 a2, v2
+; GFX950-NEXT: v_mov_b32_e32 v2, 0x7ff80000
+; GFX950-NEXT: v_accvgpr_write_b32 a1, v1
+; GFX950-NEXT: v_accvgpr_write_b32 a0, v0
+; GFX950-NEXT: v_accvgpr_write_b32 a3, v3
+; GFX950-NEXT: s_waitcnt vmcnt(22)
+; GFX950-NEXT: v_min_f64 v[56:57], v[30:31], v[34:35]
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[30:31], v[34:35]
+; GFX950-NEXT: scratch_load_dword v35, off, s32 offset:32
+; GFX950-NEXT: scratch_load_dword v34, off, s32 offset:28
+; GFX950-NEXT: s_waitcnt vmcnt(22)
+; GFX950-NEXT: v_min_f64 v[60:61], v[28:29], v[36:37]
+; GFX950-NEXT: v_cmp_u_f64_e64 s[0:1], v[28:29], v[36:37]
+; GFX950-NEXT: scratch_load_dword v37, off, s32 offset:24
+; GFX950-NEXT: scratch_load_dword v36, off, s32 offset:20
+; GFX950-NEXT: s_waitcnt vmcnt(22)
+; GFX950-NEXT: v_min_f64 v[62:63], v[26:27], v[38:39]
+; GFX950-NEXT: v_cmp_u_f64_e64 s[2:3], v[26:27], v[38:39]
+; GFX950-NEXT: scratch_load_dword v39, off, s32 offset:16
+; GFX950-NEXT: scratch_load_dword v38, off, s32 offset:12
+; GFX950-NEXT: s_waitcnt vmcnt(22)
+; GFX950-NEXT: v_min_f64 v[58:59], v[24:25], v[48:49]
+; GFX950-NEXT: v_cmp_u_f64_e64 s[4:5], v[24:25], v[48:49]
+; GFX950-NEXT: scratch_load_dword v49, off, s32 offset:8
+; GFX950-NEXT: scratch_load_dword v48, off, s32 offset:4
+; GFX950-NEXT: s_waitcnt vmcnt(22)
+; GFX950-NEXT: v_min_f64 v[0:1], v[22:23], v[46:47]
+; GFX950-NEXT: v_cndmask_b32_e32 v31, v57, v2, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v30, v56, 0, vcc
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[22:23], v[46:47]
+; GFX950-NEXT: v_cndmask_b32_e64 v29, v61, v2, s[0:1]
+; GFX950-NEXT: v_cndmask_b32_e64 v28, v60, 0, s[0:1]
+; GFX950-NEXT: v_cndmask_b32_e32 v23, v1, v2, vcc
; GFX950-NEXT: v_cndmask_b32_e64 v22, v0, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v23, v1, v56, vcc
+; GFX950-NEXT: s_waitcnt vmcnt(20)
+; GFX950-NEXT: v_min_f64 v[0:1], v[20:21], v[44:45]
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[20:21], v[44:45]
+; GFX950-NEXT: v_cndmask_b32_e64 v27, v63, v2, s[2:3]
+; GFX950-NEXT: v_cndmask_b32_e64 v26, v62, 0, s[2:3]
+; GFX950-NEXT: v_cndmask_b32_e32 v21, v1, v2, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v20, v0, 0, vcc
+; GFX950-NEXT: s_waitcnt vmcnt(18)
+; GFX950-NEXT: v_min_f64 v[0:1], v[18:19], v[42:43]
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[18:19], v[42:43]
+; GFX950-NEXT: v_cndmask_b32_e64 v25, v59, v2, s[4:5]
+; GFX950-NEXT: v_cndmask_b32_e64 v24, v58, 0, s[4:5]
+; GFX950-NEXT: v_cndmask_b32_e32 v19, v1, v2, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v18, v0, 0, vcc
+; GFX950-NEXT: s_waitcnt vmcnt(16)
+; GFX950-NEXT: v_min_f64 v[0:1], v[16:17], v[40:41]
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[16:17], v[40:41]
+; GFX950-NEXT: v_accvgpr_read_b32 v63, a19 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_read_b32 v62, a18 ; Reload Reuse
+; GFX950-NEXT: v_cndmask_b32_e32 v17, v1, v2, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v16, v0, 0, vcc
+; GFX950-NEXT: s_waitcnt vmcnt(14)
+; GFX950-NEXT: v_min_f64 v[0:1], v[14:15], v[54:55]
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[14:15], v[54:55]
+; GFX950-NEXT: v_accvgpr_read_b32 v61, a17 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_read_b32 v60, a16 ; Reload Reuse
+; GFX950-NEXT: v_cndmask_b32_e32 v15, v1, v2, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v14, v0, 0, vcc
+; GFX950-NEXT: s_waitcnt vmcnt(12)
+; GFX950-NEXT: v_min_f64 v[0:1], v[12:13], v[52:53]
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[12:13], v[52:53]
+; GFX950-NEXT: v_accvgpr_read_b32 v59, a15 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_read_b32 v58, a14 ; Reload Reuse
+; GFX950-NEXT: v_cndmask_b32_e32 v13, v1, v2, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v12, v0, 0, vcc
+; GFX950-NEXT: s_waitcnt vmcnt(10)
+; GFX950-NEXT: v_min_f64 v[0:1], v[10:11], v[50:51]
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[10:11], v[50:51]
+; GFX950-NEXT: v_accvgpr_read_b32 v57, a13 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_read_b32 v56, a12 ; Reload Reuse
+; GFX950-NEXT: v_cndmask_b32_e32 v11, v1, v2, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v10, v0, 0, vcc
+; GFX950-NEXT: s_waitcnt vmcnt(8)
+; GFX950-NEXT: v_min_f64 v[0:1], v[8:9], v[32:33]
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[8:9], v[32:33]
+; GFX950-NEXT: v_accvgpr_read_b32 v33, a3
+; GFX950-NEXT: v_accvgpr_read_b32 v32, a2
+; GFX950-NEXT: v_cndmask_b32_e32 v9, v1, v2, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v8, v0, 0, vcc
+; GFX950-NEXT: v_accvgpr_read_b32 v47, a11 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_read_b32 v46, a10 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_read_b32 v45, a9 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_read_b32 v44, a8 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_read_b32 v43, a7 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_read_b32 v42, a6 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_read_b32 v41, a5 ; Reload Reuse
+; GFX950-NEXT: v_accvgpr_read_b32 v40, a4 ; Reload Reuse
; GFX950-NEXT: s_waitcnt vmcnt(6)
-; GFX950-NEXT: v_min_f64 v[0:1], v[24:25], v[32:33]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[24:25], v[32:33]
-; GFX950-NEXT: v_accvgpr_read_b32 v44, a4 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_read_b32 v43, a3 ; Reload Reuse
-; GFX950-NEXT: v_cndmask_b32_e64 v24, v0, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v25, v1, v56, vcc
-; GFX950-NEXT: v_accvgpr_read_b32 v42, a2 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_read_b32 v41, a1 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_read_b32 v40, a0 ; Reload Reuse
+; GFX950-NEXT: v_min_f64 v[0:1], v[6:7], v[34:35]
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[6:7], v[34:35]
+; GFX950-NEXT: v_accvgpr_read_b32 v35, a1
+; GFX950-NEXT: v_accvgpr_read_b32 v34, a0
+; GFX950-NEXT: v_cndmask_b32_e32 v7, v1, v2, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v6, v0, 0, vcc
; GFX950-NEXT: s_waitcnt vmcnt(4)
-; GFX950-NEXT: v_min_f64 v[0:1], v[26:27], v[34:35]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[26:27], v[34:35]
+; GFX950-NEXT: v_min_f64 v[0:1], v[4:5], v[36:37]
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[4:5], v[36:37]
; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v26, v0, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v27, v1, v56, vcc
+; GFX950-NEXT: v_cndmask_b32_e32 v5, v1, v2, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v4, v0, 0, vcc
; GFX950-NEXT: s_waitcnt vmcnt(2)
-; GFX950-NEXT: v_min_f64 v[0:1], v[28:29], v[36:37]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[28:29], v[36:37]
+; GFX950-NEXT: v_min_f64 v[0:1], v[32:33], v[38:39]
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[32:33], v[38:39]
; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v28, v0, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v29, v1, v56, vcc
+; GFX950-NEXT: v_cndmask_b32_e32 v3, v1, v2, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v32, v0, 0, vcc
; GFX950-NEXT: s_waitcnt vmcnt(0)
-; GFX950-NEXT: v_min_f64 v[0:1], v[30:31], v[38:39]
-; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[30:31], v[38:39]
+; GFX950-NEXT: v_min_f64 v[0:1], v[34:35], v[48:49]
+; GFX950-NEXT: v_cmp_u_f64_e32 vcc, v[34:35], v[48:49]
; GFX950-NEXT: s_nop 1
-; GFX950-NEXT: v_cndmask_b32_e64 v30, v0, 0, vcc
-; GFX950-NEXT: v_cndmask_b32_e32 v31, v1, v56, vcc
-; GFX950-NEXT: v_mov_b32_e32 v0, v57
-; GFX950-NEXT: v_mov_b32_e32 v1, v58
-; GFX950-NEXT: v_accvgpr_read_b32 v58, a10 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_read_b32 v57, a9 ; Reload Reuse
-; GFX950-NEXT: v_accvgpr_read_b32 v56, a8 ; Reload Reuse
+; GFX950-NEXT: v_cndmask_b32_e32 v1, v1, v2, vcc
+; GFX950-NEXT: v_cndmask_b32_e64 v0, v0, 0, vcc
+; GFX950-NEXT: v_mov_b32_e32 v2, v32
; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_minimum_v16f64:
diff --git a/llvm/test/CodeGen/AMDGPU/load-constant-i1.ll b/llvm/test/CodeGen/AMDGPU/load-constant-i1.ll
index 050373430cce5..d1501125c2049 100644
--- a/llvm/test/CodeGen/AMDGPU/load-constant-i1.ll
+++ b/llvm/test/CodeGen/AMDGPU/load-constant-i1.ll
@@ -5593,48 +5593,23 @@ define amdgpu_kernel void @constant_zextload_v2i1_to_v2i64(ptr addrspace(1) %out
; GFX12-FAKE16-NEXT: global_store_b128 v1, v[0:3], s[0:1]
; GFX12-FAKE16-NEXT: s_endpgm
;
-; GFX1250-TRUE16-LABEL: constant_zextload_v2i1_to_v2i64:
-; GFX1250-TRUE16: ; %bb.0:
-; GFX1250-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1 ; msbs: dst=0 src0=0 src1=0 src2=0
-; GFX1250-TRUE16-NEXT: s_mov_b64 s[64:65], 0
-; GFX1250-TRUE16-NEXT: v_nop
-; GFX1250-TRUE16-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
-; GFX1250-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24 nv
-; GFX1250-TRUE16-NEXT: v_mov_b32_e32 v1, 0
-; GFX1250-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
-; GFX1250-TRUE16-NEXT: v_mov_b32_e32 v3, v1
-; GFX1250-TRUE16-NEXT: s_wait_kmcnt 0x0
-; GFX1250-TRUE16-NEXT: global_load_u8 v0, v1, s[2:3] nv
-; GFX1250-TRUE16-NEXT: s_wait_loadcnt 0x0
-; GFX1250-TRUE16-NEXT: v_readfirstlane_b32 s2, v0
-; GFX1250-TRUE16-NEXT: s_and_b32 s3, 0xffff, s2
-; GFX1250-TRUE16-NEXT: s_and_b32 s2, s2, 1
-; GFX1250-TRUE16-NEXT: s_lshr_b32 s3, s3, 1
-; GFX1250-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
-; GFX1250-TRUE16-NEXT: s_and_b32 s3, 0xffff, s3
-; GFX1250-TRUE16-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v2, s3
-; GFX1250-TRUE16-NEXT: global_store_b128 v1, v[0:3], s[0:1]
-; GFX1250-TRUE16-NEXT: s_endpgm
-;
-; GFX1250-FAKE16-LABEL: constant_zextload_v2i1_to_v2i64:
-; GFX1250-FAKE16: ; %bb.0:
-; GFX1250-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1 ; msbs: dst=0 src0=0 src1=0 src2=0
-; GFX1250-FAKE16-NEXT: s_mov_b64 s[64:65], 0
-; GFX1250-FAKE16-NEXT: v_nop
-; GFX1250-FAKE16-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
-; GFX1250-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24 nv
-; GFX1250-FAKE16-NEXT: v_mov_b32_e32 v1, 0
-; GFX1250-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_1)
-; GFX1250-FAKE16-NEXT: v_mov_b32_e32 v3, v1
-; GFX1250-FAKE16-NEXT: s_wait_kmcnt 0x0
-; GFX1250-FAKE16-NEXT: global_load_u8 v0, v1, s[2:3] nv
-; GFX1250-FAKE16-NEXT: s_wait_loadcnt 0x0
-; GFX1250-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v0
-; GFX1250-FAKE16-NEXT: v_dual_lshrrev_b32 v2, 1, v2 :: v_dual_bitop2_b32 v0, 1, v0 bitop3:0x40
-; GFX1250-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
-; GFX1250-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
-; GFX1250-FAKE16-NEXT: global_store_b128 v1, v[0:3], s[0:1]
-; GFX1250-FAKE16-NEXT: s_endpgm
+; GFX1250-LABEL: constant_zextload_v2i1_to_v2i64:
+; GFX1250: ; %bb.0:
+; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1 ; msbs: dst=0 src0=0 src1=0 src2=0
+; GFX1250-NEXT: s_mov_b64 s[64:65], 0
+; GFX1250-NEXT: v_nop
+; GFX1250-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
+; GFX1250-NEXT: s_load_b128 s[0:3], s[4:5], 0x24 nv
+; GFX1250-NEXT: v_mov_b32_e32 v3, 0
+; GFX1250-NEXT: s_wait_kmcnt 0x0
+; GFX1250-NEXT: global_load_u8 v0, v3, s[2:3] nv
+; GFX1250-NEXT: s_wait_loadcnt 0x0
+; GFX1250-NEXT: v_and_b32_e32 v1, 0xffff, v0
+; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX1250-NEXT: v_dual_lshrrev_b32 v2, 1, v1 :: v_dual_bitop2_b32 v0, 1, v0 bitop3:0x40
+; GFX1250-NEXT: v_mov_b32_e32 v1, v3
+; GFX1250-NEXT: global_store_b128 v3, v[0:3], s[0:1]
+; GFX1250-NEXT: s_endpgm
%load = load <2 x i1>, ptr addrspace(4) %in
%ext = zext <2 x i1> %load to <2 x i64>
store <2 x i64> %ext, ptr addrspace(1) %out
@@ -5899,61 +5874,28 @@ define amdgpu_kernel void @constant_zextload_v3i1_to_v3i64(ptr addrspace(1) %out
; GFX12-FAKE16-NEXT: global_store_b128 v5, v[0:3], s[0:1]
; GFX12-FAKE16-NEXT: s_endpgm
;
-; GFX1250-TRUE16-LABEL: constant_zextload_v3i1_to_v3i64:
-; GFX1250-TRUE16: ; %bb.0:
-; GFX1250-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1 ; msbs: dst=0 src0=0 src1=0 src2=0
-; GFX1250-TRUE16-NEXT: s_mov_b64 s[64:65], 0
-; GFX1250-TRUE16-NEXT: v_nop
-; GFX1250-TRUE16-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
-; GFX1250-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24 nv
-; GFX1250-TRUE16-NEXT: v_mov_b32_e32 v1, 0
-; GFX1250-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
-; GFX1250-TRUE16-NEXT: v_mov_b32_e32 v3, v1
-; GFX1250-TRUE16-NEXT: s_wait_kmcnt 0x0
-; GFX1250-TRUE16-NEXT: global_load_u8 v0, v1, s[2:3] nv
-; GFX1250-TRUE16-NEXT: s_wait_loadcnt 0x0
-; GFX1250-TRUE16-NEXT: v_readfirstlane_b32 s2, v0
-; GFX1250-TRUE16-NEXT: s_and_b32 s3, 0xffff, s2
-; GFX1250-TRUE16-NEXT: s_bfe_u32 s4, s2, 0x10001
-; GFX1250-TRUE16-NEXT: s_lshr_b32 s3, s3, 2
-; GFX1250-TRUE16-NEXT: s_and_b32 s2, s2, 1
-; GFX1250-TRUE16-NEXT: s_and_b32 s3, 0xffff, s3
-; GFX1250-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
-; GFX1250-TRUE16-NEXT: v_mov_b32_e32 v0, s3
-; GFX1250-TRUE16-NEXT: s_and_b32 s3, 0xffff, s4
-; GFX1250-TRUE16-NEXT: v_mov_b32_e32 v2, s3
-; GFX1250-TRUE16-NEXT: global_store_b64 v1, v[0:1], s[0:1] offset:16
-; GFX1250-TRUE16-NEXT: s_wait_xcnt 0x0
-; GFX1250-TRUE16-NEXT: v_mov_b32_e32 v0, s2
-; GFX1250-TRUE16-NEXT: global_store_b128 v1, v[0:3], s[0:1]
-; GFX1250-TRUE16-NEXT: s_endpgm
-;
-; GFX1250-FAKE16-LABEL: constant_zextload_v3i1_to_v3i64:
-; GFX1250-FAKE16: ; %bb.0:
-; GFX1250-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1 ; msbs: dst=0 src0=0 src1=0 src2=0
-; GFX1250-FAKE16-NEXT: s_mov_b64 s[64:65], 0
-; GFX1250-FAKE16-NEXT: v_nop
-; GFX1250-FAKE16-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
-; GFX1250-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24 nv
-; GFX1250-FAKE16-NEXT: v_mov_b32_e32 v5, 0
-; GFX1250-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
-; GFX1250-FAKE16-NEXT: v_mov_b32_e32 v3, v5
-; GFX1250-FAKE16-NEXT: s_wait_kmcnt 0x0
-; GFX1250-FAKE16-NEXT: global_load_u8 v0, v5, s[2:3] nv
-; GFX1250-FAKE16-NEXT: s_wait_loadcnt 0x0
-; GFX1250-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v0
-; GFX1250-FAKE16-NEXT: v_bfe_u32 v6, v0, 1, 1
-; GFX1250-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)
-; GFX1250-FAKE16-NEXT: v_dual_lshrrev_b32 v2, 2, v1 :: v_dual_bitop2_b32 v0, 1, v0 bitop3:0x40
-; GFX1250-FAKE16-NEXT: s_mov_b32 s2, 0xffff
-; GFX1250-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)
-; GFX1250-FAKE16-NEXT: v_dual_mov_b32 v1, v5 :: v_dual_bitop2_b32 v4, s2, v2 bitop3:0x40
-; GFX1250-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)
-; GFX1250-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v6
-; GFX1250-FAKE16-NEXT: s_clause 0x1
-; GFX1250-FAKE16-NEXT: global_store_b64 v5, v[4:5], s[0:1] offset:16
-; GFX1250-FAKE16-NEXT: global_store_b128 v5, v[0:3], s[0:1]
-; GFX1250-FAKE16-NEXT: s_endpgm
+; GFX1250-LABEL: constant_zextload_v3i1_to_v3i64:
+; GFX1250: ; %bb.0:
+; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1 ; msbs: dst=0 src0=0 src1=0 src2=0
+; GFX1250-NEXT: s_mov_b64 s[64:65], 0
+; GFX1250-NEXT: v_nop
+; GFX1250-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
+; GFX1250-NEXT: s_load_b128 s[0:3], s[4:5], 0x24 nv
+; GFX1250-NEXT: v_mov_b32_e32 v5, 0
+; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_1)
+; GFX1250-NEXT: v_dual_mov_b32 v1, v5 :: v_dual_mov_b32 v3, v5
+; GFX1250-NEXT: s_wait_kmcnt 0x0
+; GFX1250-NEXT: global_load_u8 v2, v5, s[2:3] nv
+; GFX1250-NEXT: s_wait_loadcnt 0x0
+; GFX1250-NEXT: v_and_b32_e32 v0, 0xffff, v2
+; GFX1250-NEXT: v_dual_lshrrev_b32 v4, 2, v0 :: v_dual_bitop2_b32 v0, 1, v2 bitop3:0x40
+; GFX1250-NEXT: v_bfe_u32 v2, v2, 1, 1
+; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_2)
+; GFX1250-NEXT: v_and_b32_e32 v4, 0xffff, v4
+; GFX1250-NEXT: s_clause 0x1
+; GFX1250-NEXT: global_store_b64 v5, v[4:5], s[0:1] offset:16
+; GFX1250-NEXT: global_store_b128 v5, v[0:3], s[0:1]
+; GFX1250-NEXT: s_endpgm
%load = load <3 x i1>, ptr addrspace(4) %in
%ext = zext <3 x i1> %load to <3 x i64>
store <3 x i64> %ext, ptr addrspace(1) %out
@@ -6281,64 +6223,31 @@ define amdgpu_kernel void @constant_zextload_v4i1_to_v4i64(ptr addrspace(1) %out
; GFX12-FAKE16-NEXT: global_store_b128 v1, v[0:3], s[0:1]
; GFX12-FAKE16-NEXT: s_endpgm
;
-; GFX1250-TRUE16-LABEL: constant_zextload_v4i1_to_v4i64:
-; GFX1250-TRUE16: ; %bb.0:
-; GFX1250-TRUE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1 ; msbs: dst=0 src0=0 src1=0 src2=0
-; GFX1250-TRUE16-NEXT: s_mov_b64 s[64:65], 0
-; GFX1250-TRUE16-NEXT: v_nop
-; GFX1250-TRUE16-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
-; GFX1250-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24 nv
-; GFX1250-TRUE16-NEXT: v_mov_b32_e32 v1, 0
-; GFX1250-TRUE16-NEXT: s_wait_kmcnt 0x0
-; GFX1250-TRUE16-NEXT: global_load_u8 v0, v1, s[2:3] nv
-; GFX1250-TRUE16-NEXT: s_wait_loadcnt 0x0
-; GFX1250-TRUE16-NEXT: v_readfirstlane_b32 s2, v0
-; GFX1250-TRUE16-NEXT: s_and_b32 s3, 0xffff, s2
-; GFX1250-TRUE16-NEXT: s_bfe_u32 s4, s2, 0x10002
-; GFX1250-TRUE16-NEXT: s_lshr_b32 s3, s3, 3
-; GFX1250-TRUE16-NEXT: s_and_b32 s4, 0xffff, s4
-; GFX1250-TRUE16-NEXT: s_and_b32 s3, 0xffff, s3
-; GFX1250-TRUE16-NEXT: v_dual_mov_b32 v3, v1 :: v_dual_mov_b32 v0, s4
-; GFX1250-TRUE16-NEXT: v_mov_b32_e32 v2, s3
-; GFX1250-TRUE16-NEXT: s_bfe_u32 s3, s2, 0x10001
-; GFX1250-TRUE16-NEXT: s_and_b32 s2, s2, 1
-; GFX1250-TRUE16-NEXT: s_and_b32 s3, 0xffff, s3
-; GFX1250-TRUE16-NEXT: global_store_b128 v1, v[0:3], s[0:1] offset:16
-; GFX1250-TRUE16-NEXT: s_wait_xcnt 0x0
-; GFX1250-TRUE16-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v2, s3
-; GFX1250-TRUE16-NEXT: global_store_b128 v1, v[0:3], s[0:1]
-; GFX1250-TRUE16-NEXT: s_endpgm
-;
-; GFX1250-FAKE16-LABEL: constant_zextload_v4i1_to_v4i64:
-; GFX1250-FAKE16: ; %bb.0:
-; GFX1250-FAKE16-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1 ; msbs: dst=0 src0=0 src1=0 src2=0
-; GFX1250-FAKE16-NEXT: s_mov_b64 s[64:65], 0
-; GFX1250-FAKE16-NEXT: v_nop
-; GFX1250-FAKE16-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
-; GFX1250-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24 nv
-; GFX1250-FAKE16-NEXT: v_mov_b32_e32 v1, 0
-; GFX1250-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
-; GFX1250-FAKE16-NEXT: v_mov_b32_e32 v3, v1
-; GFX1250-FAKE16-NEXT: s_wait_kmcnt 0x0
-; GFX1250-FAKE16-NEXT: global_load_u8 v0, v1, s[2:3] nv
-; GFX1250-FAKE16-NEXT: s_wait_loadcnt 0x0
-; GFX1250-FAKE16-NEXT: v_readfirstlane_b32 s2, v0
-; GFX1250-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0
-; GFX1250-FAKE16-NEXT: s_bfe_u32 s3, s2, 0x10002
-; GFX1250-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
-; GFX1250-FAKE16-NEXT: s_and_b32 s3, 0xffff, s3
-; GFX1250-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)
-; GFX1250-FAKE16-NEXT: v_dual_lshrrev_b32 v2, 3, v0 :: v_dual_mov_b32 v0, s3
-; GFX1250-FAKE16-NEXT: s_bfe_u32 s3, s2, 0x10001
-; GFX1250-FAKE16-NEXT: s_and_b32 s2, s2, 1
-; GFX1250-FAKE16-NEXT: s_and_b32 s3, 0xffff, s3
-; GFX1250-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
-; GFX1250-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff, v2
-; GFX1250-FAKE16-NEXT: global_store_b128 v1, v[0:3], s[0:1] offset:16
-; GFX1250-FAKE16-NEXT: s_wait_xcnt 0x0
-; GFX1250-FAKE16-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v2, s3
-; GFX1250-FAKE16-NEXT: global_store_b128 v1, v[0:3], s[0:1]
-; GFX1250-FAKE16-NEXT: s_endpgm
+; GFX1250-LABEL: constant_zextload_v4i1_to_v4i64:
+; GFX1250: ; %bb.0:
+; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1 ; msbs: dst=0 src0=0 src1=0 src2=0
+; GFX1250-NEXT: s_mov_b64 s[64:65], 0
+; GFX1250-NEXT: v_nop
+; GFX1250-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
+; GFX1250-NEXT: s_load_b128 s[0:3], s[4:5], 0x24 nv
+; GFX1250-NEXT: v_mov_b32_e32 v1, 0
+; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX1250-NEXT: v_dual_mov_b32 v5, v1 :: v_dual_mov_b32 v7, v1
+; GFX1250-NEXT: s_wait_kmcnt 0x0
+; GFX1250-NEXT: global_load_u8 v6, v1, s[2:3] nv
+; GFX1250-NEXT: s_wait_xcnt 0x0
+; GFX1250-NEXT: s_mov_b32 s2, 0xffff
+; GFX1250-NEXT: s_wait_loadcnt 0x0
+; GFX1250-NEXT: v_dual_mov_b32 v3, v1 :: v_dual_bitop2_b32 v2, s2, v6 bitop3:0x40
+; GFX1250-NEXT: v_bfe_u32 v0, v6, 2, 1
+; GFX1250-NEXT: v_and_b32_e32 v4, 1, v6
+; GFX1250-NEXT: v_bfe_u32 v6, v6, 1, 1
+; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_4)
+; GFX1250-NEXT: v_lshrrev_b32_e32 v2, 3, v2
+; GFX1250-NEXT: s_clause 0x1
+; GFX1250-NEXT: global_store_b128 v1, v[0:3], s[0:1] offset:16
+; GFX1250-NEXT: global_store_b128 v1, v[4:7], s[0:1]
+; GFX1250-NEXT: s_endpgm
%load = load <4 x i1>, ptr addrspace(4) %in
%ext = zext <4 x i1> %load to <4 x i64>
store <4 x i64> %ext, ptr addrspace(1) %out
@@ -6758,10 +6667,10 @@ define amdgpu_kernel void @constant_zextload_v8i1_to_v8i64(ptr addrspace(1) %out
; GFX1250-TRUE16-NEXT: v_mov_b16_e32 v12.l, v8.l
; GFX1250-TRUE16-NEXT: v_bfe_u32 v6, v8, 5, 1
; GFX1250-TRUE16-NEXT: v_bfe_u32 v4, v8, 4, 1
-; GFX1250-TRUE16-NEXT: v_bfe_u32 v10, v8, 3, 1
+; GFX1250-TRUE16-NEXT: v_bfe_u32 v14, v8, 1, 1
; GFX1250-TRUE16-NEXT: v_lshrrev_b32_e32 v2, 7, v0
; GFX1250-TRUE16-NEXT: v_bfe_u32 v0, v0, 6, 1
-; GFX1250-TRUE16-NEXT: v_bfe_u32 v14, v8, 1, 1
+; GFX1250-TRUE16-NEXT: v_bfe_u32 v10, v8, 3, 1
; GFX1250-TRUE16-NEXT: v_bfe_u32 v8, v8, 2, 1
; GFX1250-TRUE16-NEXT: v_and_b32_e32 v12, 1, v12
; GFX1250-TRUE16-NEXT: s_clause 0x3
@@ -7063,35 +6972,35 @@ define amdgpu_kernel void @constant_sextload_v8i1_to_v8i64(ptr addrspace(1) %out
; GFX1250-NEXT: s_wait_loadcnt 0x0
; GFX1250-NEXT: v_readfirstlane_b32 s3, v0
; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)
-; GFX1250-NEXT: v_mov_b32_e32 v10, s3
-; GFX1250-NEXT: s_lshr_b32 s2, s3, 6
-; GFX1250-NEXT: s_lshr_b32 s4, s3, 7
-; GFX1250-NEXT: s_lshr_b32 s6, s3, 4
-; GFX1250-NEXT: s_lshr_b32 s8, s3, 5
-; GFX1250-NEXT: s_lshr_b32 s10, s3, 2
-; GFX1250-NEXT: s_lshr_b32 s12, s3, 3
-; GFX1250-NEXT: s_lshr_b32 s14, s3, 1
-; GFX1250-NEXT: s_bfe_i64 s[2:3], s[2:3], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[4:5], s[4:5], 0x10000
-; GFX1250-NEXT: v_mov_b32_e32 v0, s2
-; GFX1250-NEXT: v_bfe_i32 v12, v10, 0, 1
-; GFX1250-NEXT: s_bfe_i64 s[8:9], s[8:9], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[6:7], s[6:7], 0x10000
+; GFX1250-NEXT: v_mov_b32_e32 v4, s3
+; GFX1250-NEXT: s_lshr_b32 s12, s3, 6
+; GFX1250-NEXT: s_lshr_b32 s14, s3, 7
+; GFX1250-NEXT: s_lshr_b32 s8, s3, 4
+; GFX1250-NEXT: s_lshr_b32 s10, s3, 5
+; GFX1250-NEXT: s_lshr_b32 s4, s3, 2
+; GFX1250-NEXT: s_lshr_b32 s6, s3, 3
+; GFX1250-NEXT: s_bfe_i64 s[14:15], s[14:15], 0x10000
; GFX1250-NEXT: s_bfe_i64 s[12:13], s[12:13], 0x10000
+; GFX1250-NEXT: s_lshr_b32 s2, s3, 1
; GFX1250-NEXT: s_bfe_i64 s[10:11], s[10:11], 0x10000
-; GFX1250-NEXT: v_dual_mov_b32 v1, s3 :: v_dual_mov_b32 v2, s4
-; GFX1250-NEXT: v_dual_mov_b32 v3, s5 :: v_dual_mov_b32 v4, s6
-; GFX1250-NEXT: s_bfe_i64 s[14:15], s[14:15], 0x10000
-; GFX1250-NEXT: v_dual_mov_b32 v5, s7 :: v_dual_mov_b32 v6, s8
-; GFX1250-NEXT: v_dual_mov_b32 v7, s9 :: v_dual_mov_b32 v8, s10
-; GFX1250-NEXT: v_dual_mov_b32 v9, s11 :: v_dual_mov_b32 v10, s12
-; GFX1250-NEXT: v_dual_mov_b32 v11, s13 :: v_dual_mov_b32 v14, s14
-; GFX1250-NEXT: v_dual_ashrrev_i32 v13, 31, v12 :: v_dual_mov_b32 v15, s15
+; GFX1250-NEXT: s_bfe_i64 s[8:9], s[8:9], 0x10000
+; GFX1250-NEXT: v_bfe_i32 v4, v4, 0, 1
+; GFX1250-NEXT: s_bfe_i64 s[6:7], s[6:7], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[4:5], s[4:5], 0x10000
+; GFX1250-NEXT: v_mov_b64_e32 v[12:13], s[12:13]
+; GFX1250-NEXT: v_mov_b64_e32 v[14:15], s[14:15]
+; GFX1250-NEXT: s_bfe_i64 s[2:3], s[2:3], 0x10000
+; GFX1250-NEXT: v_mov_b64_e32 v[8:9], s[8:9]
+; GFX1250-NEXT: v_mov_b64_e32 v[10:11], s[10:11]
+; GFX1250-NEXT: v_mov_b64_e32 v[0:1], s[4:5]
+; GFX1250-NEXT: v_mov_b64_e32 v[2:3], s[6:7]
+; GFX1250-NEXT: v_mov_b64_e32 v[6:7], s[2:3]
+; GFX1250-NEXT: v_ashrrev_i32_e32 v5, 31, v4
; GFX1250-NEXT: s_clause 0x3
-; GFX1250-NEXT: global_store_b128 v16, v[0:3], s[0:1] offset:48
-; GFX1250-NEXT: global_store_b128 v16, v[4:7], s[0:1] offset:32
-; GFX1250-NEXT: global_store_b128 v16, v[8:11], s[0:1] offset:16
-; GFX1250-NEXT: global_store_b128 v16, v[12:15], s[0:1]
+; GFX1250-NEXT: global_store_b128 v16, v[12:15], s[0:1] offset:48
+; GFX1250-NEXT: global_store_b128 v16, v[8:11], s[0:1] offset:32
+; GFX1250-NEXT: global_store_b128 v16, v[0:3], s[0:1] offset:16
+; GFX1250-NEXT: global_store_b128 v16, v[4:7], s[0:1]
; GFX1250-NEXT: s_endpgm
%load = load <8 x i1>, ptr addrspace(4) %in
%ext = sext <8 x i1> %load to <8 x i64>
@@ -7442,58 +7351,54 @@ define amdgpu_kernel void @constant_zextload_v16i1_to_v16i64(ptr addrspace(1) %o
; GFX1250-TRUE16-NEXT: v_nop
; GFX1250-TRUE16-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
; GFX1250-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24 nv
-; GFX1250-TRUE16-NEXT: v_mov_b32_e32 v3, 0
+; GFX1250-TRUE16-NEXT: v_mov_b32_e32 v1, 0
; GFX1250-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
-; GFX1250-TRUE16-NEXT: v_mov_b32_e32 v1, v3
+; GFX1250-TRUE16-NEXT: v_dual_mov_b32 v3, v1 :: v_dual_mov_b32 v5, v1
+; GFX1250-TRUE16-NEXT: v_dual_mov_b32 v7, v1 :: v_dual_mov_b32 v9, v1
+; GFX1250-TRUE16-NEXT: v_dual_mov_b32 v11, v1 :: v_dual_mov_b32 v13, v1
+; GFX1250-TRUE16-NEXT: v_dual_mov_b32 v15, v1 :: v_dual_mov_b32 v17, v1
+; GFX1250-TRUE16-NEXT: v_dual_mov_b32 v19, v1 :: v_dual_mov_b32 v21, v1
+; GFX1250-TRUE16-NEXT: v_dual_mov_b32 v23, v1 :: v_dual_mov_b32 v25, v1
+; GFX1250-TRUE16-NEXT: v_dual_mov_b32 v27, v1 :: v_dual_mov_b32 v29, v1
; GFX1250-TRUE16-NEXT: s_wait_kmcnt 0x0
-; GFX1250-TRUE16-NEXT: global_load_u16 v0, v3, s[2:3] nv
+; GFX1250-TRUE16-NEXT: global_load_u16 v0, v1, s[2:3] nv
; GFX1250-TRUE16-NEXT: s_wait_loadcnt 0x0
; GFX1250-TRUE16-NEXT: v_readfirstlane_b32 s2, v0
-; GFX1250-TRUE16-NEXT: s_and_b32 s3, 0xffff, s2
-; GFX1250-TRUE16-NEXT: s_bfe_u32 s4, s2, 0x1000a
-; GFX1250-TRUE16-NEXT: s_bfe_u32 s5, s3, 0x1000b
-; GFX1250-TRUE16-NEXT: v_dual_mov_b32 v5, v3 :: v_dual_mov_b32 v2, s4
-; GFX1250-TRUE16-NEXT: v_mov_b32_e32 v4, s5
-; GFX1250-TRUE16-NEXT: s_bfe_u32 s4, s2, 0x10009
-; GFX1250-TRUE16-NEXT: s_bfe_u32 s5, s3, 0x10008
-; GFX1250-TRUE16-NEXT: v_mov_b32_e32 v0, s2
-; GFX1250-TRUE16-NEXT: global_store_b128 v3, v[2:5], s[0:1] offset:80
-; GFX1250-TRUE16-NEXT: s_wait_xcnt 0x0
-; GFX1250-TRUE16-NEXT: v_mov_b32_e32 v2, s5
-; GFX1250-TRUE16-NEXT: s_bfe_u32 s5, s3, 0x1000e
-; GFX1250-TRUE16-NEXT: v_mov_b32_e32 v4, s4
-; GFX1250-TRUE16-NEXT: s_lshr_b32 s4, s3, 15
-; GFX1250-TRUE16-NEXT: s_bfe_u32 s3, s3, 0x10005
-; GFX1250-TRUE16-NEXT: global_store_b128 v3, v[2:5], s[0:1] offset:64
-; GFX1250-TRUE16-NEXT: s_wait_xcnt 0x0
-; GFX1250-TRUE16-NEXT: v_mov_b32_e32 v2, s5
-; GFX1250-TRUE16-NEXT: s_bfe_u32 s5, s2, 0x1000c
-; GFX1250-TRUE16-NEXT: v_mov_b32_e32 v4, s4
-; GFX1250-TRUE16-NEXT: s_bfe_u32 s4, s2, 0x1000d
-; GFX1250-TRUE16-NEXT: global_store_b128 v3, v[2:5], s[0:1] offset:112
-; GFX1250-TRUE16-NEXT: s_wait_xcnt 0x0
-; GFX1250-TRUE16-NEXT: v_mov_b32_e32 v2, s5
-; GFX1250-TRUE16-NEXT: s_bfe_u32 s5, s2, 0x10006
-; GFX1250-TRUE16-NEXT: v_mov_b32_e32 v4, s4
-; GFX1250-TRUE16-NEXT: s_bfe_u32 s4, s2, 0x10007
-; GFX1250-TRUE16-NEXT: global_store_b128 v3, v[2:5], s[0:1] offset:96
-; GFX1250-TRUE16-NEXT: s_wait_xcnt 0x0
-; GFX1250-TRUE16-NEXT: v_dual_mov_b32 v2, s5 :: v_dual_mov_b32 v4, s4
-; GFX1250-TRUE16-NEXT: s_bfe_u32 s4, s2, 0x10004
-; GFX1250-TRUE16-NEXT: global_store_b128 v3, v[2:5], s[0:1] offset:48
-; GFX1250-TRUE16-NEXT: s_wait_xcnt 0x0
-; GFX1250-TRUE16-NEXT: v_dual_mov_b32 v2, s4 :: v_dual_mov_b32 v4, s3
-; GFX1250-TRUE16-NEXT: s_bfe_u32 s3, s2, 0x10003
-; GFX1250-TRUE16-NEXT: s_bfe_u32 s4, s2, 0x10002
-; GFX1250-TRUE16-NEXT: s_bfe_u32 s2, s2, 0x10001
-; GFX1250-TRUE16-NEXT: v_and_b32_e32 v0, 1, v0
-; GFX1250-TRUE16-NEXT: global_store_b128 v3, v[2:5], s[0:1] offset:32
-; GFX1250-TRUE16-NEXT: s_wait_xcnt 0x0
-; GFX1250-TRUE16-NEXT: v_dual_mov_b32 v2, s4 :: v_dual_mov_b32 v4, s3
-; GFX1250-TRUE16-NEXT: global_store_b128 v3, v[2:5], s[0:1] offset:16
-; GFX1250-TRUE16-NEXT: s_wait_xcnt 0x0
-; GFX1250-TRUE16-NEXT: v_mov_b32_e32 v2, s2
-; GFX1250-TRUE16-NEXT: global_store_b128 v3, v[0:3], s[0:1]
+; GFX1250-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX1250-TRUE16-NEXT: v_dual_mov_b32 v31, v1 :: v_dual_mov_b32 v28, s2
+; GFX1250-TRUE16-NEXT: s_and_b32 s5, 0xffff, s2
+; GFX1250-TRUE16-NEXT: s_bfe_u32 s8, s2, 0x1000d
+; GFX1250-TRUE16-NEXT: s_lshr_b32 s15, s5, 15
+; GFX1250-TRUE16-NEXT: s_bfe_u32 s16, s5, 0x1000e
+; GFX1250-TRUE16-NEXT: s_bfe_u32 s9, s2, 0x1000c
+; GFX1250-TRUE16-NEXT: s_bfe_u32 s10, s2, 0x1000a
+; GFX1250-TRUE16-NEXT: s_bfe_u32 s14, s5, 0x1000b
+; GFX1250-TRUE16-NEXT: v_dual_mov_b32 v2, s15 :: v_dual_mov_b32 v0, s16
+; GFX1250-TRUE16-NEXT: s_bfe_u32 s3, s2, 0x10001
+; GFX1250-TRUE16-NEXT: s_bfe_u32 s4, s2, 0x10003
+; GFX1250-TRUE16-NEXT: s_bfe_u32 s6, s2, 0x10007
+; GFX1250-TRUE16-NEXT: s_bfe_u32 s7, s2, 0x10009
+; GFX1250-TRUE16-NEXT: s_bfe_u32 s11, s2, 0x10006
+; GFX1250-TRUE16-NEXT: s_bfe_u32 s12, s2, 0x10004
+; GFX1250-TRUE16-NEXT: s_bfe_u32 s13, s2, 0x10002
+; GFX1250-TRUE16-NEXT: s_bfe_u32 s2, s5, 0x10005
+; GFX1250-TRUE16-NEXT: v_dual_mov_b32 v6, s8 :: v_dual_mov_b32 v4, s9
+; GFX1250-TRUE16-NEXT: s_bfe_u32 s5, s5, 0x10008
+; GFX1250-TRUE16-NEXT: v_dual_mov_b32 v8, s10 :: v_dual_mov_b32 v14, s7
+; GFX1250-TRUE16-NEXT: v_dual_mov_b32 v10, s14 :: v_dual_mov_b32 v12, s5
+; GFX1250-TRUE16-NEXT: v_dual_mov_b32 v18, s6 :: v_dual_mov_b32 v16, s11
+; GFX1250-TRUE16-NEXT: v_dual_mov_b32 v20, s12 :: v_dual_mov_b32 v26, s4
+; GFX1250-TRUE16-NEXT: v_dual_mov_b32 v24, s13 :: v_dual_mov_b32 v30, s3
+; GFX1250-TRUE16-NEXT: v_dual_mov_b32 v22, s2 :: v_dual_bitop2_b32 v28, 1, v28 bitop3:0x40
+; GFX1250-TRUE16-NEXT: s_clause 0x7
+; GFX1250-TRUE16-NEXT: global_store_b128 v1, v[0:3], s[0:1] offset:112
+; GFX1250-TRUE16-NEXT: global_store_b128 v1, v[4:7], s[0:1] offset:96
+; GFX1250-TRUE16-NEXT: global_store_b128 v1, v[8:11], s[0:1] offset:80
+; GFX1250-TRUE16-NEXT: global_store_b128 v1, v[12:15], s[0:1] offset:64
+; GFX1250-TRUE16-NEXT: global_store_b128 v1, v[16:19], s[0:1] offset:48
+; GFX1250-TRUE16-NEXT: global_store_b128 v1, v[20:23], s[0:1] offset:32
+; GFX1250-TRUE16-NEXT: global_store_b128 v1, v[24:27], s[0:1] offset:16
+; GFX1250-TRUE16-NEXT: global_store_b128 v1, v[28:31], s[0:1]
; GFX1250-TRUE16-NEXT: s_endpgm
;
; GFX1250-FAKE16-LABEL: constant_zextload_v16i1_to_v16i64:
@@ -7513,32 +7418,32 @@ define amdgpu_kernel void @constant_zextload_v16i1_to_v16i64(ptr addrspace(1) %o
; GFX1250-FAKE16-NEXT: v_dual_mov_b32 v23, v1 :: v_dual_mov_b32 v25, v1
; GFX1250-FAKE16-NEXT: v_dual_mov_b32 v27, v1 :: v_dual_mov_b32 v29, v1
; GFX1250-FAKE16-NEXT: s_wait_kmcnt 0x0
-; GFX1250-FAKE16-NEXT: global_load_u16 v12, v1, s[2:3] nv
+; GFX1250-FAKE16-NEXT: global_load_u16 v10, v1, s[2:3] nv
; GFX1250-FAKE16-NEXT: s_wait_xcnt 0x0
; GFX1250-FAKE16-NEXT: s_mov_b32 s2, 0xffff
; GFX1250-FAKE16-NEXT: s_wait_loadcnt 0x0
-; GFX1250-FAKE16-NEXT: v_dual_mov_b32 v31, v1 :: v_dual_bitop2_b32 v22, s2, v12 bitop3:0x40
-; GFX1250-FAKE16-NEXT: v_bfe_u32 v0, v12, 10, 1
-; GFX1250-FAKE16-NEXT: v_bfe_u32 v6, v12, 9, 1
-; GFX1250-FAKE16-NEXT: v_and_b32_e32 v28, 1, v12
-; GFX1250-FAKE16-NEXT: v_bfe_u32 v14, v12, 13, 1
-; GFX1250-FAKE16-NEXT: v_bfe_u32 v2, v22, 11, 1
-; GFX1250-FAKE16-NEXT: v_bfe_u32 v4, v22, 8, 1
-; GFX1250-FAKE16-NEXT: v_lshrrev_b32_e32 v10, 15, v22
-; GFX1250-FAKE16-NEXT: v_bfe_u32 v8, v22, 14, 1
-; GFX1250-FAKE16-NEXT: v_bfe_u32 v18, v12, 7, 1
-; GFX1250-FAKE16-NEXT: v_bfe_u32 v26, v12, 3, 1
-; GFX1250-FAKE16-NEXT: v_bfe_u32 v30, v12, 1, 1
-; GFX1250-FAKE16-NEXT: v_bfe_u32 v24, v12, 2, 1
-; GFX1250-FAKE16-NEXT: v_bfe_u32 v20, v12, 4, 1
-; GFX1250-FAKE16-NEXT: v_bfe_u32 v16, v12, 6, 1
-; GFX1250-FAKE16-NEXT: v_bfe_u32 v12, v12, 12, 1
+; GFX1250-FAKE16-NEXT: v_dual_mov_b32 v31, v1 :: v_dual_bitop2_b32 v22, s2, v10 bitop3:0x40
+; GFX1250-FAKE16-NEXT: v_bfe_u32 v6, v10, 13, 1
+; GFX1250-FAKE16-NEXT: v_bfe_u32 v4, v10, 12, 1
+; GFX1250-FAKE16-NEXT: v_bfe_u32 v30, v10, 1, 1
+; GFX1250-FAKE16-NEXT: v_bfe_u32 v26, v10, 3, 1
+; GFX1250-FAKE16-NEXT: v_lshrrev_b32_e32 v2, 15, v22
+; GFX1250-FAKE16-NEXT: v_bfe_u32 v0, v22, 14, 1
+; GFX1250-FAKE16-NEXT: v_bfe_u32 v18, v10, 7, 1
+; GFX1250-FAKE16-NEXT: v_bfe_u32 v14, v10, 9, 1
+; GFX1250-FAKE16-NEXT: v_bfe_u32 v8, v10, 10, 1
+; GFX1250-FAKE16-NEXT: v_bfe_u32 v16, v10, 6, 1
+; GFX1250-FAKE16-NEXT: v_bfe_u32 v20, v10, 4, 1
+; GFX1250-FAKE16-NEXT: v_bfe_u32 v24, v10, 2, 1
+; GFX1250-FAKE16-NEXT: v_and_b32_e32 v28, 1, v10
+; GFX1250-FAKE16-NEXT: v_bfe_u32 v10, v22, 11, 1
+; GFX1250-FAKE16-NEXT: v_bfe_u32 v12, v22, 8, 1
; GFX1250-FAKE16-NEXT: v_bfe_u32 v22, v22, 5, 1
; GFX1250-FAKE16-NEXT: s_clause 0x7
-; GFX1250-FAKE16-NEXT: global_store_b128 v1, v[0:3], s[0:1] offset:80
-; GFX1250-FAKE16-NEXT: global_store_b128 v1, v[4:7], s[0:1] offset:64
-; GFX1250-FAKE16-NEXT: global_store_b128 v1, v[8:11], s[0:1] offset:112
-; GFX1250-FAKE16-NEXT: global_store_b128 v1, v[12:15], s[0:1] offset:96
+; GFX1250-FAKE16-NEXT: global_store_b128 v1, v[0:3], s[0:1] offset:112
+; GFX1250-FAKE16-NEXT: global_store_b128 v1, v[4:7], s[0:1] offset:96
+; GFX1250-FAKE16-NEXT: global_store_b128 v1, v[8:11], s[0:1] offset:80
+; GFX1250-FAKE16-NEXT: global_store_b128 v1, v[12:15], s[0:1] offset:64
; GFX1250-FAKE16-NEXT: global_store_b128 v1, v[16:19], s[0:1] offset:48
; GFX1250-FAKE16-NEXT: global_store_b128 v1, v[20:23], s[0:1] offset:32
; GFX1250-FAKE16-NEXT: global_store_b128 v1, v[24:27], s[0:1] offset:16
@@ -7980,63 +7885,64 @@ define amdgpu_kernel void @constant_sextload_v16i1_to_v16i64(ptr addrspace(1) %o
; GFX1250-NEXT: global_load_u16 v0, v32, s[2:3] nv
; GFX1250-NEXT: s_wait_loadcnt 0x0
; GFX1250-NEXT: v_readfirstlane_b32 s3, v0
-; GFX1250-NEXT: s_lshr_b32 s4, s3, 14
-; GFX1250-NEXT: s_lshr_b32 s6, s3, 15
-; GFX1250-NEXT: s_bfe_i64 s[4:5], s[4:5], 0x10000
-; GFX1250-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
-; GFX1250-NEXT: v_dual_mov_b32 v28, s3 :: v_dual_mov_b32 v0, s4
-; GFX1250-NEXT: s_lshr_b32 s10, s3, 13
-; GFX1250-NEXT: s_lshr_b32 s12, s3, 10
-; GFX1250-NEXT: s_lshr_b32 s14, s3, 11
-; GFX1250-NEXT: s_lshr_b32 s8, s3, 12
+; GFX1250-NEXT: s_lshr_b32 s20, s3, 10
+; GFX1250-NEXT: s_lshr_b32 s22, s3, 11
+; GFX1250-NEXT: s_lshr_b32 s28, s3, 14
+; GFX1250-NEXT: s_lshr_b32 s30, s3, 15
+; GFX1250-NEXT: v_mov_b32_e32 v0, s3
; GFX1250-NEXT: s_lshr_b32 s16, s3, 8
; GFX1250-NEXT: s_lshr_b32 s18, s3, 9
-; GFX1250-NEXT: s_lshr_b32 s20, s3, 6
-; GFX1250-NEXT: s_lshr_b32 s22, s3, 7
-; GFX1250-NEXT: s_bfe_i64 s[14:15], s[14:15], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[12:13], s[12:13], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[10:11], s[10:11], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[6:7], s[6:7], 0x10000
-; GFX1250-NEXT: s_lshr_b32 s24, s3, 4
-; GFX1250-NEXT: s_lshr_b32 s26, s3, 5
-; GFX1250-NEXT: s_bfe_i64 s[18:19], s[18:19], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[16:17], s[16:17], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[8:9], s[8:9], 0x10000
-; GFX1250-NEXT: s_lshr_b32 s28, s3, 2
-; GFX1250-NEXT: s_lshr_b32 s30, s3, 3
+; GFX1250-NEXT: s_lshr_b32 s24, s3, 12
+; GFX1250-NEXT: s_lshr_b32 s26, s3, 13
+; GFX1250-NEXT: s_lshr_b32 s12, s3, 6
+; GFX1250-NEXT: s_lshr_b32 s14, s3, 7
+; GFX1250-NEXT: s_bfe_i64 s[30:31], s[30:31], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[28:29], s[28:29], 0x10000
; GFX1250-NEXT: s_bfe_i64 s[22:23], s[22:23], 0x10000
; GFX1250-NEXT: s_bfe_i64 s[20:21], s[20:21], 0x10000
-; GFX1250-NEXT: v_dual_mov_b32 v1, s5 :: v_dual_mov_b32 v2, s6
-; GFX1250-NEXT: v_dual_mov_b32 v3, s7 :: v_dual_mov_b32 v4, s8
-; GFX1250-NEXT: v_dual_mov_b32 v7, s11 :: v_dual_mov_b32 v8, s12
-; GFX1250-NEXT: v_dual_mov_b32 v9, s13 :: v_dual_mov_b32 v10, s14
-; GFX1250-NEXT: v_dual_mov_b32 v11, s15 :: v_dual_mov_b32 v12, s16
-; GFX1250-NEXT: v_bfe_i32 v28, v28, 0, 1
-; GFX1250-NEXT: s_lshr_b32 s2, s3, 1
+; GFX1250-NEXT: s_lshr_b32 s8, s3, 4
+; GFX1250-NEXT: s_lshr_b32 s10, s3, 5
; GFX1250-NEXT: s_bfe_i64 s[26:27], s[26:27], 0x10000
; GFX1250-NEXT: s_bfe_i64 s[24:25], s[24:25], 0x10000
-; GFX1250-NEXT: v_dual_mov_b32 v5, s9 :: v_dual_mov_b32 v6, s10
-; GFX1250-NEXT: v_dual_mov_b32 v13, s17 :: v_dual_mov_b32 v14, s18
-; GFX1250-NEXT: v_dual_mov_b32 v15, s19 :: v_dual_mov_b32 v16, s20
-; GFX1250-NEXT: s_bfe_i64 s[30:31], s[30:31], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[28:29], s[28:29], 0x10000
-; GFX1250-NEXT: v_dual_mov_b32 v17, s21 :: v_dual_mov_b32 v18, s22
-; GFX1250-NEXT: v_dual_mov_b32 v19, s23 :: v_dual_mov_b32 v20, s24
+; GFX1250-NEXT: s_bfe_i64 s[18:19], s[18:19], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[16:17], s[16:17], 0x10000
+; GFX1250-NEXT: s_lshr_b32 s4, s3, 2
+; GFX1250-NEXT: s_lshr_b32 s6, s3, 3
+; GFX1250-NEXT: s_bfe_i64 s[14:15], s[14:15], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[12:13], s[12:13], 0x10000
+; GFX1250-NEXT: v_mov_b64_e32 v[20:21], s[20:21]
+; GFX1250-NEXT: v_mov_b64_e32 v[28:29], s[28:29]
+; GFX1250-NEXT: v_mov_b64_e32 v[30:31], s[30:31]
+; GFX1250-NEXT: v_mov_b64_e32 v[22:23], s[22:23]
+; GFX1250-NEXT: s_lshr_b32 s2, s3, 1
+; GFX1250-NEXT: s_bfe_i64 s[10:11], s[10:11], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[8:9], s[8:9], 0x10000
+; GFX1250-NEXT: v_mov_b64_e32 v[16:17], s[16:17]
+; GFX1250-NEXT: v_mov_b64_e32 v[24:25], s[24:25]
+; GFX1250-NEXT: v_mov_b64_e32 v[26:27], s[26:27]
+; GFX1250-NEXT: v_bfe_i32 v0, v0, 0, 1
+; GFX1250-NEXT: v_mov_b64_e32 v[18:19], s[18:19]
+; GFX1250-NEXT: s_bfe_i64 s[6:7], s[6:7], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[4:5], s[4:5], 0x10000
+; GFX1250-NEXT: v_mov_b64_e32 v[12:13], s[12:13]
+; GFX1250-NEXT: v_mov_b64_e32 v[14:15], s[14:15]
; GFX1250-NEXT: s_bfe_i64 s[2:3], s[2:3], 0x10000
-; GFX1250-NEXT: v_dual_mov_b32 v21, s25 :: v_dual_mov_b32 v22, s26
-; GFX1250-NEXT: v_dual_mov_b32 v23, s27 :: v_dual_mov_b32 v24, s28
-; GFX1250-NEXT: v_dual_mov_b32 v25, s29 :: v_dual_mov_b32 v26, s30
-; GFX1250-NEXT: v_dual_mov_b32 v27, s31 :: v_dual_mov_b32 v30, s2
-; GFX1250-NEXT: v_dual_mov_b32 v31, s3 :: v_dual_ashrrev_i32 v29, 31, v28
-; GFX1250-NEXT: s_clause 0x7
-; GFX1250-NEXT: global_store_b128 v32, v[0:3], s[0:1] offset:112
-; GFX1250-NEXT: global_store_b128 v32, v[4:7], s[0:1] offset:96
-; GFX1250-NEXT: global_store_b128 v32, v[8:11], s[0:1] offset:80
-; GFX1250-NEXT: global_store_b128 v32, v[12:15], s[0:1] offset:64
-; GFX1250-NEXT: global_store_b128 v32, v[16:19], s[0:1] offset:48
-; GFX1250-NEXT: global_store_b128 v32, v[20:23], s[0:1] offset:32
-; GFX1250-NEXT: global_store_b128 v32, v[24:27], s[0:1] offset:16
-; GFX1250-NEXT: global_store_b128 v32, v[28:31], s[0:1]
+; GFX1250-NEXT: v_mov_b64_e32 v[8:9], s[8:9]
+; GFX1250-NEXT: v_mov_b64_e32 v[10:11], s[10:11]
+; GFX1250-NEXT: v_mov_b64_e32 v[4:5], s[4:5]
+; GFX1250-NEXT: v_mov_b64_e32 v[6:7], s[6:7]
+; GFX1250-NEXT: v_mov_b64_e32 v[2:3], s[2:3]
+; GFX1250-NEXT: s_clause 0x1
+; GFX1250-NEXT: global_store_b128 v32, v[28:31], s[0:1] offset:112
+; GFX1250-NEXT: global_store_b128 v32, v[24:27], s[0:1] offset:96
+; GFX1250-NEXT: v_ashrrev_i32_e32 v1, 31, v0
+; GFX1250-NEXT: s_clause 0x5
+; GFX1250-NEXT: global_store_b128 v32, v[20:23], s[0:1] offset:80
+; GFX1250-NEXT: global_store_b128 v32, v[16:19], s[0:1] offset:64
+; GFX1250-NEXT: global_store_b128 v32, v[12:15], s[0:1] offset:48
+; GFX1250-NEXT: global_store_b128 v32, v[8:11], s[0:1] offset:32
+; GFX1250-NEXT: global_store_b128 v32, v[4:7], s[0:1] offset:16
+; GFX1250-NEXT: global_store_b128 v32, v[0:3], s[0:1]
; GFX1250-NEXT: s_endpgm
%load = load <16 x i1>, ptr addrspace(4) %in
%ext = sext <16 x i1> %load to <16 x i64>
@@ -8586,11 +8492,11 @@ define amdgpu_kernel void @constant_zextload_v32i1_to_v32i64(ptr addrspace(1) %o
; GFX1250-NEXT: global_store_b128 v1, v[0:3], s[0:1] offset:192
; GFX1250-NEXT: s_wait_xcnt 0x0
; GFX1250-NEXT: v_dual_mov_b32 v0, s4 :: v_dual_mov_b32 v2, s3
-; GFX1250-NEXT: s_bfe_u32 s3, s2, 0x10014
-; GFX1250-NEXT: s_bfe_u32 s4, s2, 0x10015
+; GFX1250-NEXT: s_bfe_u32 s3, s2, 0x10015
+; GFX1250-NEXT: s_bfe_u32 s4, s2, 0x10014
; GFX1250-NEXT: global_store_b128 v1, v[0:3], s[0:1] offset:176
; GFX1250-NEXT: s_wait_xcnt 0x0
-; GFX1250-NEXT: v_dual_mov_b32 v0, s3 :: v_dual_mov_b32 v2, s4
+; GFX1250-NEXT: v_dual_mov_b32 v0, s4 :: v_dual_mov_b32 v2, s3
; GFX1250-NEXT: s_bfe_u32 s3, s2, 0x10013
; GFX1250-NEXT: s_bfe_u32 s4, s2, 0x10012
; GFX1250-NEXT: global_store_b128 v1, v[0:3], s[0:1] offset:160
@@ -9339,93 +9245,93 @@ define amdgpu_kernel void @constant_sextload_v32i1_to_v32i64(ptr addrspace(1) %o
; GFX1250-NEXT: s_wait_kmcnt 0x0
; GFX1250-NEXT: s_load_b32 s2, s[2:3], 0x0 nv
; GFX1250-NEXT: s_wait_kmcnt 0x0
-; GFX1250-NEXT: s_lshr_b32 s28, s2, 30
-; GFX1250-NEXT: s_lshr_b32 s30, s2, 31
-; GFX1250-NEXT: s_lshr_b32 s38, s2, 28
-; GFX1250-NEXT: s_lshr_b32 s40, s2, 29
-; GFX1250-NEXT: s_lshr_b32 s42, s2, 26
-; GFX1250-NEXT: s_lshr_b32 s48, s2, 27
-; GFX1250-NEXT: s_bfe_i64 s[28:29], s[28:29], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[30:31], s[30:31], 0x10000
-; GFX1250-NEXT: s_lshr_b32 s50, s2, 24
-; GFX1250-NEXT: s_lshr_b32 s52, s2, 25
-; GFX1250-NEXT: s_bfe_i64 s[40:41], s[40:41], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[38:39], s[38:39], 0x10000
-; GFX1250-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v2, s28
-; GFX1250-NEXT: s_bfe_i64 s[48:49], s[48:49], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[42:43], s[42:43], 0x10000
-; GFX1250-NEXT: v_dual_mov_b32 v3, s29 :: v_dual_mov_b32 v4, s30
-; GFX1250-NEXT: v_dual_mov_b32 v5, s31 :: v_dual_mov_b32 v6, s38
-; GFX1250-NEXT: s_lshr_b32 s24, s2, 22
-; GFX1250-NEXT: s_lshr_b32 s58, s2, 23
-; GFX1250-NEXT: s_bfe_i64 s[52:53], s[52:53], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[50:51], s[50:51], 0x10000
-; GFX1250-NEXT: v_dual_mov_b32 v7, s39 :: v_dual_mov_b32 v8, s40
-; GFX1250-NEXT: v_dual_mov_b32 v9, s41 :: v_dual_mov_b32 v10, s42
-; GFX1250-NEXT: s_lshr_b32 s60, s2, 20
-; GFX1250-NEXT: s_lshr_b32 s64, s2, 21
-; GFX1250-NEXT: v_dual_mov_b32 v11, s43 :: v_dual_mov_b32 v12, s48
-; GFX1250-NEXT: v_dual_mov_b32 v13, s49 :: v_dual_mov_b32 v14, s50
-; GFX1250-NEXT: s_lshr_b32 s66, s2, 18
-; GFX1250-NEXT: s_lshr_b32 s62, s2, 19
-; GFX1250-NEXT: s_bfe_i64 s[58:59], s[58:59], 0x10000
-; GFX1250-NEXT: v_dual_mov_b32 v15, s51 :: v_dual_mov_b32 v16, s52
-; GFX1250-NEXT: s_bfe_i64 s[24:25], s[24:25], 0x10000
-; GFX1250-NEXT: v_mov_b32_e32 v17, s53
-; GFX1250-NEXT: s_lshr_b32 s56, s2, 16
-; GFX1250-NEXT: s_lshr_b32 s54, s2, 17
+; GFX1250-NEXT: s_lshr_b32 s64, s2, 30
+; GFX1250-NEXT: s_lshr_b32 s66, s2, 31
+; GFX1250-NEXT: s_lshr_b32 s60, s2, 28
+; GFX1250-NEXT: s_lshr_b32 s62, s2, 29
+; GFX1250-NEXT: s_lshr_b32 s56, s2, 26
+; GFX1250-NEXT: s_lshr_b32 s58, s2, 27
+; GFX1250-NEXT: s_bfe_i64 s[66:67], s[66:67], 0x10000
; GFX1250-NEXT: s_bfe_i64 s[64:65], s[64:65], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[60:61], s[60:61], 0x10000
-; GFX1250-NEXT: s_lshr_b32 s46, s2, 14
-; GFX1250-NEXT: s_lshr_b32 s44, s2, 15
+; GFX1250-NEXT: s_lshr_b32 s52, s2, 24
+; GFX1250-NEXT: s_lshr_b32 s54, s2, 25
; GFX1250-NEXT: s_bfe_i64 s[62:63], s[62:63], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[66:67], s[66:67], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[60:61], s[60:61], 0x10000
+; GFX1250-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v2, s64
+; GFX1250-NEXT: s_bfe_i64 s[58:59], s[58:59], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[56:57], s[56:57], 0x10000
+; GFX1250-NEXT: v_dual_mov_b32 v3, s65 :: v_dual_mov_b32 v4, s66
+; GFX1250-NEXT: v_dual_mov_b32 v5, s67 :: v_dual_mov_b32 v6, s60
+; GFX1250-NEXT: s_lshr_b32 s48, s2, 22
+; GFX1250-NEXT: s_lshr_b32 s50, s2, 23
+; GFX1250-NEXT: s_bfe_i64 s[54:55], s[54:55], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[52:53], s[52:53], 0x10000
+; GFX1250-NEXT: v_dual_mov_b32 v7, s61 :: v_dual_mov_b32 v8, s62
+; GFX1250-NEXT: v_dual_mov_b32 v9, s63 :: v_dual_mov_b32 v10, s56
+; GFX1250-NEXT: s_lshr_b32 s44, s2, 20
+; GFX1250-NEXT: s_lshr_b32 s46, s2, 21
+; GFX1250-NEXT: v_dual_mov_b32 v11, s57 :: v_dual_mov_b32 v12, s58
+; GFX1250-NEXT: v_dual_mov_b32 v13, s59 :: v_dual_mov_b32 v14, s52
+; GFX1250-NEXT: s_lshr_b32 s38, s2, 18
+; GFX1250-NEXT: s_lshr_b32 s42, s2, 19
+; GFX1250-NEXT: s_bfe_i64 s[50:51], s[50:51], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[48:49], s[48:49], 0x10000
+; GFX1250-NEXT: v_dual_mov_b32 v15, s53 :: v_dual_mov_b32 v16, s54
+; GFX1250-NEXT: v_mov_b32_e32 v17, s55
+; GFX1250-NEXT: s_lshr_b32 s14, s2, 16
+; GFX1250-NEXT: s_lshr_b32 s34, s2, 17
+; GFX1250-NEXT: s_bfe_i64 s[46:47], s[46:47], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[44:45], s[44:45], 0x10000
+; GFX1250-NEXT: s_lshr_b32 s40, s2, 14
+; GFX1250-NEXT: s_lshr_b32 s36, s2, 15
+; GFX1250-NEXT: s_bfe_i64 s[42:43], s[42:43], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[38:39], s[38:39], 0x10000
; GFX1250-NEXT: s_clause 0x3
; GFX1250-NEXT: global_store_b128 v0, v[2:5], s[0:1] offset:240
; GFX1250-NEXT: global_store_b128 v0, v[6:9], s[0:1] offset:224
; GFX1250-NEXT: global_store_b128 v0, v[10:13], s[0:1] offset:208
; GFX1250-NEXT: global_store_b128 v0, v[14:17], s[0:1] offset:192
; GFX1250-NEXT: s_wait_xcnt 0x3
-; GFX1250-NEXT: v_dual_mov_b32 v2, s24 :: v_dual_mov_b32 v3, s25
-; GFX1250-NEXT: v_dual_mov_b32 v4, s58 :: v_dual_mov_b32 v5, s59
+; GFX1250-NEXT: v_dual_mov_b32 v2, s48 :: v_dual_mov_b32 v3, s49
+; GFX1250-NEXT: v_dual_mov_b32 v4, s50 :: v_dual_mov_b32 v5, s51
; GFX1250-NEXT: s_wait_xcnt 0x2
-; GFX1250-NEXT: v_mov_b32_e32 v6, s60
-; GFX1250-NEXT: s_lshr_b32 s36, s2, 12
-; GFX1250-NEXT: s_lshr_b32 s34, s2, 13
+; GFX1250-NEXT: v_mov_b32_e32 v6, s44
; GFX1250-NEXT: s_lshr_b32 s26, s2, 10
-; GFX1250-NEXT: s_lshr_b32 s22, s2, 11
-; GFX1250-NEXT: s_bfe_i64 s[54:55], s[54:55], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[56:57], s[56:57], 0x10000
-; GFX1250-NEXT: v_dual_mov_b32 v7, s61 :: v_dual_mov_b32 v8, s64
+; GFX1250-NEXT: s_lshr_b32 s24, s2, 11
+; GFX1250-NEXT: s_lshr_b32 s30, s2, 12
+; GFX1250-NEXT: s_lshr_b32 s28, s2, 13
+; GFX1250-NEXT: s_bfe_i64 s[34:35], s[34:35], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[14:15], s[14:15], 0x10000
+; GFX1250-NEXT: v_dual_mov_b32 v7, s45 :: v_dual_mov_b32 v8, s46
; GFX1250-NEXT: s_wait_xcnt 0x1
-; GFX1250-NEXT: v_dual_mov_b32 v9, s65 :: v_dual_mov_b32 v10, s66
-; GFX1250-NEXT: s_lshr_b32 s20, s2, 8
-; GFX1250-NEXT: s_lshr_b32 s18, s2, 9
-; GFX1250-NEXT: s_bfe_i64 s[44:45], s[44:45], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[46:47], s[46:47], 0x10000
-; GFX1250-NEXT: v_dual_mov_b32 v11, s67 :: v_dual_mov_b32 v12, s62
+; GFX1250-NEXT: v_dual_mov_b32 v9, s47 :: v_dual_mov_b32 v10, s38
+; GFX1250-NEXT: s_lshr_b32 s22, s2, 8
+; GFX1250-NEXT: s_lshr_b32 s20, s2, 9
+; GFX1250-NEXT: s_bfe_i64 s[36:37], s[36:37], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[40:41], s[40:41], 0x10000
+; GFX1250-NEXT: v_dual_mov_b32 v11, s39 :: v_dual_mov_b32 v12, s42
; GFX1250-NEXT: s_wait_xcnt 0x0
-; GFX1250-NEXT: v_dual_mov_b32 v13, s63 :: v_dual_mov_b32 v14, s56
-; GFX1250-NEXT: s_lshr_b32 s16, s2, 6
-; GFX1250-NEXT: s_lshr_b32 s14, s2, 7
-; GFX1250-NEXT: s_bfe_i64 s[22:23], s[22:23], 0x10000
+; GFX1250-NEXT: v_dual_mov_b32 v13, s43 :: v_dual_mov_b32 v14, s14
+; GFX1250-NEXT: s_lshr_b32 s18, s2, 6
+; GFX1250-NEXT: s_lshr_b32 s16, s2, 7
+; GFX1250-NEXT: s_bfe_i64 s[28:29], s[28:29], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[30:31], s[30:31], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[24:25], s[24:25], 0x10000
; GFX1250-NEXT: s_bfe_i64 s[26:27], s[26:27], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[34:35], s[34:35], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[36:37], s[36:37], 0x10000
-; GFX1250-NEXT: v_dual_mov_b32 v15, s57 :: v_dual_mov_b32 v16, s54
-; GFX1250-NEXT: v_dual_mov_b32 v17, s55 :: v_dual_mov_b32 v18, s46
+; GFX1250-NEXT: v_dual_mov_b32 v15, s15 :: v_dual_mov_b32 v16, s34
+; GFX1250-NEXT: v_dual_mov_b32 v17, s35 :: v_dual_mov_b32 v18, s40
; GFX1250-NEXT: s_lshr_b32 s12, s2, 4
; GFX1250-NEXT: s_lshr_b32 s10, s2, 5
-; GFX1250-NEXT: s_bfe_i64 s[18:19], s[18:19], 0x10000
; GFX1250-NEXT: s_bfe_i64 s[20:21], s[20:21], 0x10000
-; GFX1250-NEXT: v_dual_mov_b32 v19, s47 :: v_dual_mov_b32 v20, s44
-; GFX1250-NEXT: v_dual_mov_b32 v21, s45 :: v_dual_mov_b32 v22, s36
+; GFX1250-NEXT: s_bfe_i64 s[22:23], s[22:23], 0x10000
+; GFX1250-NEXT: v_dual_mov_b32 v19, s41 :: v_dual_mov_b32 v20, s36
+; GFX1250-NEXT: v_dual_mov_b32 v21, s37 :: v_dual_mov_b32 v22, s30
; GFX1250-NEXT: s_lshr_b32 s8, s2, 2
; GFX1250-NEXT: s_lshr_b32 s6, s2, 3
-; GFX1250-NEXT: s_bfe_i64 s[14:15], s[14:15], 0x10000
; GFX1250-NEXT: s_bfe_i64 s[16:17], s[16:17], 0x10000
-; GFX1250-NEXT: v_dual_mov_b32 v23, s37 :: v_dual_mov_b32 v24, s34
-; GFX1250-NEXT: v_mov_b32_e32 v25, s35
+; GFX1250-NEXT: s_bfe_i64 s[18:19], s[18:19], 0x10000
+; GFX1250-NEXT: v_dual_mov_b32 v23, s31 :: v_dual_mov_b32 v24, s28
+; GFX1250-NEXT: v_mov_b32_e32 v25, s29
; GFX1250-NEXT: s_clause 0x5
; GFX1250-NEXT: global_store_b128 v0, v[2:5], s[0:1] offset:176
; GFX1250-NEXT: global_store_b128 v0, v[6:9], s[0:1] offset:160
@@ -9435,30 +9341,30 @@ define amdgpu_kernel void @constant_sextload_v32i1_to_v32i64(ptr addrspace(1) %o
; GFX1250-NEXT: global_store_b128 v0, v[22:25], s[0:1] offset:96
; GFX1250-NEXT: s_wait_xcnt 0x5
; GFX1250-NEXT: v_dual_mov_b32 v2, s26 :: v_dual_mov_b32 v3, s27
-; GFX1250-NEXT: v_dual_mov_b32 v4, s22 :: v_dual_mov_b32 v5, s23
+; GFX1250-NEXT: v_dual_mov_b32 v4, s24 :: v_dual_mov_b32 v5, s25
; GFX1250-NEXT: s_wait_xcnt 0x4
-; GFX1250-NEXT: v_mov_b32_e32 v6, s20
-; GFX1250-NEXT: s_lshr_b32 s68, s2, 1
+; GFX1250-NEXT: v_mov_b32_e32 v6, s22
+; GFX1250-NEXT: s_lshr_b32 s4, s2, 1
; GFX1250-NEXT: s_bfe_i64 s[10:11], s[10:11], 0x10000
; GFX1250-NEXT: s_bfe_i64 s[12:13], s[12:13], 0x10000
-; GFX1250-NEXT: v_dual_mov_b32 v7, s21 :: v_dual_mov_b32 v8, s18
+; GFX1250-NEXT: v_dual_mov_b32 v7, s23 :: v_dual_mov_b32 v8, s20
; GFX1250-NEXT: s_wait_xcnt 0x3
-; GFX1250-NEXT: v_dual_mov_b32 v9, s19 :: v_dual_mov_b32 v10, s16
+; GFX1250-NEXT: v_dual_mov_b32 v9, s21 :: v_dual_mov_b32 v10, s18
; GFX1250-NEXT: s_bfe_i64 s[6:7], s[6:7], 0x10000
; GFX1250-NEXT: s_bfe_i64 s[8:9], s[8:9], 0x10000
-; GFX1250-NEXT: v_dual_mov_b32 v11, s17 :: v_dual_mov_b32 v12, s14
+; GFX1250-NEXT: v_dual_mov_b32 v11, s19 :: v_dual_mov_b32 v12, s16
; GFX1250-NEXT: s_wait_xcnt 0x2
-; GFX1250-NEXT: v_dual_mov_b32 v13, s15 :: v_dual_mov_b32 v14, s12
-; GFX1250-NEXT: s_bfe_i64 s[4:5], s[2:3], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[2:3], s[68:69], 0x10000
+; GFX1250-NEXT: v_dual_mov_b32 v13, s17 :: v_dual_mov_b32 v14, s12
+; GFX1250-NEXT: s_bfe_i64 s[2:3], s[2:3], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[4:5], s[4:5], 0x10000
; GFX1250-NEXT: v_dual_mov_b32 v15, s13 :: v_dual_mov_b32 v16, s10
; GFX1250-NEXT: s_wait_xcnt 0x1
; GFX1250-NEXT: v_dual_mov_b32 v17, s11 :: v_dual_mov_b32 v18, s8
; GFX1250-NEXT: v_dual_mov_b32 v19, s9 :: v_dual_mov_b32 v20, s6
; GFX1250-NEXT: s_wait_xcnt 0x0
-; GFX1250-NEXT: v_dual_mov_b32 v21, s7 :: v_dual_mov_b32 v22, s4
-; GFX1250-NEXT: v_dual_mov_b32 v23, s5 :: v_dual_mov_b32 v24, s2
-; GFX1250-NEXT: v_mov_b32_e32 v25, s3
+; GFX1250-NEXT: v_dual_mov_b32 v21, s7 :: v_dual_mov_b32 v22, s2
+; GFX1250-NEXT: v_dual_mov_b32 v23, s3 :: v_dual_mov_b32 v24, s4
+; GFX1250-NEXT: v_mov_b32_e32 v25, s5
; GFX1250-NEXT: s_clause 0x5
; GFX1250-NEXT: global_store_b128 v0, v[2:5], s[0:1] offset:80
; GFX1250-NEXT: global_store_b128 v0, v[6:9], s[0:1] offset:64
@@ -10462,20 +10368,15 @@ define amdgpu_kernel void @constant_zextload_v64i1_to_v64i64(ptr addrspace(1) %o
; GFX1250-NEXT: s_wait_kmcnt 0x0
; GFX1250-NEXT: s_load_b64 s[2:3], s[2:3], 0x0 nv
; GFX1250-NEXT: s_wait_kmcnt 0x0
-; GFX1250-NEXT: s_bfe_u32 s4, s3, 0x10014
+; GFX1250-NEXT: s_bfe_u32 s4, s3, 0x1001e
; GFX1250-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)
; GFX1250-NEXT: v_dual_mov_b32 v3, 0 :: v_dual_mov_b32 v2, s4
-; GFX1250-NEXT: s_bfe_u32 s5, s3, 0x10015
-; GFX1250-NEXT: s_lshr_b32 s4, s3, 31
+; GFX1250-NEXT: s_lshr_b32 s5, s3, 31
+; GFX1250-NEXT: s_bfe_u32 s4, s3, 0x1001d
; GFX1250-NEXT: v_dual_mov_b32 v4, s5 :: v_dual_mov_b32 v5, v3
-; GFX1250-NEXT: s_bfe_u32 s5, s3, 0x1001e
+; GFX1250-NEXT: s_bfe_u32 s5, s3, 0x1001c
; GFX1250-NEXT: s_bfe_u32 s6, s3, 0x10003
; GFX1250-NEXT: s_bfe_u32 s7, s3, 0x10002
-; GFX1250-NEXT: global_store_b128 v3, v[2:5], s[0:1] offset:416
-; GFX1250-NEXT: s_wait_xcnt 0x0
-; GFX1250-NEXT: v_dual_mov_b32 v2, s5 :: v_dual_mov_b32 v4, s4
-; GFX1250-NEXT: s_bfe_u32 s4, s3, 0x1001d
-; GFX1250-NEXT: s_bfe_u32 s5, s3, 0x1001c
; GFX1250-NEXT: global_store_b128 v3, v[2:5], s[0:1] offset:496
; GFX1250-NEXT: s_wait_xcnt 0x0
; GFX1250-NEXT: v_dual_mov_b32 v2, s5 :: v_dual_mov_b32 v4, s4
@@ -10494,9 +10395,14 @@ define amdgpu_kernel void @constant_zextload_v64i1_to_v64i64(ptr addrspace(1) %o
; GFX1250-NEXT: global_store_b128 v3, v[2:5], s[0:1] offset:448
; GFX1250-NEXT: s_wait_xcnt 0x0
; GFX1250-NEXT: v_dual_mov_b32 v2, s5 :: v_dual_mov_b32 v4, s4
+; GFX1250-NEXT: s_bfe_u32 s4, s3, 0x10015
+; GFX1250-NEXT: s_bfe_u32 s5, s3, 0x10014
+; GFX1250-NEXT: global_store_b128 v3, v[2:5], s[0:1] offset:432
+; GFX1250-NEXT: s_wait_xcnt 0x0
+; GFX1250-NEXT: v_dual_mov_b32 v2, s5 :: v_dual_mov_b32 v4, s4
; GFX1250-NEXT: s_bfe_u32 s4, s3, 0x10013
; GFX1250-NEXT: s_bfe_u32 s5, s3, 0x10012
-; GFX1250-NEXT: global_store_b128 v3, v[2:5], s[0:1] offset:432
+; GFX1250-NEXT: global_store_b128 v3, v[2:5], s[0:1] offset:416
; GFX1250-NEXT: s_wait_xcnt 0x0
; GFX1250-NEXT: v_dual_mov_b32 v2, s5 :: v_dual_mov_b32 v4, s4
; GFX1250-NEXT: s_bfe_u32 s4, s3, 0x10011
@@ -10574,13 +10480,15 @@ define amdgpu_kernel void @constant_zextload_v64i1_to_v64i64(ptr addrspace(1) %o
; GFX1250-NEXT: s_bfe_u32 s4, s2, 0x10016
; GFX1250-NEXT: global_store_b128 v3, v[2:5], s[0:1] offset:192
; GFX1250-NEXT: s_wait_xcnt 0x0
-; GFX1250-NEXT: v_dual_mov_b32 v2, s4 :: v_dual_mov_b32 v4, s3
-; GFX1250-NEXT: s_bfe_u32 s3, s2, 0x10014
-; GFX1250-NEXT: s_bfe_u32 s4, s2, 0x10015
+; GFX1250-NEXT: v_mov_b32_e32 v4, s3
+; GFX1250-NEXT: s_bfe_u32 s3, s2, 0x10015
+; GFX1250-NEXT: v_mov_b32_e32 v2, s4
+; GFX1250-NEXT: s_bfe_u32 s4, s2, 0x10014
; GFX1250-NEXT: global_store_b128 v3, v[2:5], s[0:1] offset:176
; GFX1250-NEXT: s_wait_xcnt 0x0
-; GFX1250-NEXT: v_dual_mov_b32 v2, s3 :: v_dual_mov_b32 v4, s4
+; GFX1250-NEXT: v_mov_b32_e32 v4, s3
; GFX1250-NEXT: s_bfe_u32 s3, s2, 0x10013
+; GFX1250-NEXT: v_mov_b32_e32 v2, s4
; GFX1250-NEXT: s_bfe_u32 s4, s2, 0x10012
; GFX1250-NEXT: global_store_b128 v3, v[2:5], s[0:1] offset:160
; GFX1250-NEXT: s_wait_xcnt 0x0
@@ -12034,106 +11942,141 @@ define amdgpu_kernel void @constant_sextload_v64i1_to_v64i64(ptr addrspace(1) %o
; GFX1250-NEXT: v_nop
; GFX1250-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
; GFX1250-NEXT: s_load_b128 s[0:3], s[4:5], 0x24 nv
-; GFX1250-NEXT: s_mov_b32 s49, 0
+; GFX1250-NEXT: ; implicit-def: $vgpr17 : SGPR spill to VGPR lane
+; GFX1250-NEXT: s_mov_b32 s7, 0
; GFX1250-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
-; GFX1250-NEXT: s_mov_b32 s45, s49
-; GFX1250-NEXT: s_mov_b32 s37, s49
-; GFX1250-NEXT: s_mov_b32 s41, s49
-; GFX1250-NEXT: s_mov_b32 s27, s49
-; GFX1250-NEXT: s_mov_b32 s31, s49
-; GFX1250-NEXT: s_mov_b32 s17, s49
-; GFX1250-NEXT: s_mov_b32 s25, s49
-; GFX1250-NEXT: s_wait_xcnt 0x0
-; GFX1250-NEXT: s_mov_b32 s5, s49
-; GFX1250-NEXT: s_mov_b32 s55, s49
+; GFX1250-NEXT: s_mov_b32 s49, s7
+; GFX1250-NEXT: s_mov_b32 s41, s7
+; GFX1250-NEXT: s_mov_b32 s31, s7
+; GFX1250-NEXT: s_mov_b32 s23, s7
+; GFX1250-NEXT: s_mov_b32 s61, s7
+; GFX1250-NEXT: s_mov_b32 s17, s7
+; GFX1250-NEXT: s_mov_b32 s81, s7
+; GFX1250-NEXT: s_mov_b32 s19, s7
+; GFX1250-NEXT: s_mov_b32 s53, s7
; GFX1250-NEXT: s_wait_kmcnt 0x0
-; GFX1250-NEXT: s_load_b64 s[2:3], s[2:3], 0x0 nv
+; GFX1250-NEXT: s_load_b64 s[4:5], s[2:3], 0x0 nv
; GFX1250-NEXT: s_wait_kmcnt 0x0
-; GFX1250-NEXT: s_lshr_b32 s94, s3, 30
-; GFX1250-NEXT: s_lshr_b32 s84, s3, 31
-; GFX1250-NEXT: s_lshr_b32 s90, s3, 28
-; GFX1250-NEXT: s_lshr_b32 s70, s3, 29
-; GFX1250-NEXT: s_lshr_b32 s68, s3, 27
-; GFX1250-NEXT: s_lshr_b32 s48, s3, 24
-; GFX1250-NEXT: s_lshr_b32 s80, s3, 26
-; GFX1250-NEXT: s_bfe_i64 s[94:95], s[94:95], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[84:85], s[84:85], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[102:103], s[90:91], 0x10000
-; GFX1250-NEXT: s_lshr_b32 s60, s3, 25
-; GFX1250-NEXT: s_bfe_i64 s[70:71], s[70:71], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[68:69], s[68:69], 0x10000
+; GFX1250-NEXT: s_lshr_b32 s2, s5, 1
+; GFX1250-NEXT: s_lshr_b32 s88, s5, 30
+; GFX1250-NEXT: v_writelane_b32 v17, s2, 0
+; GFX1250-NEXT: s_lshr_b32 s86, s5, 31
+; GFX1250-NEXT: s_lshr_b32 s48, s5, 22
+; GFX1250-NEXT: s_lshr_b32 s40, s5, 23
+; GFX1250-NEXT: s_lshr_b32 s8, s5, 28
+; GFX1250-NEXT: v_writelane_b32 v17, s3, 1
+; GFX1250-NEXT: s_lshr_b32 s2, s5, 2
+; GFX1250-NEXT: s_lshr_b32 s76, s5, 29
+; GFX1250-NEXT: s_lshr_b32 s30, s5, 20
+; GFX1250-NEXT: s_lshr_b32 s22, s5, 21
+; GFX1250-NEXT: v_writelane_b32 v17, s2, 2
+; GFX1250-NEXT: s_lshr_b32 s68, s5, 26
+; GFX1250-NEXT: s_bfe_i64 s[8:9], s[8:9], 0x10000
; GFX1250-NEXT: s_bfe_i64 s[48:49], s[48:49], 0x10000
-; GFX1250-NEXT: v_dual_mov_b32 v16, 0 :: v_dual_mov_b32 v0, s94
-; GFX1250-NEXT: s_lshr_b32 s44, s3, 22
-; GFX1250-NEXT: s_lshr_b32 s36, s3, 23
-; GFX1250-NEXT: v_dual_mov_b32 v1, s95 :: v_dual_mov_b32 v2, s84
-; GFX1250-NEXT: v_dual_mov_b32 v3, s85 :: v_dual_mov_b32 v4, s102
-; GFX1250-NEXT: v_dual_mov_b32 v5, s103 :: v_dual_mov_b32 v6, s70
-; GFX1250-NEXT: s_bfe_i64 s[102:103], s[80:81], 0x10000
-; GFX1250-NEXT: s_lshr_b32 s40, s3, 20
-; GFX1250-NEXT: s_lshr_b32 s26, s3, 21
-; GFX1250-NEXT: s_lshr_b32 s4, s3, 17
-; GFX1250-NEXT: s_lshr_b32 s6, s3, 14
-; GFX1250-NEXT: s_lshr_b32 s8, s3, 15
-; GFX1250-NEXT: v_dual_mov_b32 v7, s71 :: v_dual_mov_b32 v8, s102
-; GFX1250-NEXT: v_dual_mov_b32 v11, s69 :: v_dual_mov_b32 v12, s48
-; GFX1250-NEXT: v_mov_b32_e32 v13, s49
-; GFX1250-NEXT: s_bfe_i64 s[48:49], s[60:61], 0x10000
-; GFX1250-NEXT: s_lshr_b32 s30, s3, 18
-; GFX1250-NEXT: s_lshr_b32 s16, s3, 19
-; GFX1250-NEXT: s_lshr_b32 s10, s3, 12
-; GFX1250-NEXT: s_lshr_b32 s12, s3, 13
-; GFX1250-NEXT: v_dual_mov_b32 v9, s103 :: v_dual_mov_b32 v10, s68
-; GFX1250-NEXT: s_bfe_i64 s[44:45], s[44:45], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[36:37], s[36:37], 0x10000
-; GFX1250-NEXT: s_lshr_b32 s24, s3, 16
-; GFX1250-NEXT: s_lshr_b32 s14, s3, 10
-; GFX1250-NEXT: s_lshr_b32 s18, s3, 11
-; GFX1250-NEXT: v_dual_mov_b32 v14, s48 :: v_dual_mov_b32 v15, s49
-; GFX1250-NEXT: v_mov_b32_e32 v18, s44
; GFX1250-NEXT: s_bfe_i64 s[40:41], s[40:41], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[26:27], s[26:27], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[8:9], s[8:9], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[6:7], s[6:7], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[4:5], s[4:5], 0x10000
-; GFX1250-NEXT: s_lshr_b32 s20, s3, 8
-; GFX1250-NEXT: s_lshr_b32 s22, s3, 9
-; GFX1250-NEXT: v_dual_mov_b32 v19, s45 :: v_dual_mov_b32 v20, s36
-; GFX1250-NEXT: v_dual_mov_b32 v21, s37 :: v_dual_mov_b32 v22, s40
+; GFX1250-NEXT: v_writelane_b32 v17, s3, 3
+; GFX1250-NEXT: s_lshr_b32 s2, s5, 3
+; GFX1250-NEXT: s_lshr_b32 s60, s5, 24
+; GFX1250-NEXT: s_lshr_b32 s56, s5, 25
; GFX1250-NEXT: s_bfe_i64 s[30:31], s[30:31], 0x10000
+; GFX1250-NEXT: v_writelane_b32 v17, s2, 4
+; GFX1250-NEXT: s_bfe_i64 s[22:23], s[22:23], 0x10000
+; GFX1250-NEXT: s_lshr_b32 s66, s5, 27
+; GFX1250-NEXT: s_bfe_i64 s[68:69], s[68:69], 0x10000
+; GFX1250-NEXT: v_dual_mov_b32 v19, s49 :: v_dual_mov_b32 v20, s40
+; GFX1250-NEXT: v_writelane_b32 v17, s3, 5
+; GFX1250-NEXT: s_lshr_b32 s2, s5, 4
+; GFX1250-NEXT: s_lshr_b32 s40, s4, 10
+; GFX1250-NEXT: s_lshr_b32 s16, s5, 18
+; GFX1250-NEXT: s_lshr_b32 s80, s5, 19
+; GFX1250-NEXT: v_writelane_b32 v17, s2, 6
+; GFX1250-NEXT: s_lshr_b32 s10, s4, 5
+; GFX1250-NEXT: s_bfe_i64 s[60:61], s[60:61], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[56:57], s[56:57], 0x10000
+; GFX1250-NEXT: v_dual_mov_b32 v23, s31 :: v_dual_mov_b32 v24, s22
+; GFX1250-NEXT: v_writelane_b32 v17, s3, 7
+; GFX1250-NEXT: s_bfe_i64 s[2:3], s[88:89], 0x10000
+; GFX1250-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX1250-NEXT: v_dual_mov_b32 v16, 0 :: v_dual_mov_b32 v0, s2
+; GFX1250-NEXT: v_mov_b32_e32 v1, s3
+; GFX1250-NEXT: s_bfe_i64 s[2:3], s[86:87], 0x10000
+; GFX1250-NEXT: s_lshr_b32 s22, s4, 12
+; GFX1250-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX1250-NEXT: v_mov_b32_e32 v4, s8
+; GFX1250-NEXT: s_bfe_i64 s[2:3], s[76:77], 0x10000
+; GFX1250-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_3) | instid1(SALU_CYCLE_1)
+; GFX1250-NEXT: v_dual_mov_b32 v5, s9 :: v_dual_mov_b32 v6, s2
+; GFX1250-NEXT: s_lshr_b32 s2, s4, 7
+; GFX1250-NEXT: v_dual_mov_b32 v7, s3 :: v_dual_mov_b32 v8, s68
+; GFX1250-NEXT: s_bfe_i64 s[66:67], s[66:67], 0x10000
+; GFX1250-NEXT: v_dual_mov_b32 v9, s69 :: v_dual_mov_b32 v10, s66
+; GFX1250-NEXT: v_dual_mov_b32 v21, s41 :: v_dual_mov_b32 v22, s30
+; GFX1250-NEXT: s_bfe_i64 s[68:69], s[40:41], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[40:41], s[2:3], 0x10000
+; GFX1250-NEXT: v_readlane_b32 s2, v17, 6
+; GFX1250-NEXT: v_dual_mov_b32 v13, s61 :: v_dual_mov_b32 v14, s56
+; GFX1250-NEXT: v_dual_mov_b32 v15, s57 :: v_dual_mov_b32 v18, s48
; GFX1250-NEXT: s_bfe_i64 s[16:17], s[16:17], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[12:13], s[12:13], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[10:11], s[10:11], 0x10000
-; GFX1250-NEXT: s_lshr_b32 s28, s3, 6
-; GFX1250-NEXT: s_lshr_b32 s34, s3, 7
-; GFX1250-NEXT: v_dual_mov_b32 v23, s41 :: v_dual_mov_b32 v24, s26
-; GFX1250-NEXT: v_dual_mov_b32 v25, s27 :: v_dual_mov_b32 v26, s30
-; GFX1250-NEXT: s_bfe_i64 s[24:25], s[24:25], 0x10000
+; GFX1250-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
+; GFX1250-NEXT: v_dual_mov_b32 v25, s23 :: v_dual_mov_b32 v26, s16
+; GFX1250-NEXT: s_bfe_i64 s[56:57], s[80:81], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[80:81], s[22:23], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[22:23], s[10:11], 0x10000
+; GFX1250-NEXT: v_readlane_b32 s3, v17, 7
+; GFX1250-NEXT: v_readlane_b32 s10, v17, 2
+; GFX1250-NEXT: v_readlane_b32 s11, v17, 3
+; GFX1250-NEXT: s_lshr_b32 s50, s5, 15
+; GFX1250-NEXT: s_lshr_b32 s12, s4, 4
+; GFX1250-NEXT: s_lshr_b32 s30, s4, 11
+; GFX1250-NEXT: s_lshr_b32 s18, s5, 17
+; GFX1250-NEXT: s_lshr_b32 s46, s5, 14
+; GFX1250-NEXT: s_lshr_b32 s16, s4, 13
+; GFX1250-NEXT: s_lshr_b32 s42, s5, 12
+; GFX1250-NEXT: s_lshr_b32 s44, s5, 13
+; GFX1250-NEXT: v_dual_mov_b32 v11, s67 :: v_dual_mov_b32 v12, s60
+; GFX1250-NEXT: s_bfe_i64 s[66:67], s[30:31], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[30:31], s[12:13], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[12:13], s[50:51], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[50:51], s[2:3], 0x10000
+; GFX1250-NEXT: v_readlane_b32 s2, v17, 4
+; GFX1250-NEXT: s_lshr_b32 s6, s5, 16
+; GFX1250-NEXT: s_lshr_b32 s36, s5, 10
+; GFX1250-NEXT: s_lshr_b32 s38, s5, 11
+; GFX1250-NEXT: v_dual_mov_b32 v27, s17 :: v_dual_mov_b32 v28, s56
+; GFX1250-NEXT: s_bfe_i64 s[76:77], s[16:17], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[46:47], s[46:47], 0x10000
+; GFX1250-NEXT: v_readlane_b32 s3, v17, 5
+; GFX1250-NEXT: s_bfe_i64 s[16:17], s[10:11], 0x10000
+; GFX1250-NEXT: v_readlane_b32 s10, v17, 0
; GFX1250-NEXT: s_bfe_i64 s[18:19], s[18:19], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[14:15], s[14:15], 0x10000
+; GFX1250-NEXT: s_lshr_b32 s28, s5, 8
+; GFX1250-NEXT: s_lshr_b32 s34, s5, 9
+; GFX1250-NEXT: s_bfe_i64 s[44:45], s[44:45], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[42:43], s[42:43], 0x10000
+; GFX1250-NEXT: v_readlane_b32 s11, v17, 1
+; GFX1250-NEXT: s_lshr_b32 s24, s5, 6
+; GFX1250-NEXT: s_lshr_b32 s26, s5, 7
+; GFX1250-NEXT: s_bfe_i64 s[6:7], s[6:7], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[38:39], s[38:39], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[36:37], s[36:37], 0x10000
; GFX1250-NEXT: s_clause 0x1
; GFX1250-NEXT: global_store_b128 v16, v[0:3], s[0:1] offset:496
; GFX1250-NEXT: global_store_b128 v16, v[4:7], s[0:1] offset:480
; GFX1250-NEXT: s_wait_xcnt 0x1
-; GFX1250-NEXT: v_dual_mov_b32 v33, s5 :: v_dual_mov_b32 v0, s6
-; GFX1250-NEXT: v_dual_mov_b32 v1, s7 :: v_dual_mov_b32 v2, s8
+; GFX1250-NEXT: v_dual_mov_b32 v33, s19 :: v_dual_mov_b32 v0, s46
+; GFX1250-NEXT: v_dual_mov_b32 v1, s47 :: v_dual_mov_b32 v2, s12
; GFX1250-NEXT: s_wait_xcnt 0x0
-; GFX1250-NEXT: v_dual_mov_b32 v3, s9 :: v_dual_mov_b32 v4, s10
-; GFX1250-NEXT: s_lshr_b32 s38, s3, 4
-; GFX1250-NEXT: s_lshr_b32 s42, s3, 5
-; GFX1250-NEXT: s_lshr_b32 s46, s3, 2
-; GFX1250-NEXT: s_lshr_b32 s50, s3, 3
-; GFX1250-NEXT: v_dual_mov_b32 v27, s31 :: v_dual_mov_b32 v28, s16
-; GFX1250-NEXT: v_dual_mov_b32 v29, s17 :: v_dual_mov_b32 v30, s24
-; GFX1250-NEXT: s_bfe_i64 s[22:23], s[22:23], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[20:21], s[20:21], 0x10000
-; GFX1250-NEXT: v_dual_mov_b32 v5, s11 :: v_dual_mov_b32 v6, s12
-; GFX1250-NEXT: v_mov_b32_e32 v7, s13
-; GFX1250-NEXT: s_lshr_b32 s52, s3, 1
-; GFX1250-NEXT: s_mov_b32 s54, s3
-; GFX1250-NEXT: v_dual_mov_b32 v31, s25 :: v_dual_mov_b32 v32, s4
+; GFX1250-NEXT: v_dual_mov_b32 v3, s13 :: v_dual_mov_b32 v4, s42
+; GFX1250-NEXT: s_lshr_b32 s20, s5, 5
+; GFX1250-NEXT: v_dual_mov_b32 v29, s57 :: v_dual_mov_b32 v30, s6
; GFX1250-NEXT: s_bfe_i64 s[34:35], s[34:35], 0x10000
; GFX1250-NEXT: s_bfe_i64 s[28:29], s[28:29], 0x10000
+; GFX1250-NEXT: v_dual_mov_b32 v5, s43 :: v_dual_mov_b32 v6, s44
+; GFX1250-NEXT: v_mov_b32_e32 v7, s45
+; GFX1250-NEXT: s_mov_b32 s52, s5
+; GFX1250-NEXT: v_dual_mov_b32 v31, s7 :: v_dual_mov_b32 v32, s18
+; GFX1250-NEXT: s_bfe_i64 s[26:27], s[26:27], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[24:25], s[24:25], 0x10000
; GFX1250-NEXT: s_clause 0x5
; GFX1250-NEXT: global_store_b128 v16, v[8:11], s[0:1] offset:464
; GFX1250-NEXT: global_store_b128 v16, v[12:15], s[0:1] offset:448
@@ -12142,32 +12085,30 @@ define amdgpu_kernel void @constant_sextload_v64i1_to_v64i64(ptr addrspace(1) %o
; GFX1250-NEXT: global_store_b128 v16, v[26:29], s[0:1] offset:400
; GFX1250-NEXT: global_store_b128 v16, v[30:33], s[0:1] offset:384
; GFX1250-NEXT: s_wait_xcnt 0x5
-; GFX1250-NEXT: v_dual_mov_b32 v8, s14 :: v_dual_mov_b32 v9, s15
-; GFX1250-NEXT: v_dual_mov_b32 v10, s18 :: v_dual_mov_b32 v11, s19
+; GFX1250-NEXT: v_dual_mov_b32 v8, s36 :: v_dual_mov_b32 v9, s37
+; GFX1250-NEXT: v_dual_mov_b32 v10, s38 :: v_dual_mov_b32 v11, s39
; GFX1250-NEXT: s_wait_xcnt 0x4
-; GFX1250-NEXT: v_mov_b32_e32 v12, s20
-; GFX1250-NEXT: s_lshr_b32 s56, s2, 30
-; GFX1250-NEXT: s_lshr_b32 s58, s2, 31
-; GFX1250-NEXT: s_bfe_i64 s[50:51], s[50:51], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[46:47], s[46:47], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[42:43], s[42:43], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[38:39], s[38:39], 0x10000
-; GFX1250-NEXT: v_dual_mov_b32 v13, s21 :: v_dual_mov_b32 v14, s22
+; GFX1250-NEXT: v_mov_b32_e32 v12, s28
+; GFX1250-NEXT: s_lshr_b32 s98, s4, 30
+; GFX1250-NEXT: s_lshr_b32 s100, s4, 31
+; GFX1250-NEXT: s_bfe_i64 s[20:21], s[20:21], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[2:3], s[2:3], 0x10000
+; GFX1250-NEXT: v_dual_mov_b32 v13, s29 :: v_dual_mov_b32 v14, s34
; GFX1250-NEXT: s_wait_xcnt 0x3
-; GFX1250-NEXT: v_dual_mov_b32 v15, s23 :: v_dual_mov_b32 v18, s28
-; GFX1250-NEXT: s_lshr_b32 s62, s2, 28
-; GFX1250-NEXT: s_lshr_b32 s64, s2, 29
-; GFX1250-NEXT: s_bfe_i64 s[54:55], s[54:55], 0x10000
+; GFX1250-NEXT: v_dual_mov_b32 v15, s35 :: v_dual_mov_b32 v18, s24
+; GFX1250-NEXT: s_lshr_b32 s94, s4, 28
+; GFX1250-NEXT: s_lshr_b32 s96, s4, 29
; GFX1250-NEXT: s_bfe_i64 s[52:53], s[52:53], 0x10000
-; GFX1250-NEXT: v_dual_mov_b32 v19, s29 :: v_dual_mov_b32 v20, s34
+; GFX1250-NEXT: s_bfe_i64 s[10:11], s[10:11], 0x10000
+; GFX1250-NEXT: v_dual_mov_b32 v19, s25 :: v_dual_mov_b32 v20, s26
; GFX1250-NEXT: s_wait_xcnt 0x2
-; GFX1250-NEXT: v_dual_mov_b32 v21, s35 :: v_dual_mov_b32 v22, s38
-; GFX1250-NEXT: s_lshr_b32 s66, s2, 26
-; GFX1250-NEXT: s_lshr_b32 s72, s2, 27
-; GFX1250-NEXT: s_bfe_i64 s[58:59], s[58:59], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[56:57], s[56:57], 0x10000
-; GFX1250-NEXT: v_dual_mov_b32 v23, s39 :: v_dual_mov_b32 v24, s42
-; GFX1250-NEXT: v_mov_b32_e32 v25, s43
+; GFX1250-NEXT: v_dual_mov_b32 v21, s27 :: v_dual_mov_b32 v22, s50
+; GFX1250-NEXT: s_lshr_b32 s90, s4, 26
+; GFX1250-NEXT: s_lshr_b32 s92, s4, 27
+; GFX1250-NEXT: s_bfe_i64 s[100:101], s[100:101], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[98:99], s[98:99], 0x10000
+; GFX1250-NEXT: v_dual_mov_b32 v23, s51 :: v_dual_mov_b32 v24, s20
+; GFX1250-NEXT: v_mov_b32_e32 v25, s21
; GFX1250-NEXT: s_clause 0x5
; GFX1250-NEXT: global_store_b128 v16, v[0:3], s[0:1] offset:368
; GFX1250-NEXT: global_store_b128 v16, v[4:7], s[0:1] offset:352
@@ -12176,48 +12117,48 @@ define amdgpu_kernel void @constant_sextload_v64i1_to_v64i64(ptr addrspace(1) %o
; GFX1250-NEXT: global_store_b128 v16, v[18:21], s[0:1] offset:304
; GFX1250-NEXT: global_store_b128 v16, v[22:25], s[0:1] offset:288
; GFX1250-NEXT: s_wait_xcnt 0x5
-; GFX1250-NEXT: v_dual_mov_b32 v0, s46 :: v_dual_mov_b32 v1, s47
-; GFX1250-NEXT: v_dual_mov_b32 v2, s50 :: v_dual_mov_b32 v3, s51
+; GFX1250-NEXT: v_dual_mov_b32 v0, s16 :: v_dual_mov_b32 v1, s17
+; GFX1250-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
; GFX1250-NEXT: s_wait_xcnt 0x4
-; GFX1250-NEXT: v_mov_b32_e32 v4, s54
-; GFX1250-NEXT: s_lshr_b32 s74, s2, 24
-; GFX1250-NEXT: s_lshr_b32 s76, s2, 25
-; GFX1250-NEXT: s_lshr_b32 s78, s2, 22
-; GFX1250-NEXT: s_lshr_b32 s82, s2, 23
-; GFX1250-NEXT: s_bfe_i64 s[64:65], s[64:65], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[62:63], s[62:63], 0x10000
-; GFX1250-NEXT: v_dual_mov_b32 v5, s55 :: v_dual_mov_b32 v6, s52
+; GFX1250-NEXT: v_mov_b32_e32 v4, s52
+; GFX1250-NEXT: s_lshr_b32 s74, s4, 22
+; GFX1250-NEXT: s_lshr_b32 s78, s4, 23
+; GFX1250-NEXT: s_lshr_b32 s82, s4, 24
+; GFX1250-NEXT: s_lshr_b32 s84, s4, 25
+; GFX1250-NEXT: s_bfe_i64 s[96:97], s[96:97], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[94:95], s[94:95], 0x10000
+; GFX1250-NEXT: v_dual_mov_b32 v5, s53 :: v_dual_mov_b32 v6, s10
; GFX1250-NEXT: s_wait_xcnt 0x3
-; GFX1250-NEXT: v_dual_mov_b32 v7, s53 :: v_dual_mov_b32 v8, s56
-; GFX1250-NEXT: s_lshr_b32 s86, s2, 20
-; GFX1250-NEXT: s_lshr_b32 s88, s2, 21
-; GFX1250-NEXT: s_bfe_i64 s[72:73], s[72:73], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[66:67], s[66:67], 0x10000
-; GFX1250-NEXT: v_dual_mov_b32 v9, s57 :: v_dual_mov_b32 v10, s58
+; GFX1250-NEXT: v_dual_mov_b32 v7, s11 :: v_dual_mov_b32 v8, s98
+; GFX1250-NEXT: s_lshr_b32 s70, s4, 20
+; GFX1250-NEXT: s_lshr_b32 s72, s4, 21
+; GFX1250-NEXT: s_bfe_i64 s[92:93], s[92:93], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[90:91], s[90:91], 0x10000
+; GFX1250-NEXT: v_dual_mov_b32 v9, s99 :: v_dual_mov_b32 v10, s100
; GFX1250-NEXT: s_wait_xcnt 0x2
-; GFX1250-NEXT: v_dual_mov_b32 v11, s59 :: v_dual_mov_b32 v12, s62
-; GFX1250-NEXT: s_lshr_b32 s92, s2, 18
-; GFX1250-NEXT: s_lshr_b32 s96, s2, 19
+; GFX1250-NEXT: v_dual_mov_b32 v11, s101 :: v_dual_mov_b32 v12, s94
+; GFX1250-NEXT: s_lshr_b32 s62, s4, 18
+; GFX1250-NEXT: s_lshr_b32 s64, s4, 19
+; GFX1250-NEXT: s_bfe_i64 s[84:85], s[84:85], 0x10000
; GFX1250-NEXT: s_bfe_i64 s[82:83], s[82:83], 0x10000
; GFX1250-NEXT: s_bfe_i64 s[78:79], s[78:79], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[76:77], s[76:77], 0x10000
; GFX1250-NEXT: s_bfe_i64 s[74:75], s[74:75], 0x10000
-; GFX1250-NEXT: v_dual_mov_b32 v13, s63 :: v_dual_mov_b32 v14, s64
+; GFX1250-NEXT: v_dual_mov_b32 v13, s95 :: v_dual_mov_b32 v14, s96
; GFX1250-NEXT: s_wait_xcnt 0x1
-; GFX1250-NEXT: v_dual_mov_b32 v15, s65 :: v_dual_mov_b32 v18, s66
-; GFX1250-NEXT: s_lshr_b32 s98, s2, 16
-; GFX1250-NEXT: s_lshr_b32 s100, s2, 17
-; GFX1250-NEXT: s_bfe_i64 s[88:89], s[88:89], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[86:87], s[86:87], 0x10000
-; GFX1250-NEXT: v_dual_mov_b32 v19, s67 :: v_dual_mov_b32 v20, s72
+; GFX1250-NEXT: v_dual_mov_b32 v15, s97 :: v_dual_mov_b32 v18, s90
+; GFX1250-NEXT: s_lshr_b32 s54, s4, 16
+; GFX1250-NEXT: s_lshr_b32 s58, s4, 17
+; GFX1250-NEXT: s_bfe_i64 s[72:73], s[72:73], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[70:71], s[70:71], 0x10000
+; GFX1250-NEXT: v_dual_mov_b32 v19, s91 :: v_dual_mov_b32 v20, s92
; GFX1250-NEXT: s_wait_xcnt 0x0
-; GFX1250-NEXT: v_dual_mov_b32 v21, s73 :: v_dual_mov_b32 v22, s74
-; GFX1250-NEXT: s_lshr_b32 s94, s2, 14
-; GFX1250-NEXT: s_lshr_b32 s90, s2, 15
-; GFX1250-NEXT: s_bfe_i64 s[96:97], s[96:97], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[92:93], s[92:93], 0x10000
-; GFX1250-NEXT: v_dual_mov_b32 v23, s75 :: v_dual_mov_b32 v24, s76
-; GFX1250-NEXT: v_mov_b32_e32 v25, s77
+; GFX1250-NEXT: v_dual_mov_b32 v21, s93 :: v_dual_mov_b32 v22, s82
+; GFX1250-NEXT: s_lshr_b32 s56, s4, 14
+; GFX1250-NEXT: s_lshr_b32 s6, s4, 15
+; GFX1250-NEXT: s_bfe_i64 s[64:65], s[64:65], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[62:63], s[62:63], 0x10000
+; GFX1250-NEXT: v_dual_mov_b32 v23, s83 :: v_dual_mov_b32 v24, s84
+; GFX1250-NEXT: v_mov_b32_e32 v25, s85
; GFX1250-NEXT: s_clause 0x5
; GFX1250-NEXT: global_store_b128 v16, v[0:3], s[0:1] offset:272
; GFX1250-NEXT: global_store_b128 v16, v[4:7], s[0:1] offset:256
@@ -12226,53 +12167,36 @@ define amdgpu_kernel void @constant_sextload_v64i1_to_v64i64(ptr addrspace(1) %o
; GFX1250-NEXT: global_store_b128 v16, v[18:21], s[0:1] offset:208
; GFX1250-NEXT: global_store_b128 v16, v[22:25], s[0:1] offset:192
; GFX1250-NEXT: s_wait_xcnt 0x5
-; GFX1250-NEXT: v_dual_mov_b32 v0, s78 :: v_dual_mov_b32 v1, s79
-; GFX1250-NEXT: v_dual_mov_b32 v2, s82 :: v_dual_mov_b32 v3, s83
+; GFX1250-NEXT: v_dual_mov_b32 v0, s74 :: v_dual_mov_b32 v1, s75
+; GFX1250-NEXT: v_dual_mov_b32 v2, s78 :: v_dual_mov_b32 v3, s79
; GFX1250-NEXT: s_wait_xcnt 0x4
-; GFX1250-NEXT: v_mov_b32_e32 v4, s86
-; GFX1250-NEXT: s_lshr_b32 s84, s2, 12
-; GFX1250-NEXT: s_lshr_b32 s80, s2, 13
-; GFX1250-NEXT: s_lshr_b32 s70, s2, 10
-; GFX1250-NEXT: s_lshr_b32 s68, s2, 11
-; GFX1250-NEXT: s_bfe_i64 s[100:101], s[100:101], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[98:99], s[98:99], 0x10000
-; GFX1250-NEXT: v_dual_mov_b32 v5, s87 :: v_dual_mov_b32 v6, s88
+; GFX1250-NEXT: v_mov_b32_e32 v4, s70
+; GFX1250-NEXT: s_bfe_i64 s[58:59], s[58:59], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[54:55], s[54:55], 0x10000
+; GFX1250-NEXT: v_dual_mov_b32 v5, s71 :: v_dual_mov_b32 v6, s72
; GFX1250-NEXT: s_wait_xcnt 0x3
-; GFX1250-NEXT: v_dual_mov_b32 v7, s89 :: v_dual_mov_b32 v8, s92
-; GFX1250-NEXT: s_lshr_b32 s102, s2, 8
-; GFX1250-NEXT: s_lshr_b32 s48, s2, 9
-; GFX1250-NEXT: s_lshr_b32 s60, s2, 7
-; GFX1250-NEXT: s_lshr_b32 s40, s2, 5
-; GFX1250-NEXT: s_lshr_b32 s30, s2, 3
-; GFX1250-NEXT: s_lshr_b32 s24, s2, 1
-; GFX1250-NEXT: s_bfe_i64 s[90:91], s[90:91], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[94:95], s[94:95], 0x10000
-; GFX1250-NEXT: v_dual_mov_b32 v9, s93 :: v_dual_mov_b32 v10, s96
+; GFX1250-NEXT: v_dual_mov_b32 v7, s73 :: v_dual_mov_b32 v8, s62
+; GFX1250-NEXT: s_lshr_b32 s60, s4, 8
+; GFX1250-NEXT: s_lshr_b32 s48, s4, 9
+; GFX1250-NEXT: s_bfe_i64 s[86:87], s[6:7], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[88:89], s[56:57], 0x10000
+; GFX1250-NEXT: v_dual_mov_b32 v9, s63 :: v_dual_mov_b32 v10, s64
; GFX1250-NEXT: s_wait_xcnt 0x2
-; GFX1250-NEXT: v_dual_mov_b32 v11, s97 :: v_dual_mov_b32 v12, s98
-; GFX1250-NEXT: s_lshr_b32 s44, s2, 6
-; GFX1250-NEXT: s_bfe_i64 s[68:69], s[68:69], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[70:71], s[70:71], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[80:81], s[80:81], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[84:85], s[84:85], 0x10000
-; GFX1250-NEXT: v_dual_mov_b32 v13, s99 :: v_dual_mov_b32 v14, s100
+; GFX1250-NEXT: v_dual_mov_b32 v11, s65 :: v_dual_mov_b32 v12, s54
+; GFX1250-NEXT: s_lshr_b32 s8, s4, 6
+; GFX1250-NEXT: v_dual_mov_b32 v13, s55 :: v_dual_mov_b32 v14, s58
; GFX1250-NEXT: s_wait_xcnt 0x1
-; GFX1250-NEXT: v_dual_mov_b32 v15, s101 :: v_dual_mov_b32 v18, s94
-; GFX1250-NEXT: s_lshr_b32 s36, s2, 4
-; GFX1250-NEXT: s_lshr_b32 s26, s2, 2
-; GFX1250-NEXT: s_bfe_i64 s[16:17], s[2:3], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[2:3], s[24:25], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[24:25], s[30:31], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[30:31], s[40:41], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[40:41], s[60:61], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[48:49], s[48:49], 0x10000
-; GFX1250-NEXT: s_bfe_i64 s[60:61], s[102:103], 0x10000
-; GFX1250-NEXT: v_dual_mov_b32 v19, s95 :: v_dual_mov_b32 v20, s90
+; GFX1250-NEXT: v_dual_mov_b32 v15, s59 :: v_dual_mov_b32 v18, s88
+; GFX1250-NEXT: s_bfe_i64 s[56:57], s[48:49], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[60:61], s[60:61], 0x10000
+; GFX1250-NEXT: v_dual_mov_b32 v19, s89 :: v_dual_mov_b32 v20, s86
; GFX1250-NEXT: s_wait_xcnt 0x0
-; GFX1250-NEXT: v_dual_mov_b32 v21, s91 :: v_dual_mov_b32 v22, s84
-; GFX1250-NEXT: s_bfe_i64 s[44:45], s[44:45], 0x10000
-; GFX1250-NEXT: v_dual_mov_b32 v23, s85 :: v_dual_mov_b32 v24, s80
-; GFX1250-NEXT: v_mov_b32_e32 v25, s81
+; GFX1250-NEXT: v_dual_mov_b32 v21, s87 :: v_dual_mov_b32 v22, s80
+; GFX1250-NEXT: s_lshr_b32 vcc_lo, s4, 2
+; GFX1250-NEXT: s_lshr_b32 s14, s4, 3
+; GFX1250-NEXT: s_bfe_i64 s[48:49], s[8:9], 0x10000
+; GFX1250-NEXT: v_dual_mov_b32 v23, s81 :: v_dual_mov_b32 v24, s76
+; GFX1250-NEXT: v_mov_b32_e32 v25, s77
; GFX1250-NEXT: s_clause 0x5
; GFX1250-NEXT: global_store_b128 v16, v[0:3], s[0:1] offset:176
; GFX1250-NEXT: global_store_b128 v16, v[4:7], s[0:1] offset:160
@@ -12281,26 +12205,29 @@ define amdgpu_kernel void @constant_sextload_v64i1_to_v64i64(ptr addrspace(1) %o
; GFX1250-NEXT: global_store_b128 v16, v[18:21], s[0:1] offset:112
; GFX1250-NEXT: global_store_b128 v16, v[22:25], s[0:1] offset:96
; GFX1250-NEXT: s_wait_xcnt 0x5
-; GFX1250-NEXT: v_dual_mov_b32 v0, s70 :: v_dual_mov_b32 v1, s71
-; GFX1250-NEXT: v_dual_mov_b32 v2, s68 :: v_dual_mov_b32 v3, s69
+; GFX1250-NEXT: v_dual_mov_b32 v0, s68 :: v_dual_mov_b32 v1, s69
+; GFX1250-NEXT: v_dual_mov_b32 v2, s66 :: v_dual_mov_b32 v3, s67
; GFX1250-NEXT: s_wait_xcnt 0x4
; GFX1250-NEXT: v_mov_b32_e32 v4, s60
-; GFX1250-NEXT: s_bfe_i64 s[36:37], s[36:37], 0x10000
-; GFX1250-NEXT: v_dual_mov_b32 v5, s61 :: v_dual_mov_b32 v6, s48
+; GFX1250-NEXT: s_lshr_b32 s102, s4, 1
+; GFX1250-NEXT: v_dual_mov_b32 v5, s61 :: v_dual_mov_b32 v6, s56
; GFX1250-NEXT: s_wait_xcnt 0x3
-; GFX1250-NEXT: v_dual_mov_b32 v7, s49 :: v_dual_mov_b32 v8, s44
-; GFX1250-NEXT: s_bfe_i64 s[26:27], s[26:27], 0x10000
-; GFX1250-NEXT: v_dual_mov_b32 v9, s45 :: v_dual_mov_b32 v10, s40
+; GFX1250-NEXT: v_dual_mov_b32 v7, s57 :: v_dual_mov_b32 v8, s48
+; GFX1250-NEXT: s_bfe_i64 s[8:9], s[14:15], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[14:15], vcc, 0x10000
+; GFX1250-NEXT: v_dual_mov_b32 v9, s49 :: v_dual_mov_b32 v10, s40
; GFX1250-NEXT: s_wait_xcnt 0x2
-; GFX1250-NEXT: v_dual_mov_b32 v11, s41 :: v_dual_mov_b32 v12, s36
-; GFX1250-NEXT: v_dual_mov_b32 v13, s37 :: v_dual_mov_b32 v14, s30
+; GFX1250-NEXT: v_dual_mov_b32 v11, s41 :: v_dual_mov_b32 v12, s30
+; GFX1250-NEXT: s_bfe_i64 s[4:5], s[4:5], 0x10000
+; GFX1250-NEXT: s_bfe_i64 s[6:7], s[102:103], 0x10000
+; GFX1250-NEXT: v_dual_mov_b32 v13, s31 :: v_dual_mov_b32 v14, s22
; GFX1250-NEXT: s_wait_xcnt 0x1
-; GFX1250-NEXT: v_dual_mov_b32 v15, s31 :: v_dual_mov_b32 v18, s26
-; GFX1250-NEXT: v_dual_mov_b32 v19, s27 :: v_dual_mov_b32 v20, s24
+; GFX1250-NEXT: v_dual_mov_b32 v15, s23 :: v_dual_mov_b32 v18, s14
+; GFX1250-NEXT: v_dual_mov_b32 v19, s15 :: v_dual_mov_b32 v20, s8
; GFX1250-NEXT: s_wait_xcnt 0x0
-; GFX1250-NEXT: v_dual_mov_b32 v21, s25 :: v_dual_mov_b32 v22, s16
-; GFX1250-NEXT: v_dual_mov_b32 v23, s17 :: v_dual_mov_b32 v24, s2
-; GFX1250-NEXT: v_mov_b32_e32 v25, s3
+; GFX1250-NEXT: v_dual_mov_b32 v21, s9 :: v_dual_mov_b32 v22, s4
+; GFX1250-NEXT: v_dual_mov_b32 v23, s5 :: v_dual_mov_b32 v24, s6
+; GFX1250-NEXT: v_mov_b32_e32 v25, s7
; GFX1250-NEXT: s_clause 0x5
; GFX1250-NEXT: global_store_b128 v16, v[0:3], s[0:1] offset:80
; GFX1250-NEXT: global_store_b128 v16, v[4:7], s[0:1] offset:64
diff --git a/llvm/test/CodeGen/AMDGPU/load-constant-i32.ll b/llvm/test/CodeGen/AMDGPU/load-constant-i32.ll
index 117f65d31570c..8ee1980b035db 100644
--- a/llvm/test/CodeGen/AMDGPU/load-constant-i32.ll
+++ b/llvm/test/CodeGen/AMDGPU/load-constant-i32.ll
@@ -2240,15 +2240,15 @@ define amdgpu_kernel void @constant_sextload_v2i32_to_v2i64(ptr addrspace(1) %ou
; GFX1250-NEXT: v_nop
; GFX1250-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
; GFX1250-NEXT: s_load_b128 s[0:3], s[4:5], 0x24 nv
+; GFX1250-NEXT: v_mov_b32_e32 v4, 0
; GFX1250-NEXT: s_wait_kmcnt 0x0
; GFX1250-NEXT: s_load_b64 s[2:3], s[2:3], 0x0 nv
; GFX1250-NEXT: s_wait_kmcnt 0x0
-; GFX1250-NEXT: v_dual_mov_b32 v4, 0 :: v_dual_mov_b32 v0, s2
-; GFX1250-NEXT: s_ashr_i32 s4, s3, 31
-; GFX1250-NEXT: s_ashr_i32 s5, s2, 31
-; GFX1250-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
-; GFX1250-NEXT: v_dual_mov_b32 v2, s3 :: v_dual_mov_b32 v1, s5
-; GFX1250-NEXT: v_mov_b32_e32 v3, s4
+; GFX1250-NEXT: s_ashr_i32 s5, s3, 31
+; GFX1250-NEXT: s_mov_b32 s4, s3
+; GFX1250-NEXT: s_ashr_i32 s3, s2, 31
+; GFX1250-NEXT: v_mov_b64_e32 v[2:3], s[4:5]
+; GFX1250-NEXT: v_mov_b64_e32 v[0:1], s[2:3]
; GFX1250-NEXT: global_store_b128 v4, v[0:3], s[0:1]
; GFX1250-NEXT: s_endpgm
%ld = load <2 x i32>, ptr addrspace(4) %in
@@ -2576,14 +2576,14 @@ define amdgpu_kernel void @constant_sextload_v4i32_to_v4i64(ptr addrspace(1) %ou
; GFX1250-NEXT: s_load_b128 s[4:7], s[2:3], 0x0 nv
; GFX1250-NEXT: s_wait_kmcnt 0x0
; GFX1250-NEXT: v_dual_mov_b32 v8, 0 :: v_dual_mov_b32 v0, s6
-; GFX1250-NEXT: s_ashr_i32 s8, s7, 31
-; GFX1250-NEXT: s_ashr_i32 s9, s6, 31
-; GFX1250-NEXT: s_ashr_i32 s2, s5, 31
-; GFX1250-NEXT: s_ashr_i32 s3, s4, 31
+; GFX1250-NEXT: s_ashr_i32 s2, s7, 31
+; GFX1250-NEXT: s_ashr_i32 s3, s6, 31
+; GFX1250-NEXT: s_ashr_i32 s8, s5, 31
+; GFX1250-NEXT: s_ashr_i32 s9, s4, 31
; GFX1250-NEXT: v_dual_mov_b32 v2, s7 :: v_dual_mov_b32 v4, s4
-; GFX1250-NEXT: v_dual_mov_b32 v6, s5 :: v_dual_mov_b32 v1, s9
-; GFX1250-NEXT: v_dual_mov_b32 v3, s8 :: v_dual_mov_b32 v5, s3
-; GFX1250-NEXT: v_mov_b32_e32 v7, s2
+; GFX1250-NEXT: v_dual_mov_b32 v6, s5 :: v_dual_mov_b32 v1, s3
+; GFX1250-NEXT: v_dual_mov_b32 v3, s2 :: v_dual_mov_b32 v5, s9
+; GFX1250-NEXT: v_mov_b32_e32 v7, s8
; GFX1250-NEXT: s_clause 0x1
; GFX1250-NEXT: global_store_b128 v8, v[0:3], s[0:1] offset:16
; GFX1250-NEXT: global_store_b128 v8, v[4:7], s[0:1]
@@ -3093,22 +3093,22 @@ define amdgpu_kernel void @constant_sextload_v8i32_to_v8i64(ptr addrspace(1) %ou
; GFX1250-NEXT: s_load_b256 s[0:7], s[10:11], 0x0 nv
; GFX1250-NEXT: s_wait_kmcnt 0x0
; GFX1250-NEXT: v_dual_mov_b32 v16, 0 :: v_dual_mov_b32 v0, s6
-; GFX1250-NEXT: s_ashr_i32 s16, s7, 31
-; GFX1250-NEXT: s_ashr_i32 s17, s6, 31
-; GFX1250-NEXT: s_ashr_i32 s14, s5, 31
-; GFX1250-NEXT: s_ashr_i32 s15, s4, 31
-; GFX1250-NEXT: s_ashr_i32 s12, s3, 31
-; GFX1250-NEXT: s_ashr_i32 s13, s2, 31
+; GFX1250-NEXT: s_ashr_i32 s10, s7, 31
+; GFX1250-NEXT: s_ashr_i32 s11, s6, 31
+; GFX1250-NEXT: s_ashr_i32 s12, s5, 31
+; GFX1250-NEXT: s_ashr_i32 s13, s4, 31
+; GFX1250-NEXT: s_ashr_i32 s14, s3, 31
+; GFX1250-NEXT: s_ashr_i32 s15, s2, 31
; GFX1250-NEXT: v_dual_mov_b32 v2, s7 :: v_dual_mov_b32 v4, s4
-; GFX1250-NEXT: v_dual_mov_b32 v14, s1 :: v_dual_mov_b32 v1, s17
-; GFX1250-NEXT: v_dual_mov_b32 v3, s16 :: v_dual_mov_b32 v5, s15
-; GFX1250-NEXT: s_ashr_i32 s10, s1, 31
-; GFX1250-NEXT: s_ashr_i32 s11, s0, 31
+; GFX1250-NEXT: v_dual_mov_b32 v14, s1 :: v_dual_mov_b32 v1, s11
+; GFX1250-NEXT: v_dual_mov_b32 v3, s10 :: v_dual_mov_b32 v5, s13
+; GFX1250-NEXT: s_ashr_i32 s16, s1, 31
+; GFX1250-NEXT: s_ashr_i32 s17, s0, 31
; GFX1250-NEXT: v_dual_mov_b32 v6, s5 :: v_dual_mov_b32 v8, s2
-; GFX1250-NEXT: v_dual_mov_b32 v7, s14 :: v_dual_mov_b32 v9, s13
+; GFX1250-NEXT: v_dual_mov_b32 v7, s12 :: v_dual_mov_b32 v9, s15
; GFX1250-NEXT: v_dual_mov_b32 v10, s3 :: v_dual_mov_b32 v12, s0
-; GFX1250-NEXT: v_dual_mov_b32 v11, s12 :: v_dual_mov_b32 v13, s11
-; GFX1250-NEXT: v_mov_b32_e32 v15, s10
+; GFX1250-NEXT: v_dual_mov_b32 v11, s14 :: v_dual_mov_b32 v13, s17
+; GFX1250-NEXT: v_mov_b32_e32 v15, s16
; GFX1250-NEXT: s_clause 0x3
; GFX1250-NEXT: global_store_b128 v16, v[0:3], s[8:9] offset:48
; GFX1250-NEXT: global_store_b128 v16, v[4:7], s[8:9] offset:32
@@ -3531,42 +3531,42 @@ define amdgpu_kernel void @constant_sextload_v16i32_to_v16i64(ptr addrspace(1) %
; GFX1250-NEXT: s_load_b512 s[0:15], s[18:19], 0x0 nv
; GFX1250-NEXT: s_wait_kmcnt 0x0
; GFX1250-NEXT: v_dual_mov_b32 v28, 0 :: v_dual_mov_b32 v0, s14
-; GFX1250-NEXT: s_ashr_i32 s28, s11, 31
-; GFX1250-NEXT: s_ashr_i32 s29, s10, 31
-; GFX1250-NEXT: s_ashr_i32 s30, s13, 31
-; GFX1250-NEXT: s_ashr_i32 s33, s15, 31
-; GFX1250-NEXT: s_ashr_i32 s34, s14, 31
-; GFX1250-NEXT: s_ashr_i32 s26, s9, 31
-; GFX1250-NEXT: s_ashr_i32 s27, s8, 31
-; GFX1250-NEXT: s_ashr_i32 s31, s12, 31
-; GFX1250-NEXT: s_ashr_i32 s24, s7, 31
-; GFX1250-NEXT: s_ashr_i32 s25, s6, 31
+; GFX1250-NEXT: s_ashr_i32 s18, s15, 31
+; GFX1250-NEXT: s_ashr_i32 s19, s14, 31
+; GFX1250-NEXT: s_ashr_i32 s20, s13, 31
+; GFX1250-NEXT: s_ashr_i32 s22, s11, 31
+; GFX1250-NEXT: s_ashr_i32 s23, s10, 31
+; GFX1250-NEXT: s_ashr_i32 s21, s12, 31
+; GFX1250-NEXT: s_ashr_i32 s24, s9, 31
+; GFX1250-NEXT: s_ashr_i32 s25, s8, 31
+; GFX1250-NEXT: s_ashr_i32 s26, s7, 31
+; GFX1250-NEXT: s_ashr_i32 s27, s6, 31
; GFX1250-NEXT: v_dual_mov_b32 v2, s15 :: v_dual_mov_b32 v4, s12
; GFX1250-NEXT: v_dual_mov_b32 v6, s13 :: v_dual_mov_b32 v8, s10
; GFX1250-NEXT: v_dual_mov_b32 v10, s11 :: v_dual_mov_b32 v12, s8
-; GFX1250-NEXT: v_dual_mov_b32 v26, s3 :: v_dual_mov_b32 v1, s34
-; GFX1250-NEXT: v_dual_mov_b32 v3, s33 :: v_dual_mov_b32 v5, s31
-; GFX1250-NEXT: v_dual_mov_b32 v7, s30 :: v_dual_mov_b32 v9, s29
-; GFX1250-NEXT: v_dual_mov_b32 v11, s28 :: v_dual_mov_b32 v13, s27
-; GFX1250-NEXT: s_ashr_i32 s22, s5, 31
-; GFX1250-NEXT: s_ashr_i32 s23, s4, 31
+; GFX1250-NEXT: v_dual_mov_b32 v26, s3 :: v_dual_mov_b32 v1, s19
+; GFX1250-NEXT: v_dual_mov_b32 v3, s18 :: v_dual_mov_b32 v5, s21
+; GFX1250-NEXT: v_dual_mov_b32 v7, s20 :: v_dual_mov_b32 v9, s23
+; GFX1250-NEXT: v_dual_mov_b32 v11, s22 :: v_dual_mov_b32 v13, s25
+; GFX1250-NEXT: s_ashr_i32 s28, s5, 31
+; GFX1250-NEXT: s_ashr_i32 s29, s4, 31
; GFX1250-NEXT: v_dual_mov_b32 v14, s9 :: v_dual_mov_b32 v16, s6
-; GFX1250-NEXT: v_dual_mov_b32 v15, s26 :: v_dual_mov_b32 v17, s25
-; GFX1250-NEXT: s_ashr_i32 s20, s3, 31
-; GFX1250-NEXT: s_ashr_i32 s21, s2, 31
+; GFX1250-NEXT: v_dual_mov_b32 v15, s24 :: v_dual_mov_b32 v17, s27
+; GFX1250-NEXT: s_ashr_i32 s30, s3, 31
+; GFX1250-NEXT: s_ashr_i32 s31, s2, 31
; GFX1250-NEXT: v_dual_mov_b32 v18, s7 :: v_dual_mov_b32 v20, s4
-; GFX1250-NEXT: v_dual_mov_b32 v19, s24 :: v_dual_mov_b32 v21, s23
-; GFX1250-NEXT: s_ashr_i32 s18, s1, 31
-; GFX1250-NEXT: s_ashr_i32 s19, s0, 31
+; GFX1250-NEXT: v_dual_mov_b32 v19, s26 :: v_dual_mov_b32 v21, s29
+; GFX1250-NEXT: s_ashr_i32 s33, s1, 31
+; GFX1250-NEXT: s_ashr_i32 s34, s0, 31
; GFX1250-NEXT: v_dual_mov_b32 v22, s5 :: v_dual_mov_b32 v24, s2
-; GFX1250-NEXT: v_dual_mov_b32 v23, s22 :: v_dual_mov_b32 v25, s21
-; GFX1250-NEXT: v_mov_b32_e32 v27, s20
+; GFX1250-NEXT: v_dual_mov_b32 v23, s28 :: v_dual_mov_b32 v25, s31
+; GFX1250-NEXT: v_mov_b32_e32 v27, s30
; GFX1250-NEXT: s_clause 0x1
; GFX1250-NEXT: global_store_b128 v28, v[0:3], s[16:17] offset:112
; GFX1250-NEXT: global_store_b128 v28, v[4:7], s[16:17] offset:96
; GFX1250-NEXT: s_wait_xcnt 0x1
-; GFX1250-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s19
-; GFX1250-NEXT: v_dual_mov_b32 v2, s1 :: v_dual_mov_b32 v3, s18
+; GFX1250-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s34
+; GFX1250-NEXT: v_dual_mov_b32 v2, s1 :: v_dual_mov_b32 v3, s33
; GFX1250-NEXT: s_clause 0x5
; GFX1250-NEXT: global_store_b128 v28, v[8:11], s[16:17] offset:80
; GFX1250-NEXT: global_store_b128 v28, v[12:15], s[16:17] offset:64
@@ -4846,63 +4846,63 @@ define amdgpu_kernel void @constant_sextload_v32i32_to_v32i64(ptr addrspace(1) %
; GFX1250-NEXT: s_load_b512 s[16:31], s[38:39], 0x40 nv
; GFX1250-NEXT: v_mov_b32_e32 v0, 0
; GFX1250-NEXT: s_wait_kmcnt 0x0
-; GFX1250-NEXT: s_ashr_i32 s49, s15, 31
-; GFX1250-NEXT: s_ashr_i32 s64, s31, 31
-; GFX1250-NEXT: s_ashr_i32 s65, s30, 31
-; GFX1250-NEXT: s_ashr_i32 s62, s29, 31
-; GFX1250-NEXT: s_ashr_i32 s63, s28, 31
-; GFX1250-NEXT: s_ashr_i32 s60, s27, 31
-; GFX1250-NEXT: s_ashr_i32 s61, s26, 31
+; GFX1250-NEXT: s_ashr_i32 s41, s15, 31
+; GFX1250-NEXT: s_ashr_i32 s51, s31, 31
+; GFX1250-NEXT: s_ashr_i32 s52, s30, 31
+; GFX1250-NEXT: s_ashr_i32 s53, s29, 31
+; GFX1250-NEXT: s_ashr_i32 s54, s28, 31
+; GFX1250-NEXT: s_ashr_i32 s55, s27, 31
+; GFX1250-NEXT: s_ashr_i32 s56, s26, 31
; GFX1250-NEXT: v_dual_mov_b32 v2, s30 :: v_dual_mov_b32 v4, s31
-; GFX1250-NEXT: v_dual_mov_b32 v6, s28 :: v_dual_mov_b32 v3, s65
-; GFX1250-NEXT: v_mov_b32_e32 v5, s64
-; GFX1250-NEXT: s_ashr_i32 s58, s25, 31
-; GFX1250-NEXT: s_ashr_i32 s59, s24, 31
+; GFX1250-NEXT: v_dual_mov_b32 v6, s28 :: v_dual_mov_b32 v3, s52
+; GFX1250-NEXT: v_mov_b32_e32 v5, s51
+; GFX1250-NEXT: s_ashr_i32 s57, s25, 31
+; GFX1250-NEXT: s_ashr_i32 s58, s24, 31
; GFX1250-NEXT: v_dual_mov_b32 v8, s29 :: v_dual_mov_b32 v10, s26
-; GFX1250-NEXT: v_dual_mov_b32 v7, s63 :: v_dual_mov_b32 v9, s62
-; GFX1250-NEXT: v_dual_mov_b32 v11, s61 :: v_dual_mov_b32 v12, s27
-; GFX1250-NEXT: v_dual_mov_b32 v13, s60 :: v_dual_mov_b32 v14, s24
-; GFX1250-NEXT: s_ashr_i32 s57, s23, 31
-; GFX1250-NEXT: v_dual_mov_b32 v15, s59 :: v_dual_mov_b32 v16, s25
-; GFX1250-NEXT: v_mov_b32_e32 v17, s58
-; GFX1250-NEXT: s_ashr_i32 s24, s22, 31
-; GFX1250-NEXT: s_ashr_i32 s55, s21, 31
-; GFX1250-NEXT: s_ashr_i32 s56, s20, 31
-; GFX1250-NEXT: s_ashr_i32 s53, s19, 31
-; GFX1250-NEXT: s_ashr_i32 s54, s18, 31
+; GFX1250-NEXT: v_dual_mov_b32 v7, s54 :: v_dual_mov_b32 v9, s53
+; GFX1250-NEXT: v_dual_mov_b32 v11, s56 :: v_dual_mov_b32 v12, s27
+; GFX1250-NEXT: v_dual_mov_b32 v13, s55 :: v_dual_mov_b32 v14, s24
+; GFX1250-NEXT: s_ashr_i32 s59, s23, 31
+; GFX1250-NEXT: s_ashr_i32 s60, s22, 31
+; GFX1250-NEXT: v_dual_mov_b32 v15, s58 :: v_dual_mov_b32 v16, s25
+; GFX1250-NEXT: v_mov_b32_e32 v17, s57
+; GFX1250-NEXT: s_ashr_i32 s61, s21, 31
+; GFX1250-NEXT: s_ashr_i32 s62, s20, 31
+; GFX1250-NEXT: s_ashr_i32 s63, s19, 31
+; GFX1250-NEXT: s_ashr_i32 s64, s18, 31
; GFX1250-NEXT: s_clause 0x3
; GFX1250-NEXT: global_store_b128 v0, v[2:5], s[36:37] offset:240
; GFX1250-NEXT: global_store_b128 v0, v[6:9], s[36:37] offset:224
; GFX1250-NEXT: global_store_b128 v0, v[10:13], s[36:37] offset:208
; GFX1250-NEXT: global_store_b128 v0, v[14:17], s[36:37] offset:192
; GFX1250-NEXT: s_wait_xcnt 0x3
-; GFX1250-NEXT: v_dual_mov_b32 v2, s22 :: v_dual_mov_b32 v3, s24
-; GFX1250-NEXT: v_dual_mov_b32 v4, s23 :: v_dual_mov_b32 v5, s57
+; GFX1250-NEXT: v_dual_mov_b32 v2, s22 :: v_dual_mov_b32 v3, s60
+; GFX1250-NEXT: v_dual_mov_b32 v4, s23 :: v_dual_mov_b32 v5, s59
; GFX1250-NEXT: s_wait_xcnt 0x2
; GFX1250-NEXT: v_mov_b32_e32 v6, s20
-; GFX1250-NEXT: s_ashr_i32 s51, s17, 31
-; GFX1250-NEXT: s_ashr_i32 s52, s16, 31
-; GFX1250-NEXT: v_dual_mov_b32 v7, s56 :: v_dual_mov_b32 v8, s21
+; GFX1250-NEXT: s_ashr_i32 s65, s17, 31
+; GFX1250-NEXT: s_ashr_i32 s24, s16, 31
+; GFX1250-NEXT: v_dual_mov_b32 v7, s62 :: v_dual_mov_b32 v8, s21
; GFX1250-NEXT: s_wait_xcnt 0x1
-; GFX1250-NEXT: v_dual_mov_b32 v9, s55 :: v_dual_mov_b32 v10, s18
-; GFX1250-NEXT: s_ashr_i32 s50, s14, 31
-; GFX1250-NEXT: v_dual_mov_b32 v11, s54 :: v_dual_mov_b32 v12, s19
+; GFX1250-NEXT: v_dual_mov_b32 v9, s61 :: v_dual_mov_b32 v10, s18
+; GFX1250-NEXT: s_ashr_i32 s42, s14, 31
+; GFX1250-NEXT: v_dual_mov_b32 v11, s64 :: v_dual_mov_b32 v12, s19
; GFX1250-NEXT: s_wait_xcnt 0x0
-; GFX1250-NEXT: v_dual_mov_b32 v13, s53 :: v_dual_mov_b32 v14, s16
+; GFX1250-NEXT: v_dual_mov_b32 v13, s63 :: v_dual_mov_b32 v14, s16
+; GFX1250-NEXT: s_ashr_i32 s43, s13, 31
+; GFX1250-NEXT: s_ashr_i32 s44, s12, 31
; GFX1250-NEXT: s_ashr_i32 s45, s11, 31
; GFX1250-NEXT: s_ashr_i32 s46, s10, 31
-; GFX1250-NEXT: s_ashr_i32 s47, s13, 31
-; GFX1250-NEXT: s_ashr_i32 s48, s12, 31
-; GFX1250-NEXT: v_dual_mov_b32 v15, s52 :: v_dual_mov_b32 v16, s17
-; GFX1250-NEXT: v_dual_mov_b32 v17, s51 :: v_dual_mov_b32 v18, s14
-; GFX1250-NEXT: s_ashr_i32 s43, s9, 31
-; GFX1250-NEXT: s_ashr_i32 s44, s8, 31
-; GFX1250-NEXT: v_dual_mov_b32 v19, s50 :: v_dual_mov_b32 v20, s15
-; GFX1250-NEXT: v_dual_mov_b32 v21, s49 :: v_dual_mov_b32 v22, s12
-; GFX1250-NEXT: s_ashr_i32 s41, s7, 31
-; GFX1250-NEXT: s_ashr_i32 s42, s6, 31
-; GFX1250-NEXT: v_dual_mov_b32 v23, s48 :: v_dual_mov_b32 v24, s13
-; GFX1250-NEXT: v_mov_b32_e32 v25, s47
+; GFX1250-NEXT: v_dual_mov_b32 v15, s24 :: v_dual_mov_b32 v16, s17
+; GFX1250-NEXT: v_dual_mov_b32 v17, s65 :: v_dual_mov_b32 v18, s14
+; GFX1250-NEXT: s_ashr_i32 s47, s9, 31
+; GFX1250-NEXT: s_ashr_i32 s48, s8, 31
+; GFX1250-NEXT: v_dual_mov_b32 v19, s42 :: v_dual_mov_b32 v20, s15
+; GFX1250-NEXT: v_dual_mov_b32 v21, s41 :: v_dual_mov_b32 v22, s12
+; GFX1250-NEXT: s_ashr_i32 s49, s7, 31
+; GFX1250-NEXT: s_ashr_i32 s50, s6, 31
+; GFX1250-NEXT: v_dual_mov_b32 v23, s44 :: v_dual_mov_b32 v24, s13
+; GFX1250-NEXT: v_mov_b32_e32 v25, s43
; GFX1250-NEXT: s_clause 0x5
; GFX1250-NEXT: global_store_b128 v0, v[2:5], s[36:37] offset:176
; GFX1250-NEXT: global_store_b128 v0, v[6:9], s[36:37] offset:160
@@ -4917,14 +4917,14 @@ define amdgpu_kernel void @constant_sextload_v32i32_to_v32i64(ptr addrspace(1) %
; GFX1250-NEXT: v_mov_b32_e32 v6, s8
; GFX1250-NEXT: s_ashr_i32 s39, s5, 31
; GFX1250-NEXT: s_ashr_i32 s40, s4, 31
-; GFX1250-NEXT: v_dual_mov_b32 v7, s44 :: v_dual_mov_b32 v8, s9
+; GFX1250-NEXT: v_dual_mov_b32 v7, s48 :: v_dual_mov_b32 v8, s9
; GFX1250-NEXT: s_wait_xcnt 0x3
-; GFX1250-NEXT: v_dual_mov_b32 v9, s43 :: v_dual_mov_b32 v10, s6
+; GFX1250-NEXT: v_dual_mov_b32 v9, s47 :: v_dual_mov_b32 v10, s6
; GFX1250-NEXT: s_ashr_i32 s35, s3, 31
; GFX1250-NEXT: s_ashr_i32 s38, s2, 31
-; GFX1250-NEXT: v_dual_mov_b32 v11, s42 :: v_dual_mov_b32 v12, s7
+; GFX1250-NEXT: v_dual_mov_b32 v11, s50 :: v_dual_mov_b32 v12, s7
; GFX1250-NEXT: s_wait_xcnt 0x2
-; GFX1250-NEXT: v_dual_mov_b32 v13, s41 :: v_dual_mov_b32 v14, s4
+; GFX1250-NEXT: v_dual_mov_b32 v13, s49 :: v_dual_mov_b32 v14, s4
; GFX1250-NEXT: s_ashr_i32 s33, s1, 31
; GFX1250-NEXT: s_ashr_i32 s34, s0, 31
; GFX1250-NEXT: v_dual_mov_b32 v15, s40 :: v_dual_mov_b32 v16, s5
diff --git a/llvm/test/CodeGen/AMDGPU/lower-buffer-fat-pointers-nontemporal-metadata.ll b/llvm/test/CodeGen/AMDGPU/lower-buffer-fat-pointers-nontemporal-metadata.ll
index d7657fafca24e..92734593d3075 100644
--- a/llvm/test/CodeGen/AMDGPU/lower-buffer-fat-pointers-nontemporal-metadata.ll
+++ b/llvm/test/CodeGen/AMDGPU/lower-buffer-fat-pointers-nontemporal-metadata.ll
@@ -37,17 +37,17 @@ define amdgpu_kernel void @buffer_nontemporal_load_store(ptr addrspace(7) %in, p
; GFX942-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x0
; GFX942-SDAG-NEXT: s_load_dword s11, s[4:5], 0x10
; GFX942-SDAG-NEXT: s_waitcnt lgkmcnt(0)
+; GFX942-SDAG-NEXT: s_mov_b32 s10, s3
; GFX942-SDAG-NEXT: s_mov_b32 s8, s1
; GFX942-SDAG-NEXT: s_mov_b32 s9, s2
-; GFX942-SDAG-NEXT: s_mov_b32 s10, s3
; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, s0
; GFX942-SDAG-NEXT: buffer_load_dword v1, v0, s[8:11], 0 offen nt
; GFX942-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x20
; GFX942-SDAG-NEXT: s_load_dword s7, s[4:5], 0x30
; GFX942-SDAG-NEXT: s_waitcnt lgkmcnt(0)
+; GFX942-SDAG-NEXT: s_mov_b32 s6, s3
; GFX942-SDAG-NEXT: s_mov_b32 s4, s1
; GFX942-SDAG-NEXT: s_mov_b32 s5, s2
-; GFX942-SDAG-NEXT: s_mov_b32 s6, s3
; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, s0
; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0)
; GFX942-SDAG-NEXT: buffer_store_dword v1, v0, s[4:7], 0 offen nt
@@ -177,18 +177,18 @@ define amdgpu_kernel void @buffer_nontemporal_and_volatile_load_store(ptr addrsp
; GFX942-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x0
; GFX942-SDAG-NEXT: s_load_dword s11, s[4:5], 0x10
; GFX942-SDAG-NEXT: s_waitcnt lgkmcnt(0)
+; GFX942-SDAG-NEXT: s_mov_b32 s10, s3
; GFX942-SDAG-NEXT: s_mov_b32 s8, s1
; GFX942-SDAG-NEXT: s_mov_b32 s9, s2
-; GFX942-SDAG-NEXT: s_mov_b32 s10, s3
; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, s0
; GFX942-SDAG-NEXT: buffer_load_dword v1, v0, s[8:11], 0 offen sc0 sc1
; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0)
; GFX942-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x20
; GFX942-SDAG-NEXT: s_load_dword s7, s[4:5], 0x30
; GFX942-SDAG-NEXT: s_waitcnt lgkmcnt(0)
+; GFX942-SDAG-NEXT: s_mov_b32 s6, s3
; GFX942-SDAG-NEXT: s_mov_b32 s4, s1
; GFX942-SDAG-NEXT: s_mov_b32 s5, s2
-; GFX942-SDAG-NEXT: s_mov_b32 s6, s3
; GFX942-SDAG-NEXT: v_mov_b32_e32 v0, s0
; GFX942-SDAG-NEXT: buffer_store_dword v1, v0, s[4:7], 0 offen sc0 sc1
; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0)
diff --git a/llvm/test/CodeGen/AMDGPU/masked-load-vectortypes.ll b/llvm/test/CodeGen/AMDGPU/masked-load-vectortypes.ll
index 954e7f56fb7e0..254df22ca6c95 100644
--- a/llvm/test/CodeGen/AMDGPU/masked-load-vectortypes.ll
+++ b/llvm/test/CodeGen/AMDGPU/masked-load-vectortypes.ll
@@ -5,11 +5,9 @@ define <2 x i32> @uniform_masked_load_ptr1_mask_v2i32(ptr addrspace(1) inreg noc
; GFX942-LABEL: uniform_masked_load_ptr1_mask_v2i32:
; GFX942: ; %bb.0: ; %entry
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX942-NEXT: s_mov_b32 s2, 0
; GFX942-NEXT: v_and_b32_e32 v0, 1, v0
-; GFX942-NEXT: s_mov_b32 s3, s2
; GFX942-NEXT: v_cmp_eq_u32_e32 vcc, 1, v0
-; GFX942-NEXT: v_mov_b64_e32 v[0:1], s[2:3]
+; GFX942-NEXT: v_mov_b64_e32 v[0:1], 0
; GFX942-NEXT: s_and_saveexec_b64 s[2:3], vcc
; GFX942-NEXT: s_cbranch_execz .LBB0_2
; GFX942-NEXT: ; %bb.1: ; %cond.load
@@ -30,11 +28,9 @@ define <4 x i32> @uniform_masked_load_ptr1_mask_v4i32(ptr addrspace(1) inreg noc
; GFX942-LABEL: uniform_masked_load_ptr1_mask_v4i32:
; GFX942: ; %bb.0: ; %entry
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX942-NEXT: s_mov_b32 s4, 0
+; GFX942-NEXT: s_mov_b64 s[4:5], 0
; GFX942-NEXT: v_and_b32_e32 v0, 1, v0
-; GFX942-NEXT: s_mov_b32 s5, s4
-; GFX942-NEXT: s_mov_b32 s6, s4
-; GFX942-NEXT: s_mov_b32 s7, s4
+; GFX942-NEXT: s_mov_b64 s[6:7], s[4:5]
; GFX942-NEXT: v_cmp_eq_u32_e32 vcc, 1, v0
; GFX942-NEXT: v_mov_b64_e32 v[0:1], s[4:5]
; GFX942-NEXT: v_mov_b64_e32 v[2:3], s[6:7]
@@ -58,11 +54,9 @@ define <4 x float> @uniform_masked_load_ptr1_mask_v4f32(ptr addrspace(1) inreg n
; GFX942-LABEL: uniform_masked_load_ptr1_mask_v4f32:
; GFX942: ; %bb.0: ; %entry
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX942-NEXT: s_mov_b32 s4, 0
+; GFX942-NEXT: s_mov_b64 s[4:5], 0
; GFX942-NEXT: v_and_b32_e32 v0, 1, v0
-; GFX942-NEXT: s_mov_b32 s5, s4
-; GFX942-NEXT: s_mov_b32 s6, s4
-; GFX942-NEXT: s_mov_b32 s7, s4
+; GFX942-NEXT: s_mov_b64 s[6:7], s[4:5]
; GFX942-NEXT: v_cmp_eq_u32_e32 vcc, 1, v0
; GFX942-NEXT: v_mov_b64_e32 v[0:1], s[4:5]
; GFX942-NEXT: v_mov_b64_e32 v[2:3], s[6:7]
@@ -86,15 +80,11 @@ define <8 x i32> @uniform_masked_load_ptr1_mask_v8i32(ptr addrspace(1) inreg noc
; GFX942-LABEL: uniform_masked_load_ptr1_mask_v8i32:
; GFX942: ; %bb.0: ; %entry
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX942-NEXT: s_mov_b32 s4, 0
+; GFX942-NEXT: s_mov_b64 s[4:5], 0
; GFX942-NEXT: v_and_b32_e32 v0, 1, v0
-; GFX942-NEXT: s_mov_b32 s5, s4
-; GFX942-NEXT: s_mov_b32 s6, s4
-; GFX942-NEXT: s_mov_b32 s7, s4
-; GFX942-NEXT: s_mov_b32 s8, s4
-; GFX942-NEXT: s_mov_b32 s9, s4
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s4
+; GFX942-NEXT: s_mov_b64 s[6:7], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[8:9], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: v_cmp_eq_u32_e32 vcc, 1, v0
; GFX942-NEXT: v_mov_b64_e32 v[0:1], s[4:5]
; GFX942-NEXT: v_mov_b64_e32 v[2:3], s[6:7]
@@ -121,15 +111,11 @@ define <8 x float> @uniform_masked_load_ptr1_mask_v8f32(ptr addrspace(1) inreg n
; GFX942-LABEL: uniform_masked_load_ptr1_mask_v8f32:
; GFX942: ; %bb.0: ; %entry
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX942-NEXT: s_mov_b32 s4, 0
+; GFX942-NEXT: s_mov_b64 s[4:5], 0
; GFX942-NEXT: v_and_b32_e32 v0, 1, v0
-; GFX942-NEXT: s_mov_b32 s5, s4
-; GFX942-NEXT: s_mov_b32 s6, s4
-; GFX942-NEXT: s_mov_b32 s7, s4
-; GFX942-NEXT: s_mov_b32 s8, s4
-; GFX942-NEXT: s_mov_b32 s9, s4
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s4
+; GFX942-NEXT: s_mov_b64 s[6:7], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[8:9], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: v_cmp_eq_u32_e32 vcc, 1, v0
; GFX942-NEXT: v_mov_b64_e32 v[0:1], s[4:5]
; GFX942-NEXT: v_mov_b64_e32 v[2:3], s[6:7]
@@ -156,11 +142,9 @@ define <8 x i16> @uniform_masked_load_ptr1_mask_v8i16(ptr addrspace(1) inreg noc
; GFX942-LABEL: uniform_masked_load_ptr1_mask_v8i16:
; GFX942: ; %bb.0: ; %entry
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX942-NEXT: s_mov_b32 s4, 0
+; GFX942-NEXT: s_mov_b64 s[4:5], 0
; GFX942-NEXT: v_and_b32_e32 v0, 1, v0
-; GFX942-NEXT: s_mov_b32 s5, s4
-; GFX942-NEXT: s_mov_b32 s6, s4
-; GFX942-NEXT: s_mov_b32 s7, s4
+; GFX942-NEXT: s_mov_b64 s[6:7], s[4:5]
; GFX942-NEXT: v_cmp_eq_u32_e32 vcc, 1, v0
; GFX942-NEXT: v_mov_b64_e32 v[0:1], s[4:5]
; GFX942-NEXT: v_mov_b64_e32 v[2:3], s[6:7]
@@ -184,11 +168,9 @@ define <8 x half> @uniform_masked_load_ptr1_mask_v8f16(ptr addrspace(1) inreg no
; GFX942-LABEL: uniform_masked_load_ptr1_mask_v8f16:
; GFX942: ; %bb.0: ; %entry
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX942-NEXT: s_mov_b32 s4, 0
+; GFX942-NEXT: s_mov_b64 s[4:5], 0
; GFX942-NEXT: v_and_b32_e32 v0, 1, v0
-; GFX942-NEXT: s_mov_b32 s5, s4
-; GFX942-NEXT: s_mov_b32 s6, s4
-; GFX942-NEXT: s_mov_b32 s7, s4
+; GFX942-NEXT: s_mov_b64 s[6:7], s[4:5]
; GFX942-NEXT: v_cmp_eq_u32_e32 vcc, 1, v0
; GFX942-NEXT: v_mov_b64_e32 v[0:1], s[4:5]
; GFX942-NEXT: v_mov_b64_e32 v[2:3], s[6:7]
@@ -212,11 +194,9 @@ define <8 x bfloat> @uniform_masked_load_ptr1_mask_v8bf16(ptr addrspace(1) inreg
; GFX942-LABEL: uniform_masked_load_ptr1_mask_v8bf16:
; GFX942: ; %bb.0: ; %entry
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX942-NEXT: s_mov_b32 s4, 0
+; GFX942-NEXT: s_mov_b64 s[4:5], 0
; GFX942-NEXT: v_and_b32_e32 v0, 1, v0
-; GFX942-NEXT: s_mov_b32 s5, s4
-; GFX942-NEXT: s_mov_b32 s6, s4
-; GFX942-NEXT: s_mov_b32 s7, s4
+; GFX942-NEXT: s_mov_b64 s[6:7], s[4:5]
; GFX942-NEXT: v_cmp_eq_u32_e32 vcc, 1, v0
; GFX942-NEXT: v_mov_b64_e32 v[0:1], s[4:5]
; GFX942-NEXT: v_mov_b64_e32 v[2:3], s[6:7]
diff --git a/llvm/test/CodeGen/AMDGPU/maximumnum.ll b/llvm/test/CodeGen/AMDGPU/maximumnum.ll
index 7a527a126e379..feb2660ceb815 100644
--- a/llvm/test/CodeGen/AMDGPU/maximumnum.ll
+++ b/llvm/test/CodeGen/AMDGPU/maximumnum.ll
@@ -8688,12 +8688,12 @@ define <2 x double> @v_maximumnum_v2f64(<2 x double> %x, <2 x double> %y) #1 {
; GFX950-LABEL: v_maximumnum_v2f64:
; GFX950: ; %bb.0:
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX950-NEXT: v_max_f64 v[6:7], v[6:7], v[6:7]
+; GFX950-NEXT: v_max_f64 v[2:3], v[2:3], v[2:3]
; GFX950-NEXT: v_max_f64 v[4:5], v[4:5], v[4:5]
; GFX950-NEXT: v_max_f64 v[0:1], v[0:1], v[0:1]
+; GFX950-NEXT: v_max_f64 v[2:3], v[2:3], v[6:7]
; GFX950-NEXT: v_max_f64 v[0:1], v[0:1], v[4:5]
-; GFX950-NEXT: v_max_f64 v[4:5], v[6:7], v[6:7]
-; GFX950-NEXT: v_max_f64 v[2:3], v[2:3], v[2:3]
-; GFX950-NEXT: v_max_f64 v[2:3], v[2:3], v[4:5]
; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_maximumnum_v2f64:
@@ -8859,12 +8859,19 @@ define <2 x double> @v_maximumnum_v2f64_nnan(<2 x double> %x, <2 x double> %y) #
; GFX8-NEXT: v_max_f64 v[2:3], v[2:3], v[6:7]
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
-; GFX9-LABEL: v_maximumnum_v2f64_nnan:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f64 v[0:1], v[0:1], v[4:5]
-; GFX9-NEXT: v_max_f64 v[2:3], v[2:3], v[6:7]
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: v_maximumnum_v2f64_nnan:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: v_max_f64 v[0:1], v[0:1], v[4:5]
+; GFX900-NEXT: v_max_f64 v[2:3], v[2:3], v[6:7]
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX950-LABEL: v_maximumnum_v2f64_nnan:
+; GFX950: ; %bb.0:
+; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX950-NEXT: v_max_f64 v[2:3], v[2:3], v[6:7]
+; GFX950-NEXT: v_max_f64 v[0:1], v[0:1], v[4:5]
+; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_maximumnum_v2f64_nnan:
; GFX10: ; %bb.0:
@@ -8961,15 +8968,15 @@ define <3 x double> @v_maximumnum_v3f64(<3 x double> %x, <3 x double> %y) #1 {
; GFX950-LABEL: v_maximumnum_v3f64:
; GFX950: ; %bb.0:
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX950-NEXT: v_max_f64 v[10:11], v[10:11], v[10:11]
+; GFX950-NEXT: v_max_f64 v[4:5], v[4:5], v[4:5]
+; GFX950-NEXT: v_max_f64 v[8:9], v[8:9], v[8:9]
+; GFX950-NEXT: v_max_f64 v[2:3], v[2:3], v[2:3]
; GFX950-NEXT: v_max_f64 v[6:7], v[6:7], v[6:7]
; GFX950-NEXT: v_max_f64 v[0:1], v[0:1], v[0:1]
+; GFX950-NEXT: v_max_f64 v[4:5], v[4:5], v[10:11]
+; GFX950-NEXT: v_max_f64 v[2:3], v[2:3], v[8:9]
; GFX950-NEXT: v_max_f64 v[0:1], v[0:1], v[6:7]
-; GFX950-NEXT: v_max_f64 v[6:7], v[8:9], v[8:9]
-; GFX950-NEXT: v_max_f64 v[2:3], v[2:3], v[2:3]
-; GFX950-NEXT: v_max_f64 v[2:3], v[2:3], v[6:7]
-; GFX950-NEXT: v_max_f64 v[6:7], v[10:11], v[10:11]
-; GFX950-NEXT: v_max_f64 v[4:5], v[4:5], v[4:5]
-; GFX950-NEXT: v_max_f64 v[4:5], v[4:5], v[6:7]
; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_maximumnum_v3f64:
@@ -9175,13 +9182,21 @@ define <3 x double> @v_maximumnum_v3f64_nnan(<3 x double> %x, <3 x double> %y) #
; GFX8-NEXT: v_max_f64 v[4:5], v[4:5], v[10:11]
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
-; GFX9-LABEL: v_maximumnum_v3f64_nnan:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f64 v[0:1], v[0:1], v[6:7]
-; GFX9-NEXT: v_max_f64 v[2:3], v[2:3], v[8:9]
-; GFX9-NEXT: v_max_f64 v[4:5], v[4:5], v[10:11]
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: v_maximumnum_v3f64_nnan:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: v_max_f64 v[0:1], v[0:1], v[6:7]
+; GFX900-NEXT: v_max_f64 v[2:3], v[2:3], v[8:9]
+; GFX900-NEXT: v_max_f64 v[4:5], v[4:5], v[10:11]
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX950-LABEL: v_maximumnum_v3f64_nnan:
+; GFX950: ; %bb.0:
+; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX950-NEXT: v_max_f64 v[4:5], v[4:5], v[10:11]
+; GFX950-NEXT: v_max_f64 v[2:3], v[2:3], v[8:9]
+; GFX950-NEXT: v_max_f64 v[0:1], v[0:1], v[6:7]
+; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_maximumnum_v3f64_nnan:
; GFX10: ; %bb.0:
@@ -9286,18 +9301,18 @@ define <4 x double> @v_maximumnum_v4f64(<4 x double> %x, <4 x double> %y) #1 {
; GFX950-LABEL: v_maximumnum_v4f64:
; GFX950: ; %bb.0:
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX950-NEXT: v_max_f64 v[14:15], v[14:15], v[14:15]
+; GFX950-NEXT: v_max_f64 v[6:7], v[6:7], v[6:7]
+; GFX950-NEXT: v_max_f64 v[12:13], v[12:13], v[12:13]
+; GFX950-NEXT: v_max_f64 v[4:5], v[4:5], v[4:5]
+; GFX950-NEXT: v_max_f64 v[10:11], v[10:11], v[10:11]
+; GFX950-NEXT: v_max_f64 v[2:3], v[2:3], v[2:3]
; GFX950-NEXT: v_max_f64 v[8:9], v[8:9], v[8:9]
; GFX950-NEXT: v_max_f64 v[0:1], v[0:1], v[0:1]
+; GFX950-NEXT: v_max_f64 v[6:7], v[6:7], v[14:15]
+; GFX950-NEXT: v_max_f64 v[4:5], v[4:5], v[12:13]
+; GFX950-NEXT: v_max_f64 v[2:3], v[2:3], v[10:11]
; GFX950-NEXT: v_max_f64 v[0:1], v[0:1], v[8:9]
-; GFX950-NEXT: v_max_f64 v[8:9], v[10:11], v[10:11]
-; GFX950-NEXT: v_max_f64 v[2:3], v[2:3], v[2:3]
-; GFX950-NEXT: v_max_f64 v[2:3], v[2:3], v[8:9]
-; GFX950-NEXT: v_max_f64 v[8:9], v[12:13], v[12:13]
-; GFX950-NEXT: v_max_f64 v[4:5], v[4:5], v[4:5]
-; GFX950-NEXT: v_max_f64 v[4:5], v[4:5], v[8:9]
-; GFX950-NEXT: v_max_f64 v[8:9], v[14:15], v[14:15]
-; GFX950-NEXT: v_max_f64 v[6:7], v[6:7], v[6:7]
-; GFX950-NEXT: v_max_f64 v[6:7], v[6:7], v[8:9]
; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_maximumnum_v4f64:
@@ -9537,14 +9552,23 @@ define <4 x double> @v_maximumnum_v4f64_nnan(<4 x double> %x, <4 x double> %y) #
; GFX8-NEXT: v_max_f64 v[6:7], v[6:7], v[14:15]
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
-; GFX9-LABEL: v_maximumnum_v4f64_nnan:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f64 v[0:1], v[0:1], v[8:9]
-; GFX9-NEXT: v_max_f64 v[2:3], v[2:3], v[10:11]
-; GFX9-NEXT: v_max_f64 v[4:5], v[4:5], v[12:13]
-; GFX9-NEXT: v_max_f64 v[6:7], v[6:7], v[14:15]
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: v_maximumnum_v4f64_nnan:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: v_max_f64 v[0:1], v[0:1], v[8:9]
+; GFX900-NEXT: v_max_f64 v[2:3], v[2:3], v[10:11]
+; GFX900-NEXT: v_max_f64 v[4:5], v[4:5], v[12:13]
+; GFX900-NEXT: v_max_f64 v[6:7], v[6:7], v[14:15]
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX950-LABEL: v_maximumnum_v4f64_nnan:
+; GFX950: ; %bb.0:
+; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX950-NEXT: v_max_f64 v[6:7], v[6:7], v[14:15]
+; GFX950-NEXT: v_max_f64 v[4:5], v[4:5], v[12:13]
+; GFX950-NEXT: v_max_f64 v[2:3], v[2:3], v[10:11]
+; GFX950-NEXT: v_max_f64 v[0:1], v[0:1], v[8:9]
+; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_maximumnum_v4f64_nnan:
; GFX10: ; %bb.0:
diff --git a/llvm/test/CodeGen/AMDGPU/memory-legalizer-buffer-atomics.ll b/llvm/test/CodeGen/AMDGPU/memory-legalizer-buffer-atomics.ll
index 1cf8ef7a918f4..af6b48db0e9f0 100644
--- a/llvm/test/CodeGen/AMDGPU/memory-legalizer-buffer-atomics.ll
+++ b/llvm/test/CodeGen/AMDGPU/memory-legalizer-buffer-atomics.ll
@@ -10,16 +10,10 @@ define void @buffer_fat_ptr_agent_atomic_add_noret_i32(ptr addrspace(7) inreg %p
; GFX1250-NEXT: s_mov_b32 s4, s0
; GFX1250-NEXT: ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr7
; GFX1250-NEXT: s_mov_b32 s7, s3
-; GFX1250-NEXT: s_mov_b32 s8, s7
-; GFX1250-NEXT: s_mov_b32 s9, s6
; GFX1250-NEXT: ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5
; GFX1250-NEXT: s_mov_b32 s5, s1
-; GFX1250-NEXT: s_mov_b32 s10, s5
-; GFX1250-NEXT: s_mov_b32 s0, s4
-; GFX1250-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr3
-; GFX1250-NEXT: s_mov_b32 s1, s10
-; GFX1250-NEXT: s_mov_b32 s2, s9
-; GFX1250-NEXT: s_mov_b32 s3, s8
+; GFX1250-NEXT: s_mov_b64 s[0:1], s[4:5]
+; GFX1250-NEXT: s_mov_b64 s[2:3], s[6:7]
; GFX1250-NEXT: v_mov_b32_e32 v1, s16
; GFX1250-NEXT: s_wait_xcnt 0x0
; GFX1250-NEXT: buffer_atomic_add_u32 v0, v1, s[0:3], null offen
@@ -37,16 +31,10 @@ define i32 @buffer_fat_ptr_agent_atomic_add_ret_i32(ptr addrspace(7) inreg %ptr,
; GFX1250-NEXT: s_mov_b32 s4, s0
; GFX1250-NEXT: ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr7
; GFX1250-NEXT: s_mov_b32 s7, s3
-; GFX1250-NEXT: s_mov_b32 s8, s7
-; GFX1250-NEXT: s_mov_b32 s9, s6
; GFX1250-NEXT: ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5
; GFX1250-NEXT: s_mov_b32 s5, s1
-; GFX1250-NEXT: s_mov_b32 s10, s5
-; GFX1250-NEXT: s_mov_b32 s0, s4
-; GFX1250-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr3
-; GFX1250-NEXT: s_mov_b32 s1, s10
-; GFX1250-NEXT: s_mov_b32 s2, s9
-; GFX1250-NEXT: s_mov_b32 s3, s8
+; GFX1250-NEXT: s_mov_b64 s[0:1], s[4:5]
+; GFX1250-NEXT: s_mov_b64 s[2:3], s[6:7]
; GFX1250-NEXT: v_mov_b32_e32 v1, s16
; GFX1250-NEXT: s_wait_xcnt 0x0
; GFX1250-NEXT: buffer_atomic_add_u32 v0, v1, s[0:3], null offen th:TH_ATOMIC_RETURN
@@ -316,16 +304,10 @@ define void @buffer_fat_ptr_store_i32(ptr addrspace(7) inreg %ptr, i32 %val) {
; GFX1250-NEXT: s_mov_b32 s4, s0
; GFX1250-NEXT: ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr7
; GFX1250-NEXT: s_mov_b32 s7, s3
-; GFX1250-NEXT: s_mov_b32 s8, s7
-; GFX1250-NEXT: s_mov_b32 s9, s6
; GFX1250-NEXT: ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5
; GFX1250-NEXT: s_mov_b32 s5, s1
-; GFX1250-NEXT: s_mov_b32 s10, s5
-; GFX1250-NEXT: s_mov_b32 s0, s4
-; GFX1250-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr3
-; GFX1250-NEXT: s_mov_b32 s1, s10
-; GFX1250-NEXT: s_mov_b32 s2, s9
-; GFX1250-NEXT: s_mov_b32 s3, s8
+; GFX1250-NEXT: s_mov_b64 s[0:1], s[4:5]
+; GFX1250-NEXT: s_mov_b64 s[2:3], s[6:7]
; GFX1250-NEXT: v_mov_b32_e32 v1, s16
; GFX1250-NEXT: buffer_store_b32 v0, v1, s[0:3], null offen
; GFX1250-NEXT: s_set_pc_i64 s[30:31]
@@ -342,16 +324,10 @@ define void @buffer_fat_ptr_store_i32_volatile(ptr addrspace(7) inreg %ptr, i32
; GFX1250-NEXT: s_mov_b32 s4, s0
; GFX1250-NEXT: ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr7
; GFX1250-NEXT: s_mov_b32 s7, s3
-; GFX1250-NEXT: s_mov_b32 s8, s7
-; GFX1250-NEXT: s_mov_b32 s9, s6
; GFX1250-NEXT: ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5
; GFX1250-NEXT: s_mov_b32 s5, s1
-; GFX1250-NEXT: s_mov_b32 s10, s5
-; GFX1250-NEXT: s_mov_b32 s0, s4
-; GFX1250-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr3
-; GFX1250-NEXT: s_mov_b32 s1, s10
-; GFX1250-NEXT: s_mov_b32 s2, s9
-; GFX1250-NEXT: s_mov_b32 s3, s8
+; GFX1250-NEXT: s_mov_b64 s[0:1], s[4:5]
+; GFX1250-NEXT: s_mov_b64 s[2:3], s[6:7]
; GFX1250-NEXT: v_mov_b32_e32 v1, s16
; GFX1250-NEXT: s_wait_xcnt 0x0
; GFX1250-NEXT: buffer_store_b32 v0, v1, s[0:3], null offen scope:SCOPE_SYS
@@ -370,16 +346,10 @@ define i32 @buffer_fat_ptr_load_i32(ptr addrspace(7) inreg %ptr) {
; GFX1250-NEXT: s_mov_b32 s4, s0
; GFX1250-NEXT: ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr7
; GFX1250-NEXT: s_mov_b32 s7, s3
-; GFX1250-NEXT: s_mov_b32 s8, s7
-; GFX1250-NEXT: s_mov_b32 s9, s6
; GFX1250-NEXT: ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5
; GFX1250-NEXT: s_mov_b32 s5, s1
-; GFX1250-NEXT: s_mov_b32 s10, s5
-; GFX1250-NEXT: s_mov_b32 s0, s4
-; GFX1250-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr3
-; GFX1250-NEXT: s_mov_b32 s1, s10
-; GFX1250-NEXT: s_mov_b32 s2, s9
-; GFX1250-NEXT: s_mov_b32 s3, s8
+; GFX1250-NEXT: s_mov_b64 s[0:1], s[4:5]
+; GFX1250-NEXT: s_mov_b64 s[2:3], s[6:7]
; GFX1250-NEXT: v_mov_b32_e32 v0, s16
; GFX1250-NEXT: buffer_load_b32 v0, v0, s[0:3], null offen
; GFX1250-NEXT: s_wait_loadcnt 0x0
@@ -397,16 +367,10 @@ define i32 @buffer_fat_ptr_load_i32_volatile(ptr addrspace(7) inreg %ptr) {
; GFX1250-NEXT: s_mov_b32 s4, s0
; GFX1250-NEXT: ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr7
; GFX1250-NEXT: s_mov_b32 s7, s3
-; GFX1250-NEXT: s_mov_b32 s8, s7
-; GFX1250-NEXT: s_mov_b32 s9, s6
; GFX1250-NEXT: ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5
; GFX1250-NEXT: s_mov_b32 s5, s1
-; GFX1250-NEXT: s_mov_b32 s10, s5
-; GFX1250-NEXT: s_mov_b32 s0, s4
-; GFX1250-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr3
-; GFX1250-NEXT: s_mov_b32 s1, s10
-; GFX1250-NEXT: s_mov_b32 s2, s9
-; GFX1250-NEXT: s_mov_b32 s3, s8
+; GFX1250-NEXT: s_mov_b64 s[0:1], s[4:5]
+; GFX1250-NEXT: s_mov_b64 s[2:3], s[6:7]
; GFX1250-NEXT: v_mov_b32_e32 v0, s16
; GFX1250-NEXT: s_wait_xcnt 0x0
; GFX1250-NEXT: buffer_load_b32 v0, v0, s[0:3], null offen scope:SCOPE_SYS
diff --git a/llvm/test/CodeGen/AMDGPU/memset-param-combinations.ll b/llvm/test/CodeGen/AMDGPU/memset-param-combinations.ll
index e68570f5630e7..d37474850a330 100644
--- a/llvm/test/CodeGen/AMDGPU/memset-param-combinations.ll
+++ b/llvm/test/CodeGen/AMDGPU/memset-param-combinations.ll
@@ -19,8 +19,7 @@ define void @memset_p0_varsize_align_4_varsetval(ptr addrspace(0) align 4 %dst,
; GFX942-SDAG-NEXT: s_mov_b32 s4, 0x4040404
; GFX942-SDAG-NEXT: v_perm_b32 v4, v2, v2, s4
; GFX942-SDAG-NEXT: v_mov_b32_e32 v5, v4
-; GFX942-SDAG-NEXT: v_mov_b32_e32 v6, v4
-; GFX942-SDAG-NEXT: v_mov_b32_e32 v7, v4
+; GFX942-SDAG-NEXT: v_mov_b64_e32 v[6:7], v[4:5]
; GFX942-SDAG-NEXT: s_mov_b64 s[4:5], 0
; GFX942-SDAG-NEXT: .LBB0_2: ; %dynamic-memset-expansion-main-body
; GFX942-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1
@@ -141,8 +140,7 @@ define void @memset_p1_varsize_align_4_varsetval(ptr addrspace(1) align 4 %dst,
; GFX942-SDAG-NEXT: s_mov_b32 s4, 0x4040404
; GFX942-SDAG-NEXT: v_perm_b32 v4, v2, v2, s4
; GFX942-SDAG-NEXT: v_mov_b32_e32 v5, v4
-; GFX942-SDAG-NEXT: v_mov_b32_e32 v6, v4
-; GFX942-SDAG-NEXT: v_mov_b32_e32 v7, v4
+; GFX942-SDAG-NEXT: v_mov_b64_e32 v[6:7], v[4:5]
; GFX942-SDAG-NEXT: s_mov_b64 s[4:5], 0
; GFX942-SDAG-NEXT: .LBB1_2: ; %dynamic-memset-expansion-main-body
; GFX942-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1
@@ -376,8 +374,7 @@ define void @memset_p5_varsize_align_4_varsetval(ptr addrspace(5) align 4 %dst,
; GFX942-SDAG-NEXT: s_mov_b32 s4, 0x4040404
; GFX942-SDAG-NEXT: v_perm_b32 v4, v1, v1, s4
; GFX942-SDAG-NEXT: v_mov_b32_e32 v5, v4
-; GFX942-SDAG-NEXT: v_mov_b32_e32 v6, v4
-; GFX942-SDAG-NEXT: v_mov_b32_e32 v7, v4
+; GFX942-SDAG-NEXT: v_mov_b64_e32 v[6:7], v[4:5]
; GFX942-SDAG-NEXT: v_mov_b32_e32 v10, v0
; GFX942-SDAG-NEXT: s_mov_b64 s[4:5], 0
; GFX942-SDAG-NEXT: .LBB3_2: ; %dynamic-memset-expansion-main-body
@@ -536,10 +533,9 @@ define void @memset_p0_sz1055_align_4_varsetval(ptr addrspace(0) align 4 %dst, i
; GFX942-SDAG-NEXT: ; %bb.2: ; %static-memset-post-expansion
; GFX942-SDAG-NEXT: s_mov_b32 s0, 0x4040404
; GFX942-SDAG-NEXT: v_perm_b32 v4, v2, v2, s0
-; GFX942-SDAG-NEXT: v_lshlrev_b16_e32 v3, 8, v2
; GFX942-SDAG-NEXT: v_mov_b32_e32 v5, v4
-; GFX942-SDAG-NEXT: v_mov_b32_e32 v6, v4
-; GFX942-SDAG-NEXT: v_mov_b32_e32 v7, v4
+; GFX942-SDAG-NEXT: v_lshlrev_b16_e32 v3, 8, v2
+; GFX942-SDAG-NEXT: v_mov_b64_e32 v[6:7], v[4:5]
; GFX942-SDAG-NEXT: v_or_b32_sdwa v3, v2, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
; GFX942-SDAG-NEXT: flat_store_dwordx4 v[0:1], v[4:7] offset:1024
; GFX942-SDAG-NEXT: flat_store_dwordx3 v[0:1], v[4:6] offset:1040
@@ -760,10 +756,9 @@ define void @memset_p1_sz1055_align_4_varsetval(ptr addrspace(1) align 4 %dst, i
; GFX942-SDAG-NEXT: ; %bb.2: ; %static-memset-post-expansion
; GFX942-SDAG-NEXT: s_mov_b32 s0, 0x4040404
; GFX942-SDAG-NEXT: v_perm_b32 v4, v2, v2, s0
-; GFX942-SDAG-NEXT: v_lshlrev_b16_e32 v3, 8, v2
; GFX942-SDAG-NEXT: v_mov_b32_e32 v5, v4
-; GFX942-SDAG-NEXT: v_mov_b32_e32 v6, v4
-; GFX942-SDAG-NEXT: v_mov_b32_e32 v7, v4
+; GFX942-SDAG-NEXT: v_lshlrev_b16_e32 v3, 8, v2
+; GFX942-SDAG-NEXT: v_mov_b64_e32 v[6:7], v[4:5]
; GFX942-SDAG-NEXT: v_or_b32_sdwa v3, v2, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
; GFX942-SDAG-NEXT: global_store_dwordx4 v[0:1], v[4:7], off offset:1024
; GFX942-SDAG-NEXT: global_store_dwordx3 v[0:1], v[4:6], off offset:1040
@@ -975,14 +970,14 @@ define void @memset_p3_sz1055_align_4_varsetval(ptr addrspace(3) align 4 %dst, i
; GFX942-SDAG-NEXT: s_cbranch_vccnz .LBB8_1
; GFX942-SDAG-NEXT: ; %bb.2: ; %static-memset-post-expansion
; GFX942-SDAG-NEXT: s_mov_b32 s0, 0x4040404
-; GFX942-SDAG-NEXT: v_add_u32_e32 v2, 0x400, v0
-; GFX942-SDAG-NEXT: v_add_u32_e32 v3, 0x408, v0
-; GFX942-SDAG-NEXT: v_perm_b32 v4, v1, v1, s0
-; GFX942-SDAG-NEXT: ds_write2_b32 v3, v4, v4 offset1:1
-; GFX942-SDAG-NEXT: ds_write2_b32 v2, v4, v4 offset1:1
-; GFX942-SDAG-NEXT: v_add_u32_e32 v2, 0x410, v0
-; GFX942-SDAG-NEXT: ds_write2_b32 v2, v4, v4 offset1:1
-; GFX942-SDAG-NEXT: ds_write_b32 v0, v4 offset:1048
+; GFX942-SDAG-NEXT: v_perm_b32 v2, v1, v1, s0
+; GFX942-SDAG-NEXT: v_add_u32_e32 v3, 0x400, v0
+; GFX942-SDAG-NEXT: v_add_u32_e32 v4, 0x408, v0
+; GFX942-SDAG-NEXT: ds_write2_b32 v4, v2, v2 offset1:1
+; GFX942-SDAG-NEXT: ds_write2_b32 v3, v2, v2 offset1:1
+; GFX942-SDAG-NEXT: v_add_u32_e32 v3, 0x410, v0
+; GFX942-SDAG-NEXT: ds_write2_b32 v3, v2, v2 offset1:1
+; GFX942-SDAG-NEXT: ds_write_b32 v0, v2 offset:1048
; GFX942-SDAG-NEXT: v_lshlrev_b16_e32 v2, 8, v1
; GFX942-SDAG-NEXT: v_or_b32_sdwa v2, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
; GFX942-SDAG-NEXT: ds_write_b16 v0, v2 offset:1052
@@ -1190,8 +1185,7 @@ define void @memset_p5_sz1055_align_4_varsetval(ptr addrspace(5) align 4 %dst, i
; GFX942-SDAG-NEXT: s_mov_b32 s0, 0x4040404
; GFX942-SDAG-NEXT: v_perm_b32 v2, v1, v1, s0
; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, v2
-; GFX942-SDAG-NEXT: v_mov_b32_e32 v4, v2
-; GFX942-SDAG-NEXT: v_mov_b32_e32 v5, v2
+; GFX942-SDAG-NEXT: v_mov_b64_e32 v[4:5], v[2:3]
; GFX942-SDAG-NEXT: scratch_store_dwordx4 v0, v[2:5], off offset:1024
; GFX942-SDAG-NEXT: scratch_store_dwordx2 v0, v[2:3], off offset:1040
; GFX942-SDAG-NEXT: scratch_store_dword v0, v2, off offset:1048
@@ -1483,10 +1477,8 @@ define void @memset_p1_varsz_align_4_set0(ptr addrspace(1) align 4 %dst, i64 %si
; GFX942-SDAG-NEXT: s_and_saveexec_b64 s[2:3], vcc
; GFX942-SDAG-NEXT: s_cbranch_execz .LBB13_3
; GFX942-SDAG-NEXT: ; %bb.1: ; %dynamic-memset-expansion-main-body.preheader
-; GFX942-SDAG-NEXT: v_mov_b32_e32 v6, v5
-; GFX942-SDAG-NEXT: v_mov_b32_e32 v7, v5
-; GFX942-SDAG-NEXT: v_mov_b32_e32 v8, v5
-; GFX942-SDAG-NEXT: v_mov_b32_e32 v9, v5
+; GFX942-SDAG-NEXT: v_mov_b64_e32 v[6:7], 0
+; GFX942-SDAG-NEXT: v_mov_b64_e32 v[8:9], v[6:7]
; GFX942-SDAG-NEXT: s_mov_b64 s[4:5], 0
; GFX942-SDAG-NEXT: .LBB13_2: ; %dynamic-memset-expansion-main-body
; GFX942-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1
diff --git a/llvm/test/CodeGen/AMDGPU/memset-pattern.ll b/llvm/test/CodeGen/AMDGPU/memset-pattern.ll
index eb6240b10939c..d3eca1edc0075 100644
--- a/llvm/test/CodeGen/AMDGPU/memset-pattern.ll
+++ b/llvm/test/CodeGen/AMDGPU/memset-pattern.ll
@@ -874,8 +874,7 @@ define void @memset_pattern_i64_as7_dynlen_dynval(ptr addrspace(7) inreg align 1
; GFX942-SDAG-NEXT: s_cbranch_execz .LBB13_3
; GFX942-SDAG-NEXT: ; %bb.1: ; %memset.pattern-expansion-main-body.preheader
; GFX942-SDAG-NEXT: v_add_u32_e32 v6, s16, v0
-; GFX942-SDAG-NEXT: v_mov_b32_e32 v10, v8
-; GFX942-SDAG-NEXT: v_mov_b32_e32 v11, v9
+; GFX942-SDAG-NEXT: v_mov_b64_e32 v[10:11], v[8:9]
; GFX942-SDAG-NEXT: s_mov_b64 s[8:9], 0
; GFX942-SDAG-NEXT: .LBB13_2: ; %memset.pattern-expansion-main-body
; GFX942-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1
diff --git a/llvm/test/CodeGen/AMDGPU/mfma-loop.ll b/llvm/test/CodeGen/AMDGPU/mfma-loop.ll
index f189fce3ca229..42c69ca605351 100644
--- a/llvm/test/CodeGen/AMDGPU/mfma-loop.ll
+++ b/llvm/test/CodeGen/AMDGPU/mfma-loop.ll
@@ -2441,38 +2441,23 @@ define amdgpu_kernel void @test_mfma_nested_loop_zeroinit(ptr addrspace(1) %arg)
;
; GFX942-LABEL: test_mfma_nested_loop_zeroinit:
; GFX942: ; %bb.0: ; %entry
-; GFX942-NEXT: s_mov_b32 s36, 0
-; GFX942-NEXT: s_mov_b32 s37, s36
-; GFX942-NEXT: s_mov_b32 s38, s36
-; GFX942-NEXT: s_mov_b32 s39, s36
-; GFX942-NEXT: s_mov_b32 s40, s36
-; GFX942-NEXT: s_mov_b32 s41, s36
-; GFX942-NEXT: s_mov_b32 s42, s36
-; GFX942-NEXT: s_mov_b32 s43, s36
-; GFX942-NEXT: s_mov_b32 s44, s36
-; GFX942-NEXT: s_mov_b32 s45, s36
-; GFX942-NEXT: s_mov_b32 s46, s36
-; GFX942-NEXT: s_mov_b32 s47, s36
-; GFX942-NEXT: s_mov_b32 s48, s36
-; GFX942-NEXT: s_mov_b32 s49, s36
-; GFX942-NEXT: s_mov_b32 s50, s36
-; GFX942-NEXT: s_mov_b32 s51, s36
-; GFX942-NEXT: s_mov_b32 s52, s36
-; GFX942-NEXT: s_mov_b32 s53, s36
-; GFX942-NEXT: s_mov_b32 s54, s36
-; GFX942-NEXT: s_mov_b32 s55, s36
-; GFX942-NEXT: s_mov_b32 s56, s36
-; GFX942-NEXT: s_mov_b32 s57, s36
-; GFX942-NEXT: s_mov_b32 s58, s36
-; GFX942-NEXT: s_mov_b32 s59, s36
-; GFX942-NEXT: s_mov_b32 s60, s36
-; GFX942-NEXT: s_mov_b32 s61, s36
-; GFX942-NEXT: s_mov_b32 s62, s36
-; GFX942-NEXT: s_mov_b32 s63, s36
-; GFX942-NEXT: s_mov_b32 s64, s36
-; GFX942-NEXT: s_mov_b32 s65, s36
-; GFX942-NEXT: s_mov_b32 s66, s36
-; GFX942-NEXT: s_mov_b32 s67, s36
+; GFX942-NEXT: s_mov_b64 s[36:37], 0
+; GFX942-NEXT: s_mov_b64 s[38:39], s[36:37]
+; GFX942-NEXT: s_mov_b64 s[40:41], s[36:37]
+; GFX942-NEXT: s_mov_b64 s[42:43], s[36:37]
+; GFX942-NEXT: s_mov_b64 s[44:45], s[36:37]
+; GFX942-NEXT: s_mov_b64 s[46:47], s[36:37]
+; GFX942-NEXT: s_mov_b64 s[48:49], s[36:37]
+; GFX942-NEXT: s_mov_b64 s[50:51], s[36:37]
+; GFX942-NEXT: s_mov_b64 s[52:53], s[36:37]
+; GFX942-NEXT: s_mov_b64 s[54:55], s[36:37]
+; GFX942-NEXT: s_mov_b64 s[56:57], s[36:37]
+; GFX942-NEXT: s_mov_b64 s[58:59], s[36:37]
+; GFX942-NEXT: s_mov_b64 s[60:61], s[36:37]
+; GFX942-NEXT: s_mov_b64 s[62:63], s[36:37]
+; GFX942-NEXT: s_mov_b64 s[64:65], s[36:37]
+; GFX942-NEXT: s_mov_b64 s[66:67], s[36:37]
+; GFX942-NEXT: s_mov_b32 s0, 0
; GFX942-NEXT: v_mov_b64_e32 v[0:1], s[36:37]
; GFX942-NEXT: v_mov_b64_e32 v[2:3], s[38:39]
; GFX942-NEXT: v_mov_b64_e32 v[4:5], s[40:41]
@@ -2494,19 +2479,19 @@ define amdgpu_kernel void @test_mfma_nested_loop_zeroinit(ptr addrspace(1) %arg)
; GFX942-NEXT: .LBB9_1: ; %for.cond.preheader
; GFX942-NEXT: ; =>This Loop Header: Depth=1
; GFX942-NEXT: ; Child Loop BB9_2 Depth 2
-; GFX942-NEXT: s_mov_b32 s0, 16
+; GFX942-NEXT: s_mov_b32 s1, 16
; GFX942-NEXT: .LBB9_2: ; %inner.for.cond.preheader
; GFX942-NEXT: ; Parent Loop BB9_1 Depth=1
; GFX942-NEXT: ; => This Inner Loop Header: Depth=2
; GFX942-NEXT: s_nop 0
; GFX942-NEXT: v_mfma_f32_32x32x1_2b_f32 v[0:31], v33, v32, v[0:31]
-; GFX942-NEXT: s_add_i32 s0, s0, -1
-; GFX942-NEXT: s_cmp_lg_u32 s0, 0
+; GFX942-NEXT: s_add_i32 s1, s1, -1
+; GFX942-NEXT: s_cmp_lg_u32 s1, 0
; GFX942-NEXT: s_cbranch_scc1 .LBB9_2
; GFX942-NEXT: ; %bb.3: ; %inner.exit
; GFX942-NEXT: ; in Loop: Header=BB9_1 Depth=1
-; GFX942-NEXT: s_add_i32 s36, s36, 1
-; GFX942-NEXT: s_cmp_lg_u32 s36, 16
+; GFX942-NEXT: s_add_i32 s0, s0, 1
+; GFX942-NEXT: s_cmp_lg_u32 s0, 16
; GFX942-NEXT: s_cbranch_scc1 .LBB9_1
; GFX942-NEXT: ; %bb.4: ; %exit
; GFX942-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24
diff --git a/llvm/test/CodeGen/AMDGPU/minimumnum.ll b/llvm/test/CodeGen/AMDGPU/minimumnum.ll
index 058fa30d8a96b..72d9ba018df6d 100644
--- a/llvm/test/CodeGen/AMDGPU/minimumnum.ll
+++ b/llvm/test/CodeGen/AMDGPU/minimumnum.ll
@@ -8469,12 +8469,12 @@ define <2 x double> @v_minimumnum_v2f64(<2 x double> %x, <2 x double> %y) #1 {
; GFX950-LABEL: v_minimumnum_v2f64:
; GFX950: ; %bb.0:
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX950-NEXT: v_max_f64 v[6:7], v[6:7], v[6:7]
+; GFX950-NEXT: v_max_f64 v[2:3], v[2:3], v[2:3]
; GFX950-NEXT: v_max_f64 v[4:5], v[4:5], v[4:5]
; GFX950-NEXT: v_max_f64 v[0:1], v[0:1], v[0:1]
+; GFX950-NEXT: v_min_f64 v[2:3], v[2:3], v[6:7]
; GFX950-NEXT: v_min_f64 v[0:1], v[0:1], v[4:5]
-; GFX950-NEXT: v_max_f64 v[4:5], v[6:7], v[6:7]
-; GFX950-NEXT: v_max_f64 v[2:3], v[2:3], v[2:3]
-; GFX950-NEXT: v_min_f64 v[2:3], v[2:3], v[4:5]
; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_minimumnum_v2f64:
@@ -8640,12 +8640,19 @@ define <2 x double> @v_minimumnum_v2f64_nnan(<2 x double> %x, <2 x double> %y) #
; GFX8-NEXT: v_min_f64 v[2:3], v[2:3], v[6:7]
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
-; GFX9-LABEL: v_minimumnum_v2f64_nnan:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_min_f64 v[0:1], v[0:1], v[4:5]
-; GFX9-NEXT: v_min_f64 v[2:3], v[2:3], v[6:7]
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: v_minimumnum_v2f64_nnan:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: v_min_f64 v[0:1], v[0:1], v[4:5]
+; GFX900-NEXT: v_min_f64 v[2:3], v[2:3], v[6:7]
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX950-LABEL: v_minimumnum_v2f64_nnan:
+; GFX950: ; %bb.0:
+; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX950-NEXT: v_min_f64 v[2:3], v[2:3], v[6:7]
+; GFX950-NEXT: v_min_f64 v[0:1], v[0:1], v[4:5]
+; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_minimumnum_v2f64_nnan:
; GFX10: ; %bb.0:
@@ -8742,15 +8749,15 @@ define <3 x double> @v_minimumnum_v3f64(<3 x double> %x, <3 x double> %y) #1 {
; GFX950-LABEL: v_minimumnum_v3f64:
; GFX950: ; %bb.0:
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX950-NEXT: v_max_f64 v[10:11], v[10:11], v[10:11]
+; GFX950-NEXT: v_max_f64 v[4:5], v[4:5], v[4:5]
+; GFX950-NEXT: v_max_f64 v[8:9], v[8:9], v[8:9]
+; GFX950-NEXT: v_max_f64 v[2:3], v[2:3], v[2:3]
; GFX950-NEXT: v_max_f64 v[6:7], v[6:7], v[6:7]
; GFX950-NEXT: v_max_f64 v[0:1], v[0:1], v[0:1]
+; GFX950-NEXT: v_min_f64 v[4:5], v[4:5], v[10:11]
+; GFX950-NEXT: v_min_f64 v[2:3], v[2:3], v[8:9]
; GFX950-NEXT: v_min_f64 v[0:1], v[0:1], v[6:7]
-; GFX950-NEXT: v_max_f64 v[6:7], v[8:9], v[8:9]
-; GFX950-NEXT: v_max_f64 v[2:3], v[2:3], v[2:3]
-; GFX950-NEXT: v_min_f64 v[2:3], v[2:3], v[6:7]
-; GFX950-NEXT: v_max_f64 v[6:7], v[10:11], v[10:11]
-; GFX950-NEXT: v_max_f64 v[4:5], v[4:5], v[4:5]
-; GFX950-NEXT: v_min_f64 v[4:5], v[4:5], v[6:7]
; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_minimumnum_v3f64:
@@ -8956,13 +8963,21 @@ define <3 x double> @v_minimumnum_v3f64_nnan(<3 x double> %x, <3 x double> %y) #
; GFX8-NEXT: v_min_f64 v[4:5], v[4:5], v[10:11]
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
-; GFX9-LABEL: v_minimumnum_v3f64_nnan:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_min_f64 v[0:1], v[0:1], v[6:7]
-; GFX9-NEXT: v_min_f64 v[2:3], v[2:3], v[8:9]
-; GFX9-NEXT: v_min_f64 v[4:5], v[4:5], v[10:11]
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: v_minimumnum_v3f64_nnan:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: v_min_f64 v[0:1], v[0:1], v[6:7]
+; GFX900-NEXT: v_min_f64 v[2:3], v[2:3], v[8:9]
+; GFX900-NEXT: v_min_f64 v[4:5], v[4:5], v[10:11]
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX950-LABEL: v_minimumnum_v3f64_nnan:
+; GFX950: ; %bb.0:
+; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX950-NEXT: v_min_f64 v[4:5], v[4:5], v[10:11]
+; GFX950-NEXT: v_min_f64 v[2:3], v[2:3], v[8:9]
+; GFX950-NEXT: v_min_f64 v[0:1], v[0:1], v[6:7]
+; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_minimumnum_v3f64_nnan:
; GFX10: ; %bb.0:
@@ -9067,18 +9082,18 @@ define <4 x double> @v_minimumnum_v4f64(<4 x double> %x, <4 x double> %y) #1 {
; GFX950-LABEL: v_minimumnum_v4f64:
; GFX950: ; %bb.0:
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX950-NEXT: v_max_f64 v[14:15], v[14:15], v[14:15]
+; GFX950-NEXT: v_max_f64 v[6:7], v[6:7], v[6:7]
+; GFX950-NEXT: v_max_f64 v[12:13], v[12:13], v[12:13]
+; GFX950-NEXT: v_max_f64 v[4:5], v[4:5], v[4:5]
+; GFX950-NEXT: v_max_f64 v[10:11], v[10:11], v[10:11]
+; GFX950-NEXT: v_max_f64 v[2:3], v[2:3], v[2:3]
; GFX950-NEXT: v_max_f64 v[8:9], v[8:9], v[8:9]
; GFX950-NEXT: v_max_f64 v[0:1], v[0:1], v[0:1]
+; GFX950-NEXT: v_min_f64 v[6:7], v[6:7], v[14:15]
+; GFX950-NEXT: v_min_f64 v[4:5], v[4:5], v[12:13]
+; GFX950-NEXT: v_min_f64 v[2:3], v[2:3], v[10:11]
; GFX950-NEXT: v_min_f64 v[0:1], v[0:1], v[8:9]
-; GFX950-NEXT: v_max_f64 v[8:9], v[10:11], v[10:11]
-; GFX950-NEXT: v_max_f64 v[2:3], v[2:3], v[2:3]
-; GFX950-NEXT: v_min_f64 v[2:3], v[2:3], v[8:9]
-; GFX950-NEXT: v_max_f64 v[8:9], v[12:13], v[12:13]
-; GFX950-NEXT: v_max_f64 v[4:5], v[4:5], v[4:5]
-; GFX950-NEXT: v_min_f64 v[4:5], v[4:5], v[8:9]
-; GFX950-NEXT: v_max_f64 v[8:9], v[14:15], v[14:15]
-; GFX950-NEXT: v_max_f64 v[6:7], v[6:7], v[6:7]
-; GFX950-NEXT: v_min_f64 v[6:7], v[6:7], v[8:9]
; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_minimumnum_v4f64:
@@ -9318,14 +9333,23 @@ define <4 x double> @v_minimumnum_v4f64_nnan(<4 x double> %x, <4 x double> %y) #
; GFX8-NEXT: v_min_f64 v[6:7], v[6:7], v[14:15]
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
-; GFX9-LABEL: v_minimumnum_v4f64_nnan:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_min_f64 v[0:1], v[0:1], v[8:9]
-; GFX9-NEXT: v_min_f64 v[2:3], v[2:3], v[10:11]
-; GFX9-NEXT: v_min_f64 v[4:5], v[4:5], v[12:13]
-; GFX9-NEXT: v_min_f64 v[6:7], v[6:7], v[14:15]
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: v_minimumnum_v4f64_nnan:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: v_min_f64 v[0:1], v[0:1], v[8:9]
+; GFX900-NEXT: v_min_f64 v[2:3], v[2:3], v[10:11]
+; GFX900-NEXT: v_min_f64 v[4:5], v[4:5], v[12:13]
+; GFX900-NEXT: v_min_f64 v[6:7], v[6:7], v[14:15]
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX950-LABEL: v_minimumnum_v4f64_nnan:
+; GFX950: ; %bb.0:
+; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX950-NEXT: v_min_f64 v[6:7], v[6:7], v[14:15]
+; GFX950-NEXT: v_min_f64 v[4:5], v[4:5], v[12:13]
+; GFX950-NEXT: v_min_f64 v[2:3], v[2:3], v[10:11]
+; GFX950-NEXT: v_min_f64 v[0:1], v[0:1], v[8:9]
+; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_minimumnum_v4f64_nnan:
; GFX10: ; %bb.0:
diff --git a/llvm/test/CodeGen/AMDGPU/mul.ll b/llvm/test/CodeGen/AMDGPU/mul.ll
index d9758dd741dfa..41d035c2aa2d8 100644
--- a/llvm/test/CodeGen/AMDGPU/mul.ll
+++ b/llvm/test/CodeGen/AMDGPU/mul.ll
@@ -3677,34 +3677,34 @@ define amdgpu_kernel void @s_mul_i128(ptr addrspace(1) %out, [8 x i32], i128 %a,
; GFX1250-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
; GFX1250-NEXT: s_mov_b32 s7, s3
; GFX1250-NEXT: s_mov_b32 s17, s3
-; GFX1250-NEXT: s_mov_b32 s19, s3
-; GFX1250-NEXT: s_mov_b32 s20, s3
+; GFX1250-NEXT: s_mov_b32 s21, s3
+; GFX1250-NEXT: s_mov_b32 s24, s3
; GFX1250-NEXT: s_wait_kmcnt 0x0
; GFX1250-NEXT: s_mov_b32 s2, s8
; GFX1250-NEXT: s_and_b64 s[4:5], s[12:13], s[4:5]
; GFX1250-NEXT: s_mov_b32 s6, s13
-; GFX1250-NEXT: s_mul_u64 s[22:23], s[4:5], s[2:3]
-; GFX1250-NEXT: s_mul_u64 s[24:25], s[6:7], s[2:3]
-; GFX1250-NEXT: s_mov_b32 s2, s23
+; GFX1250-NEXT: s_mul_u64 s[18:19], s[4:5], s[2:3]
+; GFX1250-NEXT: s_mul_u64 s[22:23], s[6:7], s[2:3]
+; GFX1250-NEXT: s_mov_b32 s2, s19
; GFX1250-NEXT: s_mov_b32 s16, s9
-; GFX1250-NEXT: s_mul_u64 s[10:11], s[10:11], s[12:13]
-; GFX1250-NEXT: s_add_nc_u64 s[12:13], s[24:25], s[2:3]
+; GFX1250-NEXT: s_add_nc_u64 s[22:23], s[22:23], s[2:3]
; GFX1250-NEXT: s_mul_u64 s[4:5], s[4:5], s[16:17]
-; GFX1250-NEXT: s_mov_b32 s2, s13
-; GFX1250-NEXT: s_mov_b32 s13, s3
+; GFX1250-NEXT: s_mov_b32 s2, s23
+; GFX1250-NEXT: s_mov_b32 s23, s3
; GFX1250-NEXT: s_mul_u64 s[8:9], s[8:9], s[14:15]
-; GFX1250-NEXT: s_add_nc_u64 s[4:5], s[4:5], s[12:13]
+; GFX1250-NEXT: s_add_nc_u64 s[4:5], s[4:5], s[22:23]
+; GFX1250-NEXT: s_mul_u64 s[10:11], s[10:11], s[12:13]
+; GFX1250-NEXT: s_mov_b32 s20, s5
; GFX1250-NEXT: s_mul_u64 s[6:7], s[6:7], s[16:17]
-; GFX1250-NEXT: s_mov_b32 s18, s5
-; GFX1250-NEXT: s_mov_b32 s23, s3
-; GFX1250-NEXT: s_add_nc_u64 s[2:3], s[2:3], s[18:19]
-; GFX1250-NEXT: s_add_nc_u64 s[8:9], s[10:11], s[8:9]
-; GFX1250-NEXT: s_mov_b32 s21, s4
+; GFX1250-NEXT: s_mov_b32 s19, s3
+; GFX1250-NEXT: s_add_nc_u64 s[2:3], s[2:3], s[20:21]
+; GFX1250-NEXT: s_mov_b32 s25, s4
; GFX1250-NEXT: s_add_nc_u64 s[2:3], s[6:7], s[2:3]
-; GFX1250-NEXT: s_or_b64 s[4:5], s[22:23], s[20:21]
-; GFX1250-NEXT: s_add_nc_u64 s[2:3], s[2:3], s[8:9]
-; GFX1250-NEXT: v_dual_mov_b32 v0, s4 :: v_dual_mov_b32 v1, s5
-; GFX1250-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
+; GFX1250-NEXT: s_add_nc_u64 s[4:5], s[10:11], s[8:9]
+; GFX1250-NEXT: s_or_b64 s[6:7], s[18:19], s[24:25]
+; GFX1250-NEXT: s_add_nc_u64 s[2:3], s[2:3], s[4:5]
+; GFX1250-NEXT: v_mov_b64_e32 v[0:1], s[6:7]
+; GFX1250-NEXT: v_mov_b64_e32 v[2:3], s[2:3]
; GFX1250-NEXT: s_mov_b32 s3, 0x31016000
; GFX1250-NEXT: s_mov_b32 s2, -1
; GFX1250-NEXT: buffer_store_b128 v[0:3], off, s[0:3], null
diff --git a/llvm/test/CodeGen/AMDGPU/no-fold-accvgpr-mov.ll b/llvm/test/CodeGen/AMDGPU/no-fold-accvgpr-mov.ll
index 8936db642364f..222c3916773c5 100644
--- a/llvm/test/CodeGen/AMDGPU/no-fold-accvgpr-mov.ll
+++ b/llvm/test/CodeGen/AMDGPU/no-fold-accvgpr-mov.ll
@@ -5,38 +5,36 @@
define amdgpu_kernel void @matmul_kernel(i32 %a0, i32 %a1) {
; GFX942-LABEL: matmul_kernel:
; GFX942: ; %bb.0: ; %entry
-; GFX942-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x0
-; GFX942-NEXT: s_mov_b32 s0, 0
+; GFX942-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x0
+; GFX942-NEXT: s_mov_b32 s4, 0
; GFX942-NEXT: v_mov_b32_e32 v0, 0
; GFX942-NEXT: v_mov_b32_e32 v1, 0
-; GFX942-NEXT: s_mov_b32 s6, 0
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], 0
; GFX942-NEXT: s_waitcnt lgkmcnt(0)
-; GFX942-NEXT: s_cmp_lg_u32 s2, 0
-; GFX942-NEXT: s_cselect_b64 s[2:3], -1, 0
+; GFX942-NEXT: s_cmp_lg_u32 s0, 0
+; GFX942-NEXT: s_cselect_b64 s[0:1], -1, 0
; GFX942-NEXT: s_branch .LBB0_2
; GFX942-NEXT: .LBB0_1: ; %bb2
; GFX942-NEXT: ; in Loop: Header=BB0_2 Depth=1
-; GFX942-NEXT: s_mov_b32 s1, s0
-; GFX942-NEXT: v_mov_b64_e32 v[4:5], s[0:1]
; GFX942-NEXT: v_mov_b32_e32 v2, v1
; GFX942-NEXT: v_mov_b32_e32 v3, v1
-; GFX942-NEXT: s_or_b32 s4, s6, 1
-; GFX942-NEXT: s_ashr_i32 s1, s6, 31
-; GFX942-NEXT: v_mfma_f32_16x16x16_f16 v[2:5], v[4:5], v[4:5], v[0:3]
-; GFX942-NEXT: s_and_b32 s6, s1, s4
-; GFX942-NEXT: s_mov_b64 s[4:5], 0
+; GFX942-NEXT: s_or_b32 s2, s4, 1
+; GFX942-NEXT: s_ashr_i32 s3, s4, 31
+; GFX942-NEXT: v_mfma_f32_16x16x16_f16 v[6:9], v[4:5], v[4:5], v[0:3]
+; GFX942-NEXT: s_and_b32 s4, s3, s2
+; GFX942-NEXT: s_mov_b64 s[2:3], 0
; GFX942-NEXT: s_nop 4
-; GFX942-NEXT: v_mov_b32_e32 v0, v2
-; GFX942-NEXT: s_and_b64 s[4:5], s[4:5], exec
+; GFX942-NEXT: v_mov_b32_e32 v0, v6
+; GFX942-NEXT: s_and_b64 s[2:3], s[2:3], exec
; GFX942-NEXT: s_cbranch_scc1 .LBB0_4
; GFX942-NEXT: .LBB0_2: ; %bb
; GFX942-NEXT: ; =>This Inner Loop Header: Depth=1
-; GFX942-NEXT: s_and_b64 s[4:5], s[2:3], exec
+; GFX942-NEXT: s_and_b64 s[2:3], s[0:1], exec
; GFX942-NEXT: s_cbranch_scc1 .LBB0_1
; GFX942-NEXT: ; %bb.3: ; in Loop: Header=BB0_2 Depth=1
-; GFX942-NEXT: s_mov_b64 s[4:5], -1
-; GFX942-NEXT: ; implicit-def: $sgpr6
-; GFX942-NEXT: s_and_b64 s[4:5], s[4:5], exec
+; GFX942-NEXT: s_mov_b64 s[2:3], -1
+; GFX942-NEXT: ; implicit-def: $sgpr4
+; GFX942-NEXT: s_and_b64 s[2:3], s[2:3], exec
; GFX942-NEXT: s_cbranch_scc0 .LBB0_2
; GFX942-NEXT: .LBB0_4: ; %common.ret
; GFX942-NEXT: s_endpgm
diff --git a/llvm/test/CodeGen/AMDGPU/packed-fp32.ll b/llvm/test/CodeGen/AMDGPU/packed-fp32.ll
index 1ed574b49f77c..1f952a879d174 100644
--- a/llvm/test/CodeGen/AMDGPU/packed-fp32.ll
+++ b/llvm/test/CodeGen/AMDGPU/packed-fp32.ll
@@ -755,18 +755,43 @@ define amdgpu_kernel void @fadd_v2_v_lit_hi0(ptr addrspace(1) %a) {
; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]
; GFX900-NEXT: s_endpgm
;
-; PACKED-LABEL: fadd_v2_v_lit_hi0:
-; PACKED: ; %bb.0:
-; PACKED-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24
-; PACKED-NEXT: v_and_b32_e32 v0, 0x3ff, v0
-; PACKED-NEXT: v_lshlrev_b32_e32 v2, 3, v0
-; PACKED-NEXT: s_mov_b64 s[2:3], 0x3f800000
-; PACKED-NEXT: s_waitcnt lgkmcnt(0)
-; PACKED-NEXT: global_load_dwordx2 v[0:1], v2, s[0:1]
-; PACKED-NEXT: s_waitcnt vmcnt(0)
-; PACKED-NEXT: v_pk_add_f32 v[0:1], v[0:1], s[2:3]
-; PACKED-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]
-; PACKED-NEXT: s_endpgm
+; GFX90A-SDAG-LABEL: fadd_v2_v_lit_hi0:
+; GFX90A-SDAG: ; %bb.0:
+; GFX90A-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24
+; GFX90A-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v0
+; GFX90A-SDAG-NEXT: v_lshlrev_b32_e32 v2, 3, v0
+; GFX90A-SDAG-NEXT: s_mov_b64 s[2:3], 0x3f800000
+; GFX90A-SDAG-NEXT: s_waitcnt lgkmcnt(0)
+; GFX90A-SDAG-NEXT: global_load_dwordx2 v[0:1], v2, s[0:1]
+; GFX90A-SDAG-NEXT: s_waitcnt vmcnt(0)
+; GFX90A-SDAG-NEXT: v_pk_add_f32 v[0:1], v[0:1], s[2:3]
+; GFX90A-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]
+; GFX90A-SDAG-NEXT: s_endpgm
+;
+; PACKED-GISEL-LABEL: fadd_v2_v_lit_hi0:
+; PACKED-GISEL: ; %bb.0:
+; PACKED-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24
+; PACKED-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0
+; PACKED-GISEL-NEXT: v_lshlrev_b32_e32 v2, 3, v0
+; PACKED-GISEL-NEXT: s_mov_b64 s[2:3], 0x3f800000
+; PACKED-GISEL-NEXT: s_waitcnt lgkmcnt(0)
+; PACKED-GISEL-NEXT: global_load_dwordx2 v[0:1], v2, s[0:1]
+; PACKED-GISEL-NEXT: s_waitcnt vmcnt(0)
+; PACKED-GISEL-NEXT: v_pk_add_f32 v[0:1], v[0:1], s[2:3]
+; PACKED-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]
+; PACKED-GISEL-NEXT: s_endpgm
+;
+; GFX942-SDAG-LABEL: fadd_v2_v_lit_hi0:
+; GFX942-SDAG: ; %bb.0:
+; GFX942-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24
+; GFX942-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v0
+; GFX942-SDAG-NEXT: v_lshlrev_b32_e32 v2, 3, v0
+; GFX942-SDAG-NEXT: s_waitcnt lgkmcnt(0)
+; GFX942-SDAG-NEXT: global_load_dwordx2 v[0:1], v2, s[0:1]
+; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0)
+; GFX942-SDAG-NEXT: v_pk_add_f32 v[0:1], v[0:1], 1.0
+; GFX942-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]
+; GFX942-SDAG-NEXT: s_endpgm
;
; GFX1250-SDAG-LABEL: fadd_v2_v_lit_hi0:
; GFX1250-SDAG: ; %bb.0:
diff --git a/llvm/test/CodeGen/AMDGPU/packed-fp64.ll b/llvm/test/CodeGen/AMDGPU/packed-fp64.ll
index c2e3dd87ee39b..07a567c84c526 100644
--- a/llvm/test/CodeGen/AMDGPU/packed-fp64.ll
+++ b/llvm/test/CodeGen/AMDGPU/packed-fp64.ll
@@ -182,112 +182,112 @@ define amdgpu_kernel void @fadd_v32_vs(ptr addrspace(1) %a, <32 x double> %x) {
; GFX1251-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x24 nv
; GFX1251-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v0
; GFX1251-SDAG-NEXT: s_clause 0x3
-; GFX1251-SDAG-NEXT: s_load_b512 s[68:83], s[4:5], 0x1a4 nv
-; GFX1251-SDAG-NEXT: s_load_b512 s[52:67], s[4:5], 0x1e4 nv
-; GFX1251-SDAG-NEXT: s_load_b512 s[8:23], s[4:5], 0x124 nv
+; GFX1251-SDAG-NEXT: s_load_b512 s[68:83], s[4:5], 0x1e4 nv
+; GFX1251-SDAG-NEXT: s_load_b512 s[52:67], s[4:5], 0x1a4 nv
; GFX1251-SDAG-NEXT: s_load_b512 s[36:51], s[4:5], 0x164 nv
-; GFX1251-SDAG-NEXT: v_lshlrev_b32_e32 v48, 8, v0
+; GFX1251-SDAG-NEXT: s_load_b512 s[8:23], s[4:5], 0x124 nv
+; GFX1251-SDAG-NEXT: v_lshlrev_b32_e32 v52, 8, v0
; GFX1251-SDAG-NEXT: s_wait_kmcnt 0x0
; GFX1251-SDAG-NEXT: s_clause 0xf
-; GFX1251-SDAG-NEXT: global_load_b128 v[40:43], v48, s[0:1] offset:144
-; GFX1251-SDAG-NEXT: global_load_b128 v[36:39], v48, s[0:1] offset:128
-; GFX1251-SDAG-NEXT: global_load_b128 v[32:35], v48, s[0:1] offset:176
-; GFX1251-SDAG-NEXT: global_load_b128 v[28:31], v48, s[0:1] offset:160
-; GFX1251-SDAG-NEXT: global_load_b128 v[24:27], v48, s[0:1] offset:208
-; GFX1251-SDAG-NEXT: global_load_b128 v[20:23], v48, s[0:1] offset:192
-; GFX1251-SDAG-NEXT: global_load_b128 v[16:19], v48, s[0:1] offset:240
-; GFX1251-SDAG-NEXT: global_load_b128 v[12:15], v48, s[0:1] offset:224
-; GFX1251-SDAG-NEXT: global_load_b128 v[8:11], v48, s[0:1] offset:16
-; GFX1251-SDAG-NEXT: global_load_b128 v[4:7], v48, s[0:1]
-; GFX1251-SDAG-NEXT: global_load_b128 v[0:3], v48, s[0:1] offset:80
-; GFX1251-SDAG-NEXT: global_load_b128 v[44:47], v48, s[0:1] offset:64
-; GFX1251-SDAG-NEXT: global_load_b128 v[50:53], v48, s[0:1] offset:112
-; GFX1251-SDAG-NEXT: global_load_b128 v[54:57], v48, s[0:1] offset:96
-; GFX1251-SDAG-NEXT: global_load_b128 v[58:61], v48, s[0:1] offset:32
-; GFX1251-SDAG-NEXT: global_load_b128 v[62:65], v48, s[0:1] offset:48
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s72 :: v_dual_mov_b32 v67, s73
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s74 :: v_dual_mov_b32 v69, s75
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s68 :: v_dual_mov_b32 v71, s69
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s70 :: v_dual_mov_b32 v73, s71
-; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xf
-; GFX1251-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_3)
-; GFX1251-SDAG-NEXT: v_pk_add_f64 v[40:43], v[40:43], v[66:69]
+; GFX1251-SDAG-NEXT: global_load_b128 v[44:47], v52, s[0:1] offset:240
+; GFX1251-SDAG-NEXT: global_load_b128 v[40:43], v52, s[0:1] offset:224
+; GFX1251-SDAG-NEXT: global_load_b128 v[36:39], v52, s[0:1] offset:208
+; GFX1251-SDAG-NEXT: global_load_b128 v[32:35], v52, s[0:1] offset:192
+; GFX1251-SDAG-NEXT: global_load_b128 v[28:31], v52, s[0:1] offset:176
+; GFX1251-SDAG-NEXT: global_load_b128 v[24:27], v52, s[0:1] offset:160
+; GFX1251-SDAG-NEXT: global_load_b128 v[20:23], v52, s[0:1] offset:144
+; GFX1251-SDAG-NEXT: global_load_b128 v[16:19], v52, s[0:1] offset:128
+; GFX1251-SDAG-NEXT: global_load_b128 v[12:15], v52, s[0:1] offset:112
+; GFX1251-SDAG-NEXT: global_load_b128 v[8:11], v52, s[0:1] offset:96
+; GFX1251-SDAG-NEXT: global_load_b128 v[4:7], v52, s[0:1] offset:80
+; GFX1251-SDAG-NEXT: global_load_b128 v[0:3], v52, s[0:1] offset:64
+; GFX1251-SDAG-NEXT: global_load_b128 v[48:51], v52, s[0:1] offset:48
+; GFX1251-SDAG-NEXT: global_load_b128 v[54:57], v52, s[0:1] offset:32
+; GFX1251-SDAG-NEXT: global_load_b128 v[58:61], v52, s[0:1] offset:16
+; GFX1251-SDAG-NEXT: global_load_b128 v[62:65], v52, s[0:1]
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s80 :: v_dual_mov_b32 v67, s81
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s82 :: v_dual_mov_b32 v69, s83
-; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xe
-; GFX1251-SDAG-NEXT: v_pk_add_f64 v[36:39], v[36:39], v[70:73]
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s76 :: v_dual_mov_b32 v71, s77
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s78 :: v_dual_mov_b32 v73, s79
+; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xf
+; GFX1251-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX1251-SDAG-NEXT: v_pk_add_f64 v[44:47], v[44:47], v[66:69]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s72 :: v_dual_mov_b32 v67, s73
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s74 :: v_dual_mov_b32 v69, s75
+; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xe
+; GFX1251-SDAG-NEXT: v_pk_add_f64 v[40:43], v[40:43], v[70:73]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s68 :: v_dual_mov_b32 v71, s69
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s70 :: v_dual_mov_b32 v73, s71
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xd
-; GFX1251-SDAG-NEXT: v_pk_add_f64 v[32:35], v[32:35], v[66:69]
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s56 :: v_dual_mov_b32 v67, s57
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s58 :: v_dual_mov_b32 v69, s59
-; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xc
-; GFX1251-SDAG-NEXT: v_pk_add_f64 v[28:31], v[28:31], v[70:73]
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s52 :: v_dual_mov_b32 v71, s53
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s54 :: v_dual_mov_b32 v73, s55
-; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xb
-; GFX1251-SDAG-NEXT: v_pk_add_f64 v[24:27], v[24:27], v[66:69]
+; GFX1251-SDAG-NEXT: v_pk_add_f64 v[36:39], v[36:39], v[66:69]
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s64 :: v_dual_mov_b32 v67, s65
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s66 :: v_dual_mov_b32 v69, s67
-; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xa
-; GFX1251-SDAG-NEXT: v_pk_add_f64 v[20:23], v[20:23], v[70:73]
+; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xc
+; GFX1251-SDAG-NEXT: v_pk_add_f64 v[32:35], v[32:35], v[70:73]
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s60 :: v_dual_mov_b32 v71, s61
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s62 :: v_dual_mov_b32 v73, s63
+; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xb
+; GFX1251-SDAG-NEXT: v_pk_add_f64 v[28:31], v[28:31], v[66:69]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s56 :: v_dual_mov_b32 v67, s57
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s58 :: v_dual_mov_b32 v69, s59
+; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xa
+; GFX1251-SDAG-NEXT: v_pk_add_f64 v[24:27], v[24:27], v[70:73]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s52 :: v_dual_mov_b32 v71, s53
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s54 :: v_dual_mov_b32 v73, s55
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x9
-; GFX1251-SDAG-NEXT: v_pk_add_f64 v[16:19], v[16:19], v[66:69]
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s12 :: v_dual_mov_b32 v67, s13
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s14 :: v_dual_mov_b32 v69, s15
+; GFX1251-SDAG-NEXT: v_pk_add_f64 v[20:23], v[20:23], v[66:69]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s48 :: v_dual_mov_b32 v67, s49
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s50 :: v_dual_mov_b32 v69, s51
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x8
-; GFX1251-SDAG-NEXT: v_pk_add_f64 v[12:15], v[12:15], v[70:73]
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s8 :: v_dual_mov_b32 v71, s9
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s10 :: v_dual_mov_b32 v73, s11
+; GFX1251-SDAG-NEXT: v_pk_add_f64 v[16:19], v[16:19], v[70:73]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s44 :: v_dual_mov_b32 v71, s45
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s46 :: v_dual_mov_b32 v73, s47
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x7
-; GFX1251-SDAG-NEXT: v_pk_add_f64 v[8:11], v[8:11], v[66:69]
+; GFX1251-SDAG-NEXT: v_pk_add_f64 v[12:15], v[12:15], v[66:69]
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s40 :: v_dual_mov_b32 v67, s41
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s42 :: v_dual_mov_b32 v69, s43
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x6
-; GFX1251-SDAG-NEXT: v_pk_add_f64 v[4:7], v[4:7], v[70:73]
+; GFX1251-SDAG-NEXT: v_pk_add_f64 v[8:11], v[8:11], v[70:73]
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s36 :: v_dual_mov_b32 v71, s37
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s38 :: v_dual_mov_b32 v73, s39
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x5
-; GFX1251-SDAG-NEXT: v_pk_add_f64 v[0:3], v[0:3], v[66:69]
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s48 :: v_dual_mov_b32 v67, s49
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s50 :: v_dual_mov_b32 v69, s51
+; GFX1251-SDAG-NEXT: v_pk_add_f64 v[4:7], v[4:7], v[66:69]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s20 :: v_dual_mov_b32 v67, s21
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s22 :: v_dual_mov_b32 v69, s23
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x4
-; GFX1251-SDAG-NEXT: v_pk_add_f64 v[44:47], v[44:47], v[70:73]
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s44 :: v_dual_mov_b32 v71, s45
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s46 :: v_dual_mov_b32 v73, s47
+; GFX1251-SDAG-NEXT: v_pk_add_f64 v[0:3], v[0:3], v[70:73]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s16 :: v_dual_mov_b32 v71, s17
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s18 :: v_dual_mov_b32 v73, s19
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x3
-; GFX1251-SDAG-NEXT: v_pk_add_f64 v[50:53], v[50:53], v[66:69]
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s16 :: v_dual_mov_b32 v67, s17
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s18 :: v_dual_mov_b32 v69, s19
+; GFX1251-SDAG-NEXT: v_pk_add_f64 v[48:51], v[48:51], v[66:69]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s12 :: v_dual_mov_b32 v67, s13
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s14 :: v_dual_mov_b32 v69, s15
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x2
; GFX1251-SDAG-NEXT: v_pk_add_f64 v[54:57], v[54:57], v[70:73]
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s20 :: v_dual_mov_b32 v71, s21
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s22 :: v_dual_mov_b32 v73, s23
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s8 :: v_dual_mov_b32 v71, s9
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s10 :: v_dual_mov_b32 v73, s11
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x1
; GFX1251-SDAG-NEXT: v_pk_add_f64 v[58:61], v[58:61], v[66:69]
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x0
; GFX1251-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2)
; GFX1251-SDAG-NEXT: v_pk_add_f64 v[62:65], v[62:65], v[70:73]
; GFX1251-SDAG-NEXT: s_clause 0xf
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[54:57], s[0:1] offset:96
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[50:53], s[0:1] offset:112
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[44:47], s[0:1] offset:64
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[0:3], s[0:1] offset:80
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[58:61], s[0:1] offset:32
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[62:65], s[0:1] offset:48
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[4:7], s[0:1]
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[8:11], s[0:1] offset:16
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[12:15], s[0:1] offset:224
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[16:19], s[0:1] offset:240
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[20:23], s[0:1] offset:192
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[24:27], s[0:1] offset:208
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[28:31], s[0:1] offset:160
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[32:35], s[0:1] offset:176
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[36:39], s[0:1] offset:128
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[40:43], s[0:1] offset:144
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[8:11], s[0:1] offset:96
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[12:15], s[0:1] offset:112
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[0:3], s[0:1] offset:64
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[4:7], s[0:1] offset:80
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[54:57], s[0:1] offset:32
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[48:51], s[0:1] offset:48
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[62:65], s[0:1]
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[58:61], s[0:1] offset:16
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[40:43], s[0:1] offset:224
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[44:47], s[0:1] offset:240
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[32:35], s[0:1] offset:192
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[36:39], s[0:1] offset:208
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[24:27], s[0:1] offset:160
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[28:31], s[0:1] offset:176
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[16:19], s[0:1] offset:128
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[20:23], s[0:1] offset:144
; GFX1251-SDAG-NEXT: s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
; GFX1251-SDAG-NEXT: s_endpgm
;
@@ -1113,112 +1113,112 @@ define amdgpu_kernel void @fmul_v32_vs(ptr addrspace(1) %a, <32 x double> %x) {
; GFX1251-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x24 nv
; GFX1251-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v0
; GFX1251-SDAG-NEXT: s_clause 0x3
-; GFX1251-SDAG-NEXT: s_load_b512 s[68:83], s[4:5], 0x1a4 nv
-; GFX1251-SDAG-NEXT: s_load_b512 s[52:67], s[4:5], 0x1e4 nv
-; GFX1251-SDAG-NEXT: s_load_b512 s[8:23], s[4:5], 0x124 nv
+; GFX1251-SDAG-NEXT: s_load_b512 s[68:83], s[4:5], 0x1e4 nv
+; GFX1251-SDAG-NEXT: s_load_b512 s[52:67], s[4:5], 0x1a4 nv
; GFX1251-SDAG-NEXT: s_load_b512 s[36:51], s[4:5], 0x164 nv
-; GFX1251-SDAG-NEXT: v_lshlrev_b32_e32 v48, 8, v0
+; GFX1251-SDAG-NEXT: s_load_b512 s[8:23], s[4:5], 0x124 nv
+; GFX1251-SDAG-NEXT: v_lshlrev_b32_e32 v52, 8, v0
; GFX1251-SDAG-NEXT: s_wait_kmcnt 0x0
; GFX1251-SDAG-NEXT: s_clause 0xf
-; GFX1251-SDAG-NEXT: global_load_b128 v[40:43], v48, s[0:1] offset:144
-; GFX1251-SDAG-NEXT: global_load_b128 v[36:39], v48, s[0:1] offset:128
-; GFX1251-SDAG-NEXT: global_load_b128 v[32:35], v48, s[0:1] offset:176
-; GFX1251-SDAG-NEXT: global_load_b128 v[28:31], v48, s[0:1] offset:160
-; GFX1251-SDAG-NEXT: global_load_b128 v[24:27], v48, s[0:1] offset:208
-; GFX1251-SDAG-NEXT: global_load_b128 v[20:23], v48, s[0:1] offset:192
-; GFX1251-SDAG-NEXT: global_load_b128 v[16:19], v48, s[0:1] offset:240
-; GFX1251-SDAG-NEXT: global_load_b128 v[12:15], v48, s[0:1] offset:224
-; GFX1251-SDAG-NEXT: global_load_b128 v[8:11], v48, s[0:1] offset:16
-; GFX1251-SDAG-NEXT: global_load_b128 v[4:7], v48, s[0:1]
-; GFX1251-SDAG-NEXT: global_load_b128 v[0:3], v48, s[0:1] offset:80
-; GFX1251-SDAG-NEXT: global_load_b128 v[44:47], v48, s[0:1] offset:64
-; GFX1251-SDAG-NEXT: global_load_b128 v[50:53], v48, s[0:1] offset:112
-; GFX1251-SDAG-NEXT: global_load_b128 v[54:57], v48, s[0:1] offset:96
-; GFX1251-SDAG-NEXT: global_load_b128 v[58:61], v48, s[0:1] offset:32
-; GFX1251-SDAG-NEXT: global_load_b128 v[62:65], v48, s[0:1] offset:48
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s72 :: v_dual_mov_b32 v67, s73
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s74 :: v_dual_mov_b32 v69, s75
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s68 :: v_dual_mov_b32 v71, s69
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s70 :: v_dual_mov_b32 v73, s71
-; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xf
-; GFX1251-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_3)
-; GFX1251-SDAG-NEXT: v_pk_mul_f64 v[40:43], v[40:43], v[66:69]
+; GFX1251-SDAG-NEXT: global_load_b128 v[44:47], v52, s[0:1] offset:240
+; GFX1251-SDAG-NEXT: global_load_b128 v[40:43], v52, s[0:1] offset:224
+; GFX1251-SDAG-NEXT: global_load_b128 v[36:39], v52, s[0:1] offset:208
+; GFX1251-SDAG-NEXT: global_load_b128 v[32:35], v52, s[0:1] offset:192
+; GFX1251-SDAG-NEXT: global_load_b128 v[28:31], v52, s[0:1] offset:176
+; GFX1251-SDAG-NEXT: global_load_b128 v[24:27], v52, s[0:1] offset:160
+; GFX1251-SDAG-NEXT: global_load_b128 v[20:23], v52, s[0:1] offset:144
+; GFX1251-SDAG-NEXT: global_load_b128 v[16:19], v52, s[0:1] offset:128
+; GFX1251-SDAG-NEXT: global_load_b128 v[12:15], v52, s[0:1] offset:112
+; GFX1251-SDAG-NEXT: global_load_b128 v[8:11], v52, s[0:1] offset:96
+; GFX1251-SDAG-NEXT: global_load_b128 v[4:7], v52, s[0:1] offset:80
+; GFX1251-SDAG-NEXT: global_load_b128 v[0:3], v52, s[0:1] offset:64
+; GFX1251-SDAG-NEXT: global_load_b128 v[48:51], v52, s[0:1] offset:48
+; GFX1251-SDAG-NEXT: global_load_b128 v[54:57], v52, s[0:1] offset:32
+; GFX1251-SDAG-NEXT: global_load_b128 v[58:61], v52, s[0:1] offset:16
+; GFX1251-SDAG-NEXT: global_load_b128 v[62:65], v52, s[0:1]
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s80 :: v_dual_mov_b32 v67, s81
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s82 :: v_dual_mov_b32 v69, s83
-; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xe
-; GFX1251-SDAG-NEXT: v_pk_mul_f64 v[36:39], v[36:39], v[70:73]
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s76 :: v_dual_mov_b32 v71, s77
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s78 :: v_dual_mov_b32 v73, s79
+; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xf
+; GFX1251-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX1251-SDAG-NEXT: v_pk_mul_f64 v[44:47], v[44:47], v[66:69]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s72 :: v_dual_mov_b32 v67, s73
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s74 :: v_dual_mov_b32 v69, s75
+; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xe
+; GFX1251-SDAG-NEXT: v_pk_mul_f64 v[40:43], v[40:43], v[70:73]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s68 :: v_dual_mov_b32 v71, s69
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s70 :: v_dual_mov_b32 v73, s71
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xd
-; GFX1251-SDAG-NEXT: v_pk_mul_f64 v[32:35], v[32:35], v[66:69]
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s56 :: v_dual_mov_b32 v67, s57
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s58 :: v_dual_mov_b32 v69, s59
-; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xc
-; GFX1251-SDAG-NEXT: v_pk_mul_f64 v[28:31], v[28:31], v[70:73]
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s52 :: v_dual_mov_b32 v71, s53
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s54 :: v_dual_mov_b32 v73, s55
-; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xb
-; GFX1251-SDAG-NEXT: v_pk_mul_f64 v[24:27], v[24:27], v[66:69]
+; GFX1251-SDAG-NEXT: v_pk_mul_f64 v[36:39], v[36:39], v[66:69]
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s64 :: v_dual_mov_b32 v67, s65
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s66 :: v_dual_mov_b32 v69, s67
-; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xa
-; GFX1251-SDAG-NEXT: v_pk_mul_f64 v[20:23], v[20:23], v[70:73]
+; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xc
+; GFX1251-SDAG-NEXT: v_pk_mul_f64 v[32:35], v[32:35], v[70:73]
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s60 :: v_dual_mov_b32 v71, s61
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s62 :: v_dual_mov_b32 v73, s63
+; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xb
+; GFX1251-SDAG-NEXT: v_pk_mul_f64 v[28:31], v[28:31], v[66:69]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s56 :: v_dual_mov_b32 v67, s57
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s58 :: v_dual_mov_b32 v69, s59
+; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xa
+; GFX1251-SDAG-NEXT: v_pk_mul_f64 v[24:27], v[24:27], v[70:73]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s52 :: v_dual_mov_b32 v71, s53
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s54 :: v_dual_mov_b32 v73, s55
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x9
-; GFX1251-SDAG-NEXT: v_pk_mul_f64 v[16:19], v[16:19], v[66:69]
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s12 :: v_dual_mov_b32 v67, s13
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s14 :: v_dual_mov_b32 v69, s15
+; GFX1251-SDAG-NEXT: v_pk_mul_f64 v[20:23], v[20:23], v[66:69]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s48 :: v_dual_mov_b32 v67, s49
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s50 :: v_dual_mov_b32 v69, s51
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x8
-; GFX1251-SDAG-NEXT: v_pk_mul_f64 v[12:15], v[12:15], v[70:73]
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s8 :: v_dual_mov_b32 v71, s9
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s10 :: v_dual_mov_b32 v73, s11
+; GFX1251-SDAG-NEXT: v_pk_mul_f64 v[16:19], v[16:19], v[70:73]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s44 :: v_dual_mov_b32 v71, s45
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s46 :: v_dual_mov_b32 v73, s47
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x7
-; GFX1251-SDAG-NEXT: v_pk_mul_f64 v[8:11], v[8:11], v[66:69]
+; GFX1251-SDAG-NEXT: v_pk_mul_f64 v[12:15], v[12:15], v[66:69]
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s40 :: v_dual_mov_b32 v67, s41
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s42 :: v_dual_mov_b32 v69, s43
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x6
-; GFX1251-SDAG-NEXT: v_pk_mul_f64 v[4:7], v[4:7], v[70:73]
+; GFX1251-SDAG-NEXT: v_pk_mul_f64 v[8:11], v[8:11], v[70:73]
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s36 :: v_dual_mov_b32 v71, s37
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s38 :: v_dual_mov_b32 v73, s39
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x5
-; GFX1251-SDAG-NEXT: v_pk_mul_f64 v[0:3], v[0:3], v[66:69]
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s48 :: v_dual_mov_b32 v67, s49
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s50 :: v_dual_mov_b32 v69, s51
+; GFX1251-SDAG-NEXT: v_pk_mul_f64 v[4:7], v[4:7], v[66:69]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s20 :: v_dual_mov_b32 v67, s21
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s22 :: v_dual_mov_b32 v69, s23
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x4
-; GFX1251-SDAG-NEXT: v_pk_mul_f64 v[44:47], v[44:47], v[70:73]
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s44 :: v_dual_mov_b32 v71, s45
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s46 :: v_dual_mov_b32 v73, s47
+; GFX1251-SDAG-NEXT: v_pk_mul_f64 v[0:3], v[0:3], v[70:73]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s16 :: v_dual_mov_b32 v71, s17
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s18 :: v_dual_mov_b32 v73, s19
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x3
-; GFX1251-SDAG-NEXT: v_pk_mul_f64 v[50:53], v[50:53], v[66:69]
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s16 :: v_dual_mov_b32 v67, s17
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s18 :: v_dual_mov_b32 v69, s19
+; GFX1251-SDAG-NEXT: v_pk_mul_f64 v[48:51], v[48:51], v[66:69]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s12 :: v_dual_mov_b32 v67, s13
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s14 :: v_dual_mov_b32 v69, s15
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x2
; GFX1251-SDAG-NEXT: v_pk_mul_f64 v[54:57], v[54:57], v[70:73]
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s20 :: v_dual_mov_b32 v71, s21
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s22 :: v_dual_mov_b32 v73, s23
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s8 :: v_dual_mov_b32 v71, s9
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s10 :: v_dual_mov_b32 v73, s11
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x1
; GFX1251-SDAG-NEXT: v_pk_mul_f64 v[58:61], v[58:61], v[66:69]
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x0
; GFX1251-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2)
; GFX1251-SDAG-NEXT: v_pk_mul_f64 v[62:65], v[62:65], v[70:73]
; GFX1251-SDAG-NEXT: s_clause 0xf
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[54:57], s[0:1] offset:96
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[50:53], s[0:1] offset:112
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[44:47], s[0:1] offset:64
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[0:3], s[0:1] offset:80
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[58:61], s[0:1] offset:32
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[62:65], s[0:1] offset:48
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[4:7], s[0:1]
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[8:11], s[0:1] offset:16
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[12:15], s[0:1] offset:224
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[16:19], s[0:1] offset:240
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[20:23], s[0:1] offset:192
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[24:27], s[0:1] offset:208
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[28:31], s[0:1] offset:160
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[32:35], s[0:1] offset:176
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[36:39], s[0:1] offset:128
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[40:43], s[0:1] offset:144
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[8:11], s[0:1] offset:96
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[12:15], s[0:1] offset:112
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[0:3], s[0:1] offset:64
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[4:7], s[0:1] offset:80
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[54:57], s[0:1] offset:32
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[48:51], s[0:1] offset:48
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[62:65], s[0:1]
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[58:61], s[0:1] offset:16
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[40:43], s[0:1] offset:224
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[44:47], s[0:1] offset:240
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[32:35], s[0:1] offset:192
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[36:39], s[0:1] offset:208
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[24:27], s[0:1] offset:160
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[28:31], s[0:1] offset:176
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[16:19], s[0:1] offset:128
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[20:23], s[0:1] offset:144
; GFX1251-SDAG-NEXT: s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
; GFX1251-SDAG-NEXT: s_endpgm
;
@@ -1675,112 +1675,113 @@ define amdgpu_kernel void @fma_v32_vs(ptr addrspace(1) %a, <32 x double> %x) {
; GFX1251-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x24 nv
; GFX1251-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v0
; GFX1251-SDAG-NEXT: s_clause 0x2
-; GFX1251-SDAG-NEXT: s_load_b512 s[16:31], s[4:5], 0x1a4 nv
-; GFX1251-SDAG-NEXT: s_load_b512 s[52:67], s[4:5], 0x1e4 nv
+; GFX1251-SDAG-NEXT: s_load_b512 s[8:23], s[4:5], 0x1e4 nv
+; GFX1251-SDAG-NEXT: s_load_b512 s[52:67], s[4:5], 0x1a4 nv
; GFX1251-SDAG-NEXT: s_load_b512 s[36:51], s[4:5], 0x164 nv
-; GFX1251-SDAG-NEXT: v_lshlrev_b32_e32 v44, 8, v0
+; GFX1251-SDAG-NEXT: v_lshlrev_b32_e32 v48, 8, v0
; GFX1251-SDAG-NEXT: s_wait_kmcnt 0x0
; GFX1251-SDAG-NEXT: s_clause 0xf
-; GFX1251-SDAG-NEXT: global_load_b128 v[40:43], v44, s[0:1] offset:144
-; GFX1251-SDAG-NEXT: global_load_b128 v[36:39], v44, s[0:1] offset:128
-; GFX1251-SDAG-NEXT: global_load_b128 v[32:35], v44, s[0:1] offset:176
-; GFX1251-SDAG-NEXT: global_load_b128 v[28:31], v44, s[0:1] offset:160
-; GFX1251-SDAG-NEXT: global_load_b128 v[24:27], v44, s[0:1] offset:208
-; GFX1251-SDAG-NEXT: global_load_b128 v[20:23], v44, s[0:1] offset:192
-; GFX1251-SDAG-NEXT: global_load_b128 v[16:19], v44, s[0:1] offset:240
-; GFX1251-SDAG-NEXT: global_load_b128 v[12:15], v44, s[0:1] offset:224
-; GFX1251-SDAG-NEXT: global_load_b128 v[8:11], v44, s[0:1] offset:16
-; GFX1251-SDAG-NEXT: global_load_b128 v[0:3], v44, s[0:1]
-; GFX1251-SDAG-NEXT: global_load_b128 v[4:7], v44, s[0:1] offset:80
-; GFX1251-SDAG-NEXT: global_load_b128 v[46:49], v44, s[0:1] offset:64
-; GFX1251-SDAG-NEXT: global_load_b128 v[50:53], v44, s[0:1] offset:112
-; GFX1251-SDAG-NEXT: global_load_b128 v[54:57], v44, s[0:1] offset:96
-; GFX1251-SDAG-NEXT: global_load_b128 v[58:61], v44, s[0:1] offset:32
-; GFX1251-SDAG-NEXT: global_load_b128 v[62:65], v44, s[0:1] offset:48
+; GFX1251-SDAG-NEXT: global_load_b128 v[44:47], v48, s[0:1] offset:240
+; GFX1251-SDAG-NEXT: global_load_b128 v[40:43], v48, s[0:1] offset:224
+; GFX1251-SDAG-NEXT: global_load_b128 v[36:39], v48, s[0:1] offset:208
+; GFX1251-SDAG-NEXT: global_load_b128 v[32:35], v48, s[0:1] offset:192
+; GFX1251-SDAG-NEXT: global_load_b128 v[28:31], v48, s[0:1] offset:176
+; GFX1251-SDAG-NEXT: global_load_b128 v[24:27], v48, s[0:1] offset:160
+; GFX1251-SDAG-NEXT: global_load_b128 v[20:23], v48, s[0:1] offset:144
+; GFX1251-SDAG-NEXT: global_load_b128 v[16:19], v48, s[0:1] offset:128
+; GFX1251-SDAG-NEXT: global_load_b128 v[12:15], v48, s[0:1] offset:112
+; GFX1251-SDAG-NEXT: global_load_b128 v[8:11], v48, s[0:1] offset:96
+; GFX1251-SDAG-NEXT: global_load_b128 v[4:7], v48, s[0:1] offset:80
+; GFX1251-SDAG-NEXT: global_load_b128 v[0:3], v48, s[0:1] offset:64
+; GFX1251-SDAG-NEXT: global_load_b128 v[50:53], v48, s[0:1] offset:48
+; GFX1251-SDAG-NEXT: global_load_b128 v[54:57], v48, s[0:1] offset:32
+; GFX1251-SDAG-NEXT: global_load_b128 v[58:61], v48, s[0:1] offset:16
+; GFX1251-SDAG-NEXT: global_load_b128 v[62:65], v48, s[0:1]
; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[68:69], s[22:23]
; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[66:67], s[20:21]
; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[72:73], s[18:19]
; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[70:71], s[16:17]
-; GFX1251-SDAG-NEXT: s_load_b512 s[8:23], s[4:5], 0x124 nv
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xf
-; GFX1251-SDAG-NEXT: v_pk_fma_f64 v[40:43], v[40:43], v[66:69], v[66:69]
-; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[68:69], s[30:31]
-; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[66:67], s[28:29]
+; GFX1251-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX1251-SDAG-NEXT: v_pk_fma_f64 v[44:47], v[44:47], v[66:69], v[66:69]
+; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[68:69], s[14:15]
+; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[66:67], s[12:13]
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xe
-; GFX1251-SDAG-NEXT: v_pk_fma_f64 v[36:39], v[36:39], v[70:73], v[70:73]
-; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[72:73], s[26:27]
-; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[70:71], s[24:25]
+; GFX1251-SDAG-NEXT: v_pk_fma_f64 v[40:43], v[40:43], v[70:73], v[70:73]
+; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[72:73], s[10:11]
+; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[70:71], s[8:9]
+; GFX1251-SDAG-NEXT: s_load_b512 s[8:23], s[4:5], 0x124 nv
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xd
-; GFX1251-SDAG-NEXT: v_pk_fma_f64 v[32:35], v[32:35], v[66:69], v[66:69]
-; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[68:69], s[58:59]
-; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[66:67], s[56:57]
-; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xc
-; GFX1251-SDAG-NEXT: v_pk_fma_f64 v[28:31], v[28:31], v[70:73], v[70:73]
-; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[72:73], s[54:55]
-; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[70:71], s[52:53]
-; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xb
-; GFX1251-SDAG-NEXT: v_pk_fma_f64 v[24:27], v[24:27], v[66:69], v[66:69]
+; GFX1251-SDAG-NEXT: v_pk_fma_f64 v[36:39], v[36:39], v[66:69], v[66:69]
; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[68:69], s[66:67]
; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[66:67], s[64:65]
-; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xa
-; GFX1251-SDAG-NEXT: v_pk_fma_f64 v[20:23], v[20:23], v[70:73], v[70:73]
+; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xc
+; GFX1251-SDAG-NEXT: v_pk_fma_f64 v[32:35], v[32:35], v[70:73], v[70:73]
; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[72:73], s[62:63]
; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[70:71], s[60:61]
+; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xb
+; GFX1251-SDAG-NEXT: v_pk_fma_f64 v[28:31], v[28:31], v[66:69], v[66:69]
+; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[68:69], s[58:59]
+; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[66:67], s[56:57]
+; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xa
+; GFX1251-SDAG-NEXT: v_pk_fma_f64 v[24:27], v[24:27], v[70:73], v[70:73]
+; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[72:73], s[54:55]
+; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[70:71], s[52:53]
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x9
-; GFX1251-SDAG-NEXT: v_pk_fma_f64 v[16:19], v[16:19], v[66:69], v[66:69]
-; GFX1251-SDAG-NEXT: s_wait_kmcnt 0x0
-; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[68:69], s[14:15]
-; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[66:67], s[12:13]
+; GFX1251-SDAG-NEXT: v_pk_fma_f64 v[20:23], v[20:23], v[66:69], v[66:69]
+; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[68:69], s[50:51]
+; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[66:67], s[48:49]
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x8
-; GFX1251-SDAG-NEXT: v_pk_fma_f64 v[12:15], v[12:15], v[70:73], v[70:73]
-; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[72:73], s[10:11]
-; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[70:71], s[8:9]
+; GFX1251-SDAG-NEXT: v_pk_fma_f64 v[16:19], v[16:19], v[70:73], v[70:73]
+; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[72:73], s[46:47]
+; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[70:71], s[44:45]
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x7
-; GFX1251-SDAG-NEXT: v_pk_fma_f64 v[8:11], v[8:11], v[66:69], v[66:69]
+; GFX1251-SDAG-NEXT: v_pk_fma_f64 v[12:15], v[12:15], v[66:69], v[66:69]
; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[68:69], s[42:43]
; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[66:67], s[40:41]
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x6
-; GFX1251-SDAG-NEXT: v_pk_fma_f64 v[0:3], v[0:3], v[70:73], v[70:73]
+; GFX1251-SDAG-NEXT: v_pk_fma_f64 v[8:11], v[8:11], v[70:73], v[70:73]
; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[72:73], s[38:39]
; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[70:71], s[36:37]
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x5
; GFX1251-SDAG-NEXT: v_pk_fma_f64 v[4:7], v[4:7], v[66:69], v[66:69]
-; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[68:69], s[50:51]
-; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[66:67], s[48:49]
+; GFX1251-SDAG-NEXT: s_wait_kmcnt 0x0
+; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[68:69], s[22:23]
+; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[66:67], s[20:21]
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x4
-; GFX1251-SDAG-NEXT: v_pk_fma_f64 v[46:49], v[46:49], v[70:73], v[70:73]
-; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[72:73], s[46:47]
-; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[70:71], s[44:45]
+; GFX1251-SDAG-NEXT: v_pk_fma_f64 v[0:3], v[0:3], v[70:73], v[70:73]
+; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[72:73], s[18:19]
+; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[70:71], s[16:17]
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x3
; GFX1251-SDAG-NEXT: v_pk_fma_f64 v[50:53], v[50:53], v[66:69], v[66:69]
-; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[68:69], s[18:19]
-; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[66:67], s[16:17]
+; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[68:69], s[14:15]
+; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[66:67], s[12:13]
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x2
; GFX1251-SDAG-NEXT: v_pk_fma_f64 v[54:57], v[54:57], v[70:73], v[70:73]
-; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[72:73], s[22:23]
-; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[70:71], s[20:21]
+; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[72:73], s[10:11]
+; GFX1251-SDAG-NEXT: v_mov_b64_e32 v[70:71], s[8:9]
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x1
; GFX1251-SDAG-NEXT: v_pk_fma_f64 v[58:61], v[58:61], v[66:69], v[66:69]
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x0
; GFX1251-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2)
; GFX1251-SDAG-NEXT: v_pk_fma_f64 v[62:65], v[62:65], v[70:73], v[70:73]
; GFX1251-SDAG-NEXT: s_clause 0xf
-; GFX1251-SDAG-NEXT: global_store_b128 v44, v[54:57], s[0:1] offset:96
-; GFX1251-SDAG-NEXT: global_store_b128 v44, v[50:53], s[0:1] offset:112
-; GFX1251-SDAG-NEXT: global_store_b128 v44, v[46:49], s[0:1] offset:64
-; GFX1251-SDAG-NEXT: global_store_b128 v44, v[4:7], s[0:1] offset:80
-; GFX1251-SDAG-NEXT: global_store_b128 v44, v[58:61], s[0:1] offset:32
-; GFX1251-SDAG-NEXT: global_store_b128 v44, v[62:65], s[0:1] offset:48
-; GFX1251-SDAG-NEXT: global_store_b128 v44, v[0:3], s[0:1]
-; GFX1251-SDAG-NEXT: global_store_b128 v44, v[8:11], s[0:1] offset:16
-; GFX1251-SDAG-NEXT: global_store_b128 v44, v[12:15], s[0:1] offset:224
-; GFX1251-SDAG-NEXT: global_store_b128 v44, v[16:19], s[0:1] offset:240
-; GFX1251-SDAG-NEXT: global_store_b128 v44, v[20:23], s[0:1] offset:192
-; GFX1251-SDAG-NEXT: global_store_b128 v44, v[24:27], s[0:1] offset:208
-; GFX1251-SDAG-NEXT: global_store_b128 v44, v[28:31], s[0:1] offset:160
-; GFX1251-SDAG-NEXT: global_store_b128 v44, v[32:35], s[0:1] offset:176
-; GFX1251-SDAG-NEXT: global_store_b128 v44, v[36:39], s[0:1] offset:128
-; GFX1251-SDAG-NEXT: global_store_b128 v44, v[40:43], s[0:1] offset:144
+; GFX1251-SDAG-NEXT: global_store_b128 v48, v[8:11], s[0:1] offset:96
+; GFX1251-SDAG-NEXT: global_store_b128 v48, v[12:15], s[0:1] offset:112
+; GFX1251-SDAG-NEXT: global_store_b128 v48, v[0:3], s[0:1] offset:64
+; GFX1251-SDAG-NEXT: global_store_b128 v48, v[4:7], s[0:1] offset:80
+; GFX1251-SDAG-NEXT: global_store_b128 v48, v[54:57], s[0:1] offset:32
+; GFX1251-SDAG-NEXT: global_store_b128 v48, v[50:53], s[0:1] offset:48
+; GFX1251-SDAG-NEXT: global_store_b128 v48, v[62:65], s[0:1]
+; GFX1251-SDAG-NEXT: global_store_b128 v48, v[58:61], s[0:1] offset:16
+; GFX1251-SDAG-NEXT: global_store_b128 v48, v[40:43], s[0:1] offset:224
+; GFX1251-SDAG-NEXT: global_store_b128 v48, v[44:47], s[0:1] offset:240
+; GFX1251-SDAG-NEXT: global_store_b128 v48, v[32:35], s[0:1] offset:192
+; GFX1251-SDAG-NEXT: global_store_b128 v48, v[36:39], s[0:1] offset:208
+; GFX1251-SDAG-NEXT: global_store_b128 v48, v[24:27], s[0:1] offset:160
+; GFX1251-SDAG-NEXT: global_store_b128 v48, v[28:31], s[0:1] offset:176
+; GFX1251-SDAG-NEXT: global_store_b128 v48, v[16:19], s[0:1] offset:128
+; GFX1251-SDAG-NEXT: global_store_b128 v48, v[20:23], s[0:1] offset:144
; GFX1251-SDAG-NEXT: s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
; GFX1251-SDAG-NEXT: s_endpgm
;
@@ -2335,71 +2336,70 @@ define amdgpu_kernel void @fneg_v32f64_vec(ptr addrspace(1) %a) {
; GFX1251-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x24 nv
; GFX1251-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v0
; GFX1251-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)
-; GFX1251-SDAG-NEXT: v_lshlrev_b32_e32 v40, 8, v0
+; GFX1251-SDAG-NEXT: v_lshlrev_b32_e32 v32, 8, v0
; GFX1251-SDAG-NEXT: s_wait_kmcnt 0x0
; GFX1251-SDAG-NEXT: s_clause 0xd
-; GFX1251-SDAG-NEXT: global_load_b128 v[36:39], v40, s[0:1] offset:96
-; GFX1251-SDAG-NEXT: global_load_b128 v[32:35], v40, s[0:1] offset:112
-; GFX1251-SDAG-NEXT: global_load_b128 v[0:3], v40, s[0:1] offset:224
-; GFX1251-SDAG-NEXT: global_load_b128 v[4:7], v40, s[0:1] offset:240
-; GFX1251-SDAG-NEXT: global_load_b128 v[8:11], v40, s[0:1] offset:128
-; GFX1251-SDAG-NEXT: global_load_b128 v[20:23], v40, s[0:1] offset:144
-; GFX1251-SDAG-NEXT: global_load_b128 v[12:15], v40, s[0:1] offset:160
-; GFX1251-SDAG-NEXT: global_load_b128 v[24:27], v40, s[0:1] offset:176
-; GFX1251-SDAG-NEXT: global_load_b128 v[16:19], v40, s[0:1] offset:192
-; GFX1251-SDAG-NEXT: global_load_b128 v[28:31], v40, s[0:1] offset:208
-; GFX1251-SDAG-NEXT: global_load_b128 v[42:45], v40, s[0:1] offset:64
-; GFX1251-SDAG-NEXT: global_load_b128 v[46:49], v40, s[0:1] offset:80
-; GFX1251-SDAG-NEXT: global_load_b128 v[50:53], v40, s[0:1] offset:32
-; GFX1251-SDAG-NEXT: global_load_b128 v[54:57], v40, s[0:1] offset:48
+; GFX1251-SDAG-NEXT: global_load_b128 v[34:37], v32, s[0:1] offset:96
+; GFX1251-SDAG-NEXT: global_load_b128 v[38:41], v32, s[0:1] offset:112
+; GFX1251-SDAG-NEXT: global_load_b128 v[0:3], v32, s[0:1] offset:128
+; GFX1251-SDAG-NEXT: global_load_b128 v[4:7], v32, s[0:1] offset:144
+; GFX1251-SDAG-NEXT: global_load_b128 v[8:11], v32, s[0:1] offset:224
+; GFX1251-SDAG-NEXT: global_load_b128 v[20:23], v32, s[0:1] offset:240
+; GFX1251-SDAG-NEXT: global_load_b128 v[12:15], v32, s[0:1] offset:192
+; GFX1251-SDAG-NEXT: global_load_b128 v[24:27], v32, s[0:1] offset:208
+; GFX1251-SDAG-NEXT: global_load_b128 v[16:19], v32, s[0:1] offset:160
+; GFX1251-SDAG-NEXT: global_load_b128 v[28:31], v32, s[0:1] offset:176
+; GFX1251-SDAG-NEXT: global_load_b128 v[42:45], v32, s[0:1] offset:32
+; GFX1251-SDAG-NEXT: global_load_b128 v[46:49], v32, s[0:1] offset:48
+; GFX1251-SDAG-NEXT: global_load_b128 v[50:53], v32, s[0:1] offset:64
+; GFX1251-SDAG-NEXT: global_load_b128 v[54:57], v32, s[0:1] offset:80
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xd
-; GFX1251-SDAG-NEXT: v_pk_add_f64 v[36:39], v[36:39], 0 neg_lo:[1,1] neg_hi:[1,1]
+; GFX1251-SDAG-NEXT: v_pk_add_f64 v[34:37], v[34:37], 0 neg_lo:[1,1] neg_hi:[1,1]
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xc
-; GFX1251-SDAG-NEXT: v_pk_add_f64 v[32:35], v[32:35], 0 neg_lo:[1,1] neg_hi:[1,1]
+; GFX1251-SDAG-NEXT: v_pk_add_f64 v[38:41], v[38:41], 0 neg_lo:[1,1] neg_hi:[1,1]
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xb
; GFX1251-SDAG-NEXT: v_pk_add_f64 v[0:3], v[0:3], 0 neg_lo:[1,1] neg_hi:[1,1]
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xa
; GFX1251-SDAG-NEXT: v_pk_add_f64 v[4:7], v[4:7], 0 neg_lo:[1,1] neg_hi:[1,1]
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x9
-; GFX1251-SDAG-NEXT: v_pk_add_f64 v[8:11], v[8:11], 0 neg_lo:[1,1] neg_hi:[1,1]
+; GFX1251-SDAG-NEXT: v_pk_add_f64 v[58:61], v[8:11], 0 neg_lo:[1,1] neg_hi:[1,1]
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x8
; GFX1251-SDAG-NEXT: v_pk_add_f64 v[20:23], v[20:23], 0 neg_lo:[1,1] neg_hi:[1,1]
; GFX1251-SDAG-NEXT: s_clause 0x3
-; GFX1251-SDAG-NEXT: global_store_b128 v40, v[36:39], s[0:1] offset:96
-; GFX1251-SDAG-NEXT: global_store_b128 v40, v[32:35], s[0:1] offset:112
-; GFX1251-SDAG-NEXT: global_load_b128 v[32:35], v40, s[0:1]
-; GFX1251-SDAG-NEXT: global_load_b128 v[36:39], v40, s[0:1] offset:16
+; GFX1251-SDAG-NEXT: global_store_b128 v32, v[34:37], s[0:1] offset:96
+; GFX1251-SDAG-NEXT: global_store_b128 v32, v[38:41], s[0:1] offset:112
+; GFX1251-SDAG-NEXT: global_load_b128 v[34:37], v32, s[0:1]
+; GFX1251-SDAG-NEXT: global_load_b128 v[38:41], v32, s[0:1] offset:16
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x5
; GFX1251-SDAG-NEXT: v_pk_add_f64 v[42:45], v[42:45], 0 neg_lo:[1,1] neg_hi:[1,1]
-; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x4
-; GFX1251-SDAG-NEXT: v_pk_add_f64 v[46:49], v[46:49], 0 neg_lo:[1,1] neg_hi:[1,1]
+; GFX1251-SDAG-NEXT: v_pk_add_f64 v[8:11], v[28:31], 0 neg_lo:[1,1] neg_hi:[1,1]
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x3
-; GFX1251-SDAG-NEXT: v_pk_add_f64 v[50:53], v[50:53], 0 neg_lo:[1,1] neg_hi:[1,1]
+; GFX1251-SDAG-NEXT: v_pk_add_f64 v[28:31], v[50:53], 0 neg_lo:[1,1] neg_hi:[1,1]
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x2
-; GFX1251-SDAG-NEXT: v_pk_add_f64 v[54:57], v[54:57], 0 neg_lo:[1,1] neg_hi:[1,1]
+; GFX1251-SDAG-NEXT: v_pk_add_f64 v[50:53], v[54:57], 0 neg_lo:[1,1] neg_hi:[1,1]
+; GFX1251-SDAG-NEXT: v_pk_add_f64 v[46:49], v[46:49], 0 neg_lo:[1,1] neg_hi:[1,1]
; GFX1251-SDAG-NEXT: v_pk_add_f64 v[24:27], v[24:27], 0 neg_lo:[1,1] neg_hi:[1,1]
; GFX1251-SDAG-NEXT: v_pk_add_f64 v[12:15], v[12:15], 0 neg_lo:[1,1] neg_hi:[1,1]
-; GFX1251-SDAG-NEXT: v_pk_add_f64 v[28:31], v[28:31], 0 neg_lo:[1,1] neg_hi:[1,1]
; GFX1251-SDAG-NEXT: v_pk_add_f64 v[16:19], v[16:19], 0 neg_lo:[1,1] neg_hi:[1,1]
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x1
-; GFX1251-SDAG-NEXT: v_pk_add_f64 v[32:35], v[32:35], 0 neg_lo:[1,1] neg_hi:[1,1]
+; GFX1251-SDAG-NEXT: v_pk_add_f64 v[34:37], v[34:37], 0 neg_lo:[1,1] neg_hi:[1,1]
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x0
-; GFX1251-SDAG-NEXT: v_pk_add_f64 v[36:39], v[36:39], 0 neg_lo:[1,1] neg_hi:[1,1]
+; GFX1251-SDAG-NEXT: v_pk_add_f64 v[38:41], v[38:41], 0 neg_lo:[1,1] neg_hi:[1,1]
; GFX1251-SDAG-NEXT: s_clause 0xd
-; GFX1251-SDAG-NEXT: global_store_b128 v40, v[42:45], s[0:1] offset:64
-; GFX1251-SDAG-NEXT: global_store_b128 v40, v[46:49], s[0:1] offset:80
-; GFX1251-SDAG-NEXT: global_store_b128 v40, v[50:53], s[0:1] offset:32
-; GFX1251-SDAG-NEXT: global_store_b128 v40, v[54:57], s[0:1] offset:48
-; GFX1251-SDAG-NEXT: global_store_b128 v40, v[32:35], s[0:1]
-; GFX1251-SDAG-NEXT: global_store_b128 v40, v[36:39], s[0:1] offset:16
-; GFX1251-SDAG-NEXT: global_store_b128 v40, v[0:3], s[0:1] offset:224
-; GFX1251-SDAG-NEXT: global_store_b128 v40, v[4:7], s[0:1] offset:240
-; GFX1251-SDAG-NEXT: global_store_b128 v40, v[16:19], s[0:1] offset:192
-; GFX1251-SDAG-NEXT: global_store_b128 v40, v[28:31], s[0:1] offset:208
-; GFX1251-SDAG-NEXT: global_store_b128 v40, v[12:15], s[0:1] offset:160
-; GFX1251-SDAG-NEXT: global_store_b128 v40, v[24:27], s[0:1] offset:176
-; GFX1251-SDAG-NEXT: global_store_b128 v40, v[8:11], s[0:1] offset:128
-; GFX1251-SDAG-NEXT: global_store_b128 v40, v[20:23], s[0:1] offset:144
+; GFX1251-SDAG-NEXT: global_store_b128 v32, v[28:31], s[0:1] offset:64
+; GFX1251-SDAG-NEXT: global_store_b128 v32, v[50:53], s[0:1] offset:80
+; GFX1251-SDAG-NEXT: global_store_b128 v32, v[42:45], s[0:1] offset:32
+; GFX1251-SDAG-NEXT: global_store_b128 v32, v[46:49], s[0:1] offset:48
+; GFX1251-SDAG-NEXT: global_store_b128 v32, v[34:37], s[0:1]
+; GFX1251-SDAG-NEXT: global_store_b128 v32, v[38:41], s[0:1] offset:16
+; GFX1251-SDAG-NEXT: global_store_b128 v32, v[58:61], s[0:1] offset:224
+; GFX1251-SDAG-NEXT: global_store_b128 v32, v[20:23], s[0:1] offset:240
+; GFX1251-SDAG-NEXT: global_store_b128 v32, v[12:15], s[0:1] offset:192
+; GFX1251-SDAG-NEXT: global_store_b128 v32, v[24:27], s[0:1] offset:208
+; GFX1251-SDAG-NEXT: global_store_b128 v32, v[16:19], s[0:1] offset:160
+; GFX1251-SDAG-NEXT: global_store_b128 v32, v[8:11], s[0:1] offset:176
+; GFX1251-SDAG-NEXT: global_store_b128 v32, v[0:3], s[0:1] offset:128
+; GFX1251-SDAG-NEXT: global_store_b128 v32, v[4:7], s[0:1] offset:144
; GFX1251-SDAG-NEXT: s_endpgm
;
; GFX1251-GISEL-LABEL: fneg_v32f64_vec:
diff --git a/llvm/test/CodeGen/AMDGPU/packed-u64.ll b/llvm/test/CodeGen/AMDGPU/packed-u64.ll
index 00d266b78f318..a218fefc294f3 100644
--- a/llvm/test/CodeGen/AMDGPU/packed-u64.ll
+++ b/llvm/test/CodeGen/AMDGPU/packed-u64.ll
@@ -182,112 +182,112 @@ define amdgpu_kernel void @add_v32_vs(ptr addrspace(1) %a, <32 x i64> %x) {
; GFX1251-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x24 nv
; GFX1251-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v0
; GFX1251-SDAG-NEXT: s_clause 0x3
-; GFX1251-SDAG-NEXT: s_load_b512 s[68:83], s[4:5], 0x1a4 nv
-; GFX1251-SDAG-NEXT: s_load_b512 s[52:67], s[4:5], 0x1e4 nv
-; GFX1251-SDAG-NEXT: s_load_b512 s[8:23], s[4:5], 0x124 nv
+; GFX1251-SDAG-NEXT: s_load_b512 s[68:83], s[4:5], 0x1e4 nv
+; GFX1251-SDAG-NEXT: s_load_b512 s[52:67], s[4:5], 0x1a4 nv
; GFX1251-SDAG-NEXT: s_load_b512 s[36:51], s[4:5], 0x164 nv
-; GFX1251-SDAG-NEXT: v_lshlrev_b32_e32 v48, 8, v0
+; GFX1251-SDAG-NEXT: s_load_b512 s[8:23], s[4:5], 0x124 nv
+; GFX1251-SDAG-NEXT: v_lshlrev_b32_e32 v52, 8, v0
; GFX1251-SDAG-NEXT: s_wait_kmcnt 0x0
; GFX1251-SDAG-NEXT: s_clause 0xf
-; GFX1251-SDAG-NEXT: global_load_b128 v[40:43], v48, s[0:1] offset:144
-; GFX1251-SDAG-NEXT: global_load_b128 v[36:39], v48, s[0:1] offset:128
-; GFX1251-SDAG-NEXT: global_load_b128 v[32:35], v48, s[0:1] offset:176
-; GFX1251-SDAG-NEXT: global_load_b128 v[28:31], v48, s[0:1] offset:160
-; GFX1251-SDAG-NEXT: global_load_b128 v[24:27], v48, s[0:1] offset:208
-; GFX1251-SDAG-NEXT: global_load_b128 v[20:23], v48, s[0:1] offset:192
-; GFX1251-SDAG-NEXT: global_load_b128 v[16:19], v48, s[0:1] offset:240
-; GFX1251-SDAG-NEXT: global_load_b128 v[12:15], v48, s[0:1] offset:224
-; GFX1251-SDAG-NEXT: global_load_b128 v[8:11], v48, s[0:1] offset:16
-; GFX1251-SDAG-NEXT: global_load_b128 v[4:7], v48, s[0:1]
-; GFX1251-SDAG-NEXT: global_load_b128 v[0:3], v48, s[0:1] offset:48
-; GFX1251-SDAG-NEXT: global_load_b128 v[44:47], v48, s[0:1] offset:64
-; GFX1251-SDAG-NEXT: global_load_b128 v[50:53], v48, s[0:1] offset:112
-; GFX1251-SDAG-NEXT: global_load_b128 v[54:57], v48, s[0:1] offset:96
-; GFX1251-SDAG-NEXT: global_load_b128 v[58:61], v48, s[0:1] offset:80
-; GFX1251-SDAG-NEXT: global_load_b128 v[62:65], v48, s[0:1] offset:32
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s72 :: v_dual_mov_b32 v67, s73
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s74 :: v_dual_mov_b32 v69, s75
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s68 :: v_dual_mov_b32 v71, s69
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s70 :: v_dual_mov_b32 v73, s71
-; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xf
-; GFX1251-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_3)
-; GFX1251-SDAG-NEXT: v_pk_add_nc_u64 v[40:43], v[40:43], v[66:69]
+; GFX1251-SDAG-NEXT: global_load_b128 v[44:47], v52, s[0:1] offset:240
+; GFX1251-SDAG-NEXT: global_load_b128 v[40:43], v52, s[0:1] offset:224
+; GFX1251-SDAG-NEXT: global_load_b128 v[36:39], v52, s[0:1] offset:208
+; GFX1251-SDAG-NEXT: global_load_b128 v[32:35], v52, s[0:1] offset:192
+; GFX1251-SDAG-NEXT: global_load_b128 v[28:31], v52, s[0:1] offset:176
+; GFX1251-SDAG-NEXT: global_load_b128 v[24:27], v52, s[0:1] offset:160
+; GFX1251-SDAG-NEXT: global_load_b128 v[20:23], v52, s[0:1] offset:144
+; GFX1251-SDAG-NEXT: global_load_b128 v[16:19], v52, s[0:1] offset:128
+; GFX1251-SDAG-NEXT: global_load_b128 v[12:15], v52, s[0:1] offset:112
+; GFX1251-SDAG-NEXT: global_load_b128 v[8:11], v52, s[0:1] offset:96
+; GFX1251-SDAG-NEXT: global_load_b128 v[4:7], v52, s[0:1] offset:80
+; GFX1251-SDAG-NEXT: global_load_b128 v[0:3], v52, s[0:1] offset:64
+; GFX1251-SDAG-NEXT: global_load_b128 v[48:51], v52, s[0:1] offset:48
+; GFX1251-SDAG-NEXT: global_load_b128 v[54:57], v52, s[0:1] offset:32
+; GFX1251-SDAG-NEXT: global_load_b128 v[58:61], v52, s[0:1] offset:16
+; GFX1251-SDAG-NEXT: global_load_b128 v[62:65], v52, s[0:1]
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s80 :: v_dual_mov_b32 v67, s81
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s82 :: v_dual_mov_b32 v69, s83
-; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xe
-; GFX1251-SDAG-NEXT: v_pk_add_nc_u64 v[36:39], v[36:39], v[70:73]
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s76 :: v_dual_mov_b32 v71, s77
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s78 :: v_dual_mov_b32 v73, s79
+; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xf
+; GFX1251-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX1251-SDAG-NEXT: v_pk_add_nc_u64 v[44:47], v[44:47], v[66:69]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s72 :: v_dual_mov_b32 v67, s73
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s74 :: v_dual_mov_b32 v69, s75
+; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xe
+; GFX1251-SDAG-NEXT: v_pk_add_nc_u64 v[40:43], v[40:43], v[70:73]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s68 :: v_dual_mov_b32 v71, s69
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s70 :: v_dual_mov_b32 v73, s71
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xd
-; GFX1251-SDAG-NEXT: v_pk_add_nc_u64 v[32:35], v[32:35], v[66:69]
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s56 :: v_dual_mov_b32 v67, s57
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s58 :: v_dual_mov_b32 v69, s59
-; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xc
-; GFX1251-SDAG-NEXT: v_pk_add_nc_u64 v[28:31], v[28:31], v[70:73]
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s52 :: v_dual_mov_b32 v71, s53
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s54 :: v_dual_mov_b32 v73, s55
-; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xb
-; GFX1251-SDAG-NEXT: v_pk_add_nc_u64 v[24:27], v[24:27], v[66:69]
+; GFX1251-SDAG-NEXT: v_pk_add_nc_u64 v[36:39], v[36:39], v[66:69]
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s64 :: v_dual_mov_b32 v67, s65
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s66 :: v_dual_mov_b32 v69, s67
-; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xa
-; GFX1251-SDAG-NEXT: v_pk_add_nc_u64 v[20:23], v[20:23], v[70:73]
+; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xc
+; GFX1251-SDAG-NEXT: v_pk_add_nc_u64 v[32:35], v[32:35], v[70:73]
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s60 :: v_dual_mov_b32 v71, s61
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s62 :: v_dual_mov_b32 v73, s63
+; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xb
+; GFX1251-SDAG-NEXT: v_pk_add_nc_u64 v[28:31], v[28:31], v[66:69]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s56 :: v_dual_mov_b32 v67, s57
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s58 :: v_dual_mov_b32 v69, s59
+; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xa
+; GFX1251-SDAG-NEXT: v_pk_add_nc_u64 v[24:27], v[24:27], v[70:73]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s52 :: v_dual_mov_b32 v71, s53
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s54 :: v_dual_mov_b32 v73, s55
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x9
-; GFX1251-SDAG-NEXT: v_pk_add_nc_u64 v[16:19], v[16:19], v[66:69]
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s12 :: v_dual_mov_b32 v67, s13
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s14 :: v_dual_mov_b32 v69, s15
+; GFX1251-SDAG-NEXT: v_pk_add_nc_u64 v[20:23], v[20:23], v[66:69]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s48 :: v_dual_mov_b32 v67, s49
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s50 :: v_dual_mov_b32 v69, s51
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x8
-; GFX1251-SDAG-NEXT: v_pk_add_nc_u64 v[12:15], v[12:15], v[70:73]
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s8 :: v_dual_mov_b32 v71, s9
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s10 :: v_dual_mov_b32 v73, s11
+; GFX1251-SDAG-NEXT: v_pk_add_nc_u64 v[16:19], v[16:19], v[70:73]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s44 :: v_dual_mov_b32 v71, s45
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s46 :: v_dual_mov_b32 v73, s47
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x7
-; GFX1251-SDAG-NEXT: v_pk_add_nc_u64 v[8:11], v[8:11], v[66:69]
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s20 :: v_dual_mov_b32 v67, s21
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s22 :: v_dual_mov_b32 v69, s23
+; GFX1251-SDAG-NEXT: v_pk_add_nc_u64 v[12:15], v[12:15], v[66:69]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s40 :: v_dual_mov_b32 v67, s41
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s42 :: v_dual_mov_b32 v69, s43
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x6
-; GFX1251-SDAG-NEXT: v_pk_add_nc_u64 v[4:7], v[4:7], v[70:73]
+; GFX1251-SDAG-NEXT: v_pk_add_nc_u64 v[8:11], v[8:11], v[70:73]
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s36 :: v_dual_mov_b32 v71, s37
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s38 :: v_dual_mov_b32 v73, s39
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x5
-; GFX1251-SDAG-NEXT: v_pk_add_nc_u64 v[0:3], v[0:3], v[66:69]
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s48 :: v_dual_mov_b32 v67, s49
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s50 :: v_dual_mov_b32 v69, s51
+; GFX1251-SDAG-NEXT: v_pk_add_nc_u64 v[4:7], v[4:7], v[66:69]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s20 :: v_dual_mov_b32 v67, s21
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s22 :: v_dual_mov_b32 v69, s23
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x4
-; GFX1251-SDAG-NEXT: v_pk_add_nc_u64 v[44:47], v[44:47], v[70:73]
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s44 :: v_dual_mov_b32 v71, s45
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s46 :: v_dual_mov_b32 v73, s47
+; GFX1251-SDAG-NEXT: v_pk_add_nc_u64 v[0:3], v[0:3], v[70:73]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s16 :: v_dual_mov_b32 v71, s17
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s18 :: v_dual_mov_b32 v73, s19
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x3
-; GFX1251-SDAG-NEXT: v_pk_add_nc_u64 v[50:53], v[50:53], v[66:69]
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s40 :: v_dual_mov_b32 v67, s41
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s42 :: v_dual_mov_b32 v69, s43
+; GFX1251-SDAG-NEXT: v_pk_add_nc_u64 v[48:51], v[48:51], v[66:69]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s12 :: v_dual_mov_b32 v67, s13
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s14 :: v_dual_mov_b32 v69, s15
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x2
; GFX1251-SDAG-NEXT: v_pk_add_nc_u64 v[54:57], v[54:57], v[70:73]
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s16 :: v_dual_mov_b32 v71, s17
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s18 :: v_dual_mov_b32 v73, s19
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s8 :: v_dual_mov_b32 v71, s9
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s10 :: v_dual_mov_b32 v73, s11
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x1
; GFX1251-SDAG-NEXT: v_pk_add_nc_u64 v[58:61], v[58:61], v[66:69]
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x0
; GFX1251-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2)
; GFX1251-SDAG-NEXT: v_pk_add_nc_u64 v[62:65], v[62:65], v[70:73]
; GFX1251-SDAG-NEXT: s_clause 0xf
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[54:57], s[0:1] offset:96
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[50:53], s[0:1] offset:112
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[44:47], s[0:1] offset:64
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[58:61], s[0:1] offset:80
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[62:65], s[0:1] offset:32
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[0:3], s[0:1] offset:48
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[4:7], s[0:1]
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[8:11], s[0:1] offset:16
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[12:15], s[0:1] offset:224
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[16:19], s[0:1] offset:240
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[20:23], s[0:1] offset:192
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[24:27], s[0:1] offset:208
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[28:31], s[0:1] offset:160
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[32:35], s[0:1] offset:176
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[36:39], s[0:1] offset:128
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[40:43], s[0:1] offset:144
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[8:11], s[0:1] offset:96
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[12:15], s[0:1] offset:112
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[0:3], s[0:1] offset:64
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[4:7], s[0:1] offset:80
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[54:57], s[0:1] offset:32
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[48:51], s[0:1] offset:48
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[62:65], s[0:1]
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[58:61], s[0:1] offset:16
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[40:43], s[0:1] offset:224
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[44:47], s[0:1] offset:240
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[32:35], s[0:1] offset:192
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[36:39], s[0:1] offset:208
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[24:27], s[0:1] offset:160
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[28:31], s[0:1] offset:176
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[16:19], s[0:1] offset:128
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[20:23], s[0:1] offset:144
; GFX1251-SDAG-NEXT: s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
; GFX1251-SDAG-NEXT: s_endpgm
;
@@ -855,112 +855,112 @@ define amdgpu_kernel void @sub_v32_vs(ptr addrspace(1) %a, <32 x i64> %x) {
; GFX1251-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x24 nv
; GFX1251-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v0
; GFX1251-SDAG-NEXT: s_clause 0x3
-; GFX1251-SDAG-NEXT: s_load_b512 s[68:83], s[4:5], 0x1a4 nv
-; GFX1251-SDAG-NEXT: s_load_b512 s[52:67], s[4:5], 0x1e4 nv
-; GFX1251-SDAG-NEXT: s_load_b512 s[8:23], s[4:5], 0x124 nv
+; GFX1251-SDAG-NEXT: s_load_b512 s[68:83], s[4:5], 0x1e4 nv
+; GFX1251-SDAG-NEXT: s_load_b512 s[52:67], s[4:5], 0x1a4 nv
; GFX1251-SDAG-NEXT: s_load_b512 s[36:51], s[4:5], 0x164 nv
-; GFX1251-SDAG-NEXT: v_lshlrev_b32_e32 v48, 8, v0
+; GFX1251-SDAG-NEXT: s_load_b512 s[8:23], s[4:5], 0x124 nv
+; GFX1251-SDAG-NEXT: v_lshlrev_b32_e32 v52, 8, v0
; GFX1251-SDAG-NEXT: s_wait_kmcnt 0x0
; GFX1251-SDAG-NEXT: s_clause 0xf
-; GFX1251-SDAG-NEXT: global_load_b128 v[40:43], v48, s[0:1] offset:144
-; GFX1251-SDAG-NEXT: global_load_b128 v[36:39], v48, s[0:1] offset:128
-; GFX1251-SDAG-NEXT: global_load_b128 v[32:35], v48, s[0:1] offset:176
-; GFX1251-SDAG-NEXT: global_load_b128 v[28:31], v48, s[0:1] offset:160
-; GFX1251-SDAG-NEXT: global_load_b128 v[24:27], v48, s[0:1] offset:208
-; GFX1251-SDAG-NEXT: global_load_b128 v[20:23], v48, s[0:1] offset:192
-; GFX1251-SDAG-NEXT: global_load_b128 v[16:19], v48, s[0:1] offset:240
-; GFX1251-SDAG-NEXT: global_load_b128 v[12:15], v48, s[0:1] offset:224
-; GFX1251-SDAG-NEXT: global_load_b128 v[8:11], v48, s[0:1] offset:16
-; GFX1251-SDAG-NEXT: global_load_b128 v[4:7], v48, s[0:1]
-; GFX1251-SDAG-NEXT: global_load_b128 v[0:3], v48, s[0:1] offset:48
-; GFX1251-SDAG-NEXT: global_load_b128 v[44:47], v48, s[0:1] offset:64
-; GFX1251-SDAG-NEXT: global_load_b128 v[50:53], v48, s[0:1] offset:112
-; GFX1251-SDAG-NEXT: global_load_b128 v[54:57], v48, s[0:1] offset:96
-; GFX1251-SDAG-NEXT: global_load_b128 v[58:61], v48, s[0:1] offset:80
-; GFX1251-SDAG-NEXT: global_load_b128 v[62:65], v48, s[0:1] offset:32
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s72 :: v_dual_mov_b32 v67, s73
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s74 :: v_dual_mov_b32 v69, s75
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s68 :: v_dual_mov_b32 v71, s69
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s70 :: v_dual_mov_b32 v73, s71
-; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xf
-; GFX1251-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_3)
-; GFX1251-SDAG-NEXT: v_pk_sub_nc_u64 v[40:43], v[40:43], v[66:69]
+; GFX1251-SDAG-NEXT: global_load_b128 v[44:47], v52, s[0:1] offset:240
+; GFX1251-SDAG-NEXT: global_load_b128 v[40:43], v52, s[0:1] offset:224
+; GFX1251-SDAG-NEXT: global_load_b128 v[36:39], v52, s[0:1] offset:208
+; GFX1251-SDAG-NEXT: global_load_b128 v[32:35], v52, s[0:1] offset:192
+; GFX1251-SDAG-NEXT: global_load_b128 v[28:31], v52, s[0:1] offset:176
+; GFX1251-SDAG-NEXT: global_load_b128 v[24:27], v52, s[0:1] offset:160
+; GFX1251-SDAG-NEXT: global_load_b128 v[20:23], v52, s[0:1] offset:144
+; GFX1251-SDAG-NEXT: global_load_b128 v[16:19], v52, s[0:1] offset:128
+; GFX1251-SDAG-NEXT: global_load_b128 v[12:15], v52, s[0:1] offset:112
+; GFX1251-SDAG-NEXT: global_load_b128 v[8:11], v52, s[0:1] offset:96
+; GFX1251-SDAG-NEXT: global_load_b128 v[4:7], v52, s[0:1] offset:80
+; GFX1251-SDAG-NEXT: global_load_b128 v[0:3], v52, s[0:1] offset:64
+; GFX1251-SDAG-NEXT: global_load_b128 v[48:51], v52, s[0:1] offset:48
+; GFX1251-SDAG-NEXT: global_load_b128 v[54:57], v52, s[0:1] offset:32
+; GFX1251-SDAG-NEXT: global_load_b128 v[58:61], v52, s[0:1] offset:16
+; GFX1251-SDAG-NEXT: global_load_b128 v[62:65], v52, s[0:1]
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s80 :: v_dual_mov_b32 v67, s81
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s82 :: v_dual_mov_b32 v69, s83
-; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xe
-; GFX1251-SDAG-NEXT: v_pk_sub_nc_u64 v[36:39], v[36:39], v[70:73]
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s76 :: v_dual_mov_b32 v71, s77
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s78 :: v_dual_mov_b32 v73, s79
+; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xf
+; GFX1251-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_3)
+; GFX1251-SDAG-NEXT: v_pk_sub_nc_u64 v[44:47], v[44:47], v[66:69]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s72 :: v_dual_mov_b32 v67, s73
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s74 :: v_dual_mov_b32 v69, s75
+; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xe
+; GFX1251-SDAG-NEXT: v_pk_sub_nc_u64 v[40:43], v[40:43], v[70:73]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s68 :: v_dual_mov_b32 v71, s69
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s70 :: v_dual_mov_b32 v73, s71
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xd
-; GFX1251-SDAG-NEXT: v_pk_sub_nc_u64 v[32:35], v[32:35], v[66:69]
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s56 :: v_dual_mov_b32 v67, s57
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s58 :: v_dual_mov_b32 v69, s59
-; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xc
-; GFX1251-SDAG-NEXT: v_pk_sub_nc_u64 v[28:31], v[28:31], v[70:73]
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s52 :: v_dual_mov_b32 v71, s53
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s54 :: v_dual_mov_b32 v73, s55
-; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xb
-; GFX1251-SDAG-NEXT: v_pk_sub_nc_u64 v[24:27], v[24:27], v[66:69]
+; GFX1251-SDAG-NEXT: v_pk_sub_nc_u64 v[36:39], v[36:39], v[66:69]
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s64 :: v_dual_mov_b32 v67, s65
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s66 :: v_dual_mov_b32 v69, s67
-; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xa
-; GFX1251-SDAG-NEXT: v_pk_sub_nc_u64 v[20:23], v[20:23], v[70:73]
+; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xc
+; GFX1251-SDAG-NEXT: v_pk_sub_nc_u64 v[32:35], v[32:35], v[70:73]
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s60 :: v_dual_mov_b32 v71, s61
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s62 :: v_dual_mov_b32 v73, s63
+; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xb
+; GFX1251-SDAG-NEXT: v_pk_sub_nc_u64 v[28:31], v[28:31], v[66:69]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s56 :: v_dual_mov_b32 v67, s57
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s58 :: v_dual_mov_b32 v69, s59
+; GFX1251-SDAG-NEXT: s_wait_loadcnt 0xa
+; GFX1251-SDAG-NEXT: v_pk_sub_nc_u64 v[24:27], v[24:27], v[70:73]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s52 :: v_dual_mov_b32 v71, s53
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s54 :: v_dual_mov_b32 v73, s55
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x9
-; GFX1251-SDAG-NEXT: v_pk_sub_nc_u64 v[16:19], v[16:19], v[66:69]
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s12 :: v_dual_mov_b32 v67, s13
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s14 :: v_dual_mov_b32 v69, s15
+; GFX1251-SDAG-NEXT: v_pk_sub_nc_u64 v[20:23], v[20:23], v[66:69]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s48 :: v_dual_mov_b32 v67, s49
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s50 :: v_dual_mov_b32 v69, s51
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x8
-; GFX1251-SDAG-NEXT: v_pk_sub_nc_u64 v[12:15], v[12:15], v[70:73]
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s8 :: v_dual_mov_b32 v71, s9
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s10 :: v_dual_mov_b32 v73, s11
+; GFX1251-SDAG-NEXT: v_pk_sub_nc_u64 v[16:19], v[16:19], v[70:73]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s44 :: v_dual_mov_b32 v71, s45
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s46 :: v_dual_mov_b32 v73, s47
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x7
-; GFX1251-SDAG-NEXT: v_pk_sub_nc_u64 v[8:11], v[8:11], v[66:69]
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s20 :: v_dual_mov_b32 v67, s21
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s22 :: v_dual_mov_b32 v69, s23
+; GFX1251-SDAG-NEXT: v_pk_sub_nc_u64 v[12:15], v[12:15], v[66:69]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s40 :: v_dual_mov_b32 v67, s41
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s42 :: v_dual_mov_b32 v69, s43
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x6
-; GFX1251-SDAG-NEXT: v_pk_sub_nc_u64 v[4:7], v[4:7], v[70:73]
+; GFX1251-SDAG-NEXT: v_pk_sub_nc_u64 v[8:11], v[8:11], v[70:73]
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s36 :: v_dual_mov_b32 v71, s37
; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s38 :: v_dual_mov_b32 v73, s39
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x5
-; GFX1251-SDAG-NEXT: v_pk_sub_nc_u64 v[0:3], v[0:3], v[66:69]
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s48 :: v_dual_mov_b32 v67, s49
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s50 :: v_dual_mov_b32 v69, s51
+; GFX1251-SDAG-NEXT: v_pk_sub_nc_u64 v[4:7], v[4:7], v[66:69]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s20 :: v_dual_mov_b32 v67, s21
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s22 :: v_dual_mov_b32 v69, s23
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x4
-; GFX1251-SDAG-NEXT: v_pk_sub_nc_u64 v[44:47], v[44:47], v[70:73]
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s44 :: v_dual_mov_b32 v71, s45
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s46 :: v_dual_mov_b32 v73, s47
+; GFX1251-SDAG-NEXT: v_pk_sub_nc_u64 v[0:3], v[0:3], v[70:73]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s16 :: v_dual_mov_b32 v71, s17
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s18 :: v_dual_mov_b32 v73, s19
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x3
-; GFX1251-SDAG-NEXT: v_pk_sub_nc_u64 v[50:53], v[50:53], v[66:69]
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s40 :: v_dual_mov_b32 v67, s41
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s42 :: v_dual_mov_b32 v69, s43
+; GFX1251-SDAG-NEXT: v_pk_sub_nc_u64 v[48:51], v[48:51], v[66:69]
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v66, s12 :: v_dual_mov_b32 v67, s13
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v68, s14 :: v_dual_mov_b32 v69, s15
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x2
; GFX1251-SDAG-NEXT: v_pk_sub_nc_u64 v[54:57], v[54:57], v[70:73]
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s16 :: v_dual_mov_b32 v71, s17
-; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s18 :: v_dual_mov_b32 v73, s19
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v70, s8 :: v_dual_mov_b32 v71, s9
+; GFX1251-SDAG-NEXT: v_dual_mov_b32 v72, s10 :: v_dual_mov_b32 v73, s11
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x1
; GFX1251-SDAG-NEXT: v_pk_sub_nc_u64 v[58:61], v[58:61], v[66:69]
; GFX1251-SDAG-NEXT: s_wait_loadcnt 0x0
; GFX1251-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2)
; GFX1251-SDAG-NEXT: v_pk_sub_nc_u64 v[62:65], v[62:65], v[70:73]
; GFX1251-SDAG-NEXT: s_clause 0xf
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[54:57], s[0:1] offset:96
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[50:53], s[0:1] offset:112
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[44:47], s[0:1] offset:64
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[58:61], s[0:1] offset:80
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[62:65], s[0:1] offset:32
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[0:3], s[0:1] offset:48
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[4:7], s[0:1]
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[8:11], s[0:1] offset:16
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[12:15], s[0:1] offset:224
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[16:19], s[0:1] offset:240
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[20:23], s[0:1] offset:192
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[24:27], s[0:1] offset:208
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[28:31], s[0:1] offset:160
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[32:35], s[0:1] offset:176
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[36:39], s[0:1] offset:128
-; GFX1251-SDAG-NEXT: global_store_b128 v48, v[40:43], s[0:1] offset:144
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[8:11], s[0:1] offset:96
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[12:15], s[0:1] offset:112
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[0:3], s[0:1] offset:64
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[4:7], s[0:1] offset:80
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[54:57], s[0:1] offset:32
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[48:51], s[0:1] offset:48
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[62:65], s[0:1]
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[58:61], s[0:1] offset:16
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[40:43], s[0:1] offset:224
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[44:47], s[0:1] offset:240
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[32:35], s[0:1] offset:192
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[36:39], s[0:1] offset:208
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[24:27], s[0:1] offset:160
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[28:31], s[0:1] offset:176
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[16:19], s[0:1] offset:128
+; GFX1251-SDAG-NEXT: global_store_b128 v52, v[20:23], s[0:1] offset:144
; GFX1251-SDAG-NEXT: s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
; GFX1251-SDAG-NEXT: s_endpgm
;
diff --git a/llvm/test/CodeGen/AMDGPU/preload-kernargs.ll b/llvm/test/CodeGen/AMDGPU/preload-kernargs.ll
index 22cbf5f3f6882..df7f2aa726c0c 100644
--- a/llvm/test/CodeGen/AMDGPU/preload-kernargs.ll
+++ b/llvm/test/CodeGen/AMDGPU/preload-kernargs.ll
@@ -1263,10 +1263,8 @@ define amdgpu_kernel void @fp128_kernel_preload_arg(ptr addrspace(1) inreg %out,
; GFX942-NEXT: .p2align 8
; GFX942-NEXT: ; %bb.2:
; GFX942-NEXT: .LBB25_0:
-; GFX942-NEXT: v_mov_b32_e32 v0, s6
-; GFX942-NEXT: v_mov_b32_e32 v1, s7
-; GFX942-NEXT: v_mov_b32_e32 v2, s8
-; GFX942-NEXT: v_mov_b32_e32 v3, s9
+; GFX942-NEXT: v_mov_b64_e32 v[0:1], s[6:7]
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], s[8:9]
; GFX942-NEXT: v_mov_b32_e32 v4, 0
; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[2:3]
; GFX942-NEXT: s_endpgm
@@ -1293,8 +1291,8 @@ define amdgpu_kernel void @fp128_kernel_preload_arg(ptr addrspace(1) inreg %out,
; GFX1250-NEXT: s_mov_b64 s[64:65], 0
; GFX1250-NEXT: v_nop
; GFX1250-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
-; GFX1250-NEXT: v_dual_mov_b32 v0, s6 :: v_dual_mov_b32 v1, s7
-; GFX1250-NEXT: v_dual_mov_b32 v2, s8 :: v_dual_mov_b32 v3, s9
+; GFX1250-NEXT: v_mov_b64_e32 v[0:1], s[6:7]
+; GFX1250-NEXT: v_mov_b64_e32 v[2:3], s[8:9]
; GFX1250-NEXT: v_mov_b32_e32 v4, 0
; GFX1250-NEXT: global_store_b128 v4, v[0:3], s[2:3]
; GFX1250-NEXT: s_endpgm
diff --git a/llvm/test/CodeGen/AMDGPU/promote-alloca-vector-dynamic-idx-bitcasts-llc.ll b/llvm/test/CodeGen/AMDGPU/promote-alloca-vector-dynamic-idx-bitcasts-llc.ll
index 10287c131acdb..20a3c9f651e44 100644
--- a/llvm/test/CodeGen/AMDGPU/promote-alloca-vector-dynamic-idx-bitcasts-llc.ll
+++ b/llvm/test/CodeGen/AMDGPU/promote-alloca-vector-dynamic-idx-bitcasts-llc.ll
@@ -14,38 +14,23 @@ define amdgpu_kernel void @test_bitcast_llc_v128i8_v16i8(ptr addrspace(1) %out,
; GFX9-NEXT: v_perm_b32 v0, s0, s0, v0
; GFX9-NEXT: v_lshlrev_b32_e32 v1, 16, v0
; GFX9-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
-; GFX9-NEXT: s_lshl_b32 s2, s2, 2
; GFX9-NEXT: v_mov_b32_e32 v1, v0
-; GFX9-NEXT: v_mov_b32_e32 v2, v0
-; GFX9-NEXT: v_mov_b32_e32 v3, v0
-; GFX9-NEXT: v_mov_b32_e32 v4, v0
-; GFX9-NEXT: v_mov_b32_e32 v5, v0
-; GFX9-NEXT: v_mov_b32_e32 v6, v0
-; GFX9-NEXT: v_mov_b32_e32 v7, v0
-; GFX9-NEXT: v_mov_b32_e32 v8, v0
-; GFX9-NEXT: v_mov_b32_e32 v9, v0
-; GFX9-NEXT: v_mov_b32_e32 v10, v0
-; GFX9-NEXT: v_mov_b32_e32 v11, v0
-; GFX9-NEXT: v_mov_b32_e32 v12, v0
-; GFX9-NEXT: v_mov_b32_e32 v13, v0
-; GFX9-NEXT: v_mov_b32_e32 v14, v0
-; GFX9-NEXT: v_mov_b32_e32 v15, v0
-; GFX9-NEXT: v_mov_b32_e32 v16, v0
-; GFX9-NEXT: v_mov_b32_e32 v17, v0
-; GFX9-NEXT: v_mov_b32_e32 v18, v0
-; GFX9-NEXT: v_mov_b32_e32 v19, v0
-; GFX9-NEXT: v_mov_b32_e32 v20, v0
-; GFX9-NEXT: v_mov_b32_e32 v21, v0
-; GFX9-NEXT: v_mov_b32_e32 v22, v0
-; GFX9-NEXT: v_mov_b32_e32 v23, v0
-; GFX9-NEXT: v_mov_b32_e32 v24, v0
-; GFX9-NEXT: v_mov_b32_e32 v25, v0
-; GFX9-NEXT: v_mov_b32_e32 v26, v0
-; GFX9-NEXT: v_mov_b32_e32 v27, v0
-; GFX9-NEXT: v_mov_b32_e32 v28, v0
-; GFX9-NEXT: v_mov_b32_e32 v29, v0
-; GFX9-NEXT: v_mov_b32_e32 v30, v0
-; GFX9-NEXT: v_mov_b32_e32 v31, v0
+; GFX9-NEXT: s_lshl_b32 s2, s2, 2
+; GFX9-NEXT: v_mov_b64_e32 v[2:3], v[0:1]
+; GFX9-NEXT: v_mov_b64_e32 v[4:5], v[0:1]
+; GFX9-NEXT: v_mov_b64_e32 v[6:7], v[0:1]
+; GFX9-NEXT: v_mov_b64_e32 v[8:9], v[0:1]
+; GFX9-NEXT: v_mov_b64_e32 v[10:11], v[0:1]
+; GFX9-NEXT: v_mov_b64_e32 v[12:13], v[0:1]
+; GFX9-NEXT: v_mov_b64_e32 v[14:15], v[0:1]
+; GFX9-NEXT: v_mov_b64_e32 v[16:17], v[0:1]
+; GFX9-NEXT: v_mov_b64_e32 v[18:19], v[0:1]
+; GFX9-NEXT: v_mov_b64_e32 v[20:21], v[0:1]
+; GFX9-NEXT: v_mov_b64_e32 v[22:23], v[0:1]
+; GFX9-NEXT: v_mov_b64_e32 v[24:25], v[0:1]
+; GFX9-NEXT: v_mov_b64_e32 v[26:27], v[0:1]
+; GFX9-NEXT: v_mov_b64_e32 v[28:29], v[0:1]
+; GFX9-NEXT: v_mov_b64_e32 v[30:31], v[0:1]
; GFX9-NEXT: s_set_gpr_idx_on s2, gpr_idx(SRC0)
; GFX9-NEXT: v_mov_b32_e32 v35, v3
; GFX9-NEXT: v_mov_b32_e32 v34, v2
diff --git a/llvm/test/CodeGen/AMDGPU/ptradd-sdag-optimizations.ll b/llvm/test/CodeGen/AMDGPU/ptradd-sdag-optimizations.ll
index 20af74faa5c19..c3732b8d11d73 100644
--- a/llvm/test/CodeGen/AMDGPU/ptradd-sdag-optimizations.ll
+++ b/llvm/test/CodeGen/AMDGPU/ptradd-sdag-optimizations.ll
@@ -386,8 +386,7 @@ define void @replace_const0_memcpy_by_memset(ptr align 4 %dst) {
; GFX942-LABEL: replace_const0_memcpy_by_memset:
; GFX942: ; %bb.0: ; %entry
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX942-NEXT: v_mov_b32_e32 v2, 0
-; GFX942-NEXT: v_mov_b32_e32 v3, v2
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], 0
; GFX942-NEXT: flat_store_dwordx2 v[0:1], v[2:3]
; GFX942-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
diff --git a/llvm/test/CodeGen/AMDGPU/regalloc-spill-wmma-scale.ll b/llvm/test/CodeGen/AMDGPU/regalloc-spill-wmma-scale.ll
index b30f463d29d72..eca0a05d47509 100644
--- a/llvm/test/CodeGen/AMDGPU/regalloc-spill-wmma-scale.ll
+++ b/llvm/test/CodeGen/AMDGPU/regalloc-spill-wmma-scale.ll
@@ -1,7 +1,7 @@
; RUN: llc -mtriple=amdgpu12.50 < %s | FileCheck %s
-; RUN: %if asserts %{ llc -mtriple=amdgpu12.50 -mcpu=gfx1250 -stress-regalloc=16 -verify-machineinstrs -debug-only=regalloc -o /dev/null %s 2>&1 | FileCheck %s --check-prefix=REASSIGN %}
-; RUN: %if asserts %{ llc -mtriple=amdgpu12.50 -mcpu=gfx1250 -stress-regalloc=16 -verify-machineinstrs -enable-local-reassign=true -debug-only=regalloc -o /dev/null %s 2>&1 | FileCheck %s --check-prefix=REASSIGN %}
-; RUN: %if asserts %{ llc -mtriple=amdgpu12.50 -mcpu=gfx1250 -stress-regalloc=16 -verify-machineinstrs -enable-local-reassign=false -debug-only=regalloc -o /dev/null %s 2>&1 | FileCheck %s --check-prefix=NO-REASSIGN --implicit-check-not="can reassign:" %}
+; RUN: %if asserts %{ llc -mtriple=amdgpu12.50 -mcpu=gfx1250 -stress-regalloc=32 -verify-machineinstrs -debug-only=regalloc -o /dev/null %s 2>&1 | FileCheck %s --check-prefix=REASSIGN %}
+; RUN: %if asserts %{ llc -mtriple=amdgpu12.50 -mcpu=gfx1250 -stress-regalloc=32 -verify-machineinstrs -enable-local-reassign=true -debug-only=regalloc -o /dev/null %s 2>&1 | FileCheck %s --check-prefix=REASSIGN %}
+; RUN: %if asserts %{ llc -mtriple=amdgpu12.50 -mcpu=gfx1250 -stress-regalloc=32 -verify-machineinstrs -enable-local-reassign=false -debug-only=regalloc -o /dev/null %s 2>&1 | FileCheck %s --check-prefix=NO-REASSIGN --implicit-check-not="can reassign:" %}
; REASSIGN: can reassign:
; NO-REASSIGN: GREEDY REGISTER ALLOCATION
diff --git a/llvm/test/CodeGen/AMDGPU/rewrite-vgpr-mfma-to-agpr-reserved-wwm-vgpr.ll b/llvm/test/CodeGen/AMDGPU/rewrite-vgpr-mfma-to-agpr-reserved-wwm-vgpr.ll
index 349e5a5fcf395..68c81a1e43046 100644
--- a/llvm/test/CodeGen/AMDGPU/rewrite-vgpr-mfma-to-agpr-reserved-wwm-vgpr.ll
+++ b/llvm/test/CodeGen/AMDGPU/rewrite-vgpr-mfma-to-agpr-reserved-wwm-vgpr.ll
@@ -17,43 +17,43 @@ define amdgpu_kernel void @reserved_wwm_vgpr_not_in_alloc_order(i32 %arg6, i1 %a
; CHECK: ; %bb.0: ; %bbl
; CHECK-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x0
; CHECK-NEXT: s_load_dword s9, s[4:5], 0x30
+; CHECK-NEXT: s_load_dword s24, s[4:5], 0x90
; CHECK-NEXT: s_load_dword s8, s[4:5], 0x10
; CHECK-NEXT: s_load_dwordx4 s[12:15], s[4:5], 0x20
; CHECK-NEXT: ; implicit-def: $vgpr31 : SGPR spill to VGPR lane
; CHECK-NEXT: v_mov_b32_e32 v0, 0
-; CHECK-NEXT: v_mov_b32_e32 v1, 0
; CHECK-NEXT: s_waitcnt lgkmcnt(0)
; CHECK-NEXT: s_bitcmp1_b32 s1, 0
; CHECK-NEXT: s_cselect_b64 s[6:7], -1, 0
+; CHECK-NEXT: s_xor_b64 s[16:17], s[6:7], -1
; CHECK-NEXT: v_writelane_b32 v31, s12, 0
-; CHECK-NEXT: s_xor_b64 s[22:23], s[6:7], -1
; CHECK-NEXT: s_bitcmp1_b32 s1, 8
+; CHECK-NEXT: s_cselect_b64 s[10:11], -1, 0
; CHECK-NEXT: v_writelane_b32 v31, s13, 1
; CHECK-NEXT: v_writelane_b32 v31, s14, 2
; CHECK-NEXT: v_writelane_b32 v31, s15, 3
-; CHECK-NEXT: s_cselect_b64 s[16:17], -1, 0
; CHECK-NEXT: s_bitcmp1_b32 s1, 16
-; CHECK-NEXT: s_load_dwordx4 s[12:15], s[4:5], 0x40
-; CHECK-NEXT: s_load_dword s24, s[4:5], 0x90
+; CHECK-NEXT: v_writelane_b32 v31, s10, 4
; CHECK-NEXT: s_cselect_b64 vcc, -1, 0
; CHECK-NEXT: s_bitcmp1_b32 s8, 0
-; CHECK-NEXT: s_cselect_b64 s[34:35], -1, 0
+; CHECK-NEXT: v_writelane_b32 v31, s11, 5
+; CHECK-NEXT: s_cselect_b64 s[10:11], -1, 0
; CHECK-NEXT: s_bitcmp1_b32 s8, 8
+; CHECK-NEXT: s_load_dwordx4 s[20:23], s[4:5], 0x40
; CHECK-NEXT: s_load_dword s1, s[4:5], 0x50
; CHECK-NEXT: s_load_dword s8, s[4:5], 0x58
-; CHECK-NEXT: s_waitcnt lgkmcnt(0)
-; CHECK-NEXT: v_writelane_b32 v31, s12, 4
; CHECK-NEXT: s_cselect_b64 s[36:37], -1, 0
; CHECK-NEXT: s_bitcmp1_b32 s9, 0
-; CHECK-NEXT: v_writelane_b32 v31, s13, 5
-; CHECK-NEXT: v_writelane_b32 v31, s14, 6
+; CHECK-NEXT: v_writelane_b32 v31, s10, 6
; CHECK-NEXT: s_cselect_b64 s[38:39], -1, 0
+; CHECK-NEXT: s_waitcnt lgkmcnt(0)
; CHECK-NEXT: s_bitcmp1_b32 s8, 0
-; CHECK-NEXT: v_writelane_b32 v31, s15, 7
+; CHECK-NEXT: v_writelane_b32 v31, s11, 7
; CHECK-NEXT: s_cselect_b64 s[40:41], -1, 0
; CHECK-NEXT: s_load_dwordx8 s[8:15], s[4:5], 0x60
; CHECK-NEXT: s_bitcmp1_b32 s24, 0
-; CHECK-NEXT: s_mov_b32 s24, 0
+; CHECK-NEXT: s_mov_b64 s[24:25], 0
+; CHECK-NEXT: v_mov_b32_e32 v1, 0
; CHECK-NEXT: v_mov_b32_e32 v2, 0
; CHECK-NEXT: v_mov_b32_e32 v3, 0
; CHECK-NEXT: v_mov_b32_e32 v4, 0
@@ -68,9 +68,7 @@ define amdgpu_kernel void @reserved_wwm_vgpr_not_in_alloc_order(i32 %arg6, i1 %a
; CHECK-NEXT: v_mov_b32_e32 v13, 0
; CHECK-NEXT: v_mov_b32_e32 v14, 0
; CHECK-NEXT: v_mov_b32_e32 v15, 0
-; CHECK-NEXT: s_mov_b32 s25, s24
-; CHECK-NEXT: s_mov_b32 s26, s24
-; CHECK-NEXT: s_mov_b32 s27, s24
+; CHECK-NEXT: s_mov_b64 s[26:27], s[24:25]
; CHECK-NEXT: s_cselect_b64 s[42:43], -1, 0
; CHECK-NEXT: s_lshl_b32 s60, s1, 1
; CHECK-NEXT: v_accvgpr_write_b32 a31, v15
@@ -95,9 +93,9 @@ define amdgpu_kernel void @reserved_wwm_vgpr_not_in_alloc_order(i32 %arg6, i1 %a
; CHECK-NEXT: v_mov_b32_e32 v30, 0
; CHECK-NEXT: s_mov_b64 s[52:53], -1
; CHECK-NEXT: v_mov_b32_e32 v0, s60
-; CHECK-NEXT: s_mov_b64 s[20:21], s[4:5]
+; CHECK-NEXT: s_mov_b64 s[34:35], s[4:5]
; CHECK-NEXT: s_mov_b64 s[4:5], s[16:17]
-; CHECK-NEXT: s_mov_b64 s[54:55], 0
+; CHECK-NEXT: s_mov_b32 s1, 0
; CHECK-NEXT: v_mov_b32_e32 v18, 0
; CHECK-NEXT: v_mov_b32_e32 v17, 0
; CHECK-NEXT: v_mov_b32_e32 v16, 0
@@ -117,19 +115,19 @@ define amdgpu_kernel void @reserved_wwm_vgpr_not_in_alloc_order(i32 %arg6, i1 %a
; CHECK-NEXT: v_accvgpr_write_b32 a13, 0
; CHECK-NEXT: v_accvgpr_write_b32 a14, 0
; CHECK-NEXT: v_accvgpr_write_b32 a15, 0
-; CHECK-NEXT: s_mov_b64 s[58:59], 0
-; CHECK-NEXT: s_mov_b64 s[56:57], 0
-; CHECK-NEXT: s_mov_b64 s[44:45], 0
-; CHECK-NEXT: s_mov_b64 s[46:47], 0
-; CHECK-NEXT: s_mov_b32 s1, s24
-; CHECK-NEXT: s_mov_b64 s[48:49], 0
-; CHECK-NEXT: s_mov_b64 s[50:51], 0
-; CHECK-NEXT: s_mov_b32 s33, s24
+; CHECK-NEXT: s_mov_b64 s[54:55], s[24:25]
+; CHECK-NEXT: s_mov_b64 s[58:59], s[24:25]
+; CHECK-NEXT: s_mov_b64 s[56:57], s[24:25]
+; CHECK-NEXT: s_mov_b64 s[44:45], s[24:25]
+; CHECK-NEXT: s_mov_b64 s[46:47], s[24:25]
+; CHECK-NEXT: s_mov_b32 s33, 0
+; CHECK-NEXT: s_mov_b64 s[48:49], s[24:25]
+; CHECK-NEXT: s_mov_b64 s[50:51], s[24:25]
; CHECK-NEXT: v_mov_b32_e32 v19, v30
-; CHECK-NEXT: s_mov_b32 s62, s24
-; CHECK-NEXT: s_mov_b32 s63, s24
-; CHECK-NEXT: s_mov_b32 s64, s24
-; CHECK-NEXT: s_mov_b32 s65, s24
+; CHECK-NEXT: s_mov_b32 s62, 0
+; CHECK-NEXT: s_mov_b32 s63, 0
+; CHECK-NEXT: s_mov_b32 s64, 0
+; CHECK-NEXT: s_mov_b32 s65, 0
; CHECK-NEXT: scratch_store_dword off, v0, off offset:80 ; 4-byte Folded Spill
; CHECK-NEXT: v_mov_b32_e32 v0, s2
; CHECK-NEXT: scratch_store_dword off, v0, off offset:84 ; 4-byte Folded Spill
@@ -165,7 +163,7 @@ define amdgpu_kernel void @reserved_wwm_vgpr_not_in_alloc_order(i32 %arg6, i1 %a
; CHECK-NEXT: s_cselect_b32 s55, s10, 0
; CHECK-NEXT: s_cselect_b32 s56, s9, 0
; CHECK-NEXT: s_cselect_b32 s57, s8, 0
-; CHECK-NEXT: s_or_b32 s68, s1, s0
+; CHECK-NEXT: s_or_b32 s68, s33, s0
; CHECK-NEXT: v_accvgpr_mov_b32 a1, a0
; CHECK-NEXT: v_accvgpr_mov_b32 a2, a0
; CHECK-NEXT: v_accvgpr_mov_b32 a3, a0
@@ -187,14 +185,11 @@ define amdgpu_kernel void @reserved_wwm_vgpr_not_in_alloc_order(i32 %arg6, i1 %a
; CHECK-NEXT: s_cselect_b32 s17, s64, 0
; CHECK-NEXT: s_cselect_b32 s18, s63, 0
; CHECK-NEXT: s_cselect_b32 s19, s62, 0
-; CHECK-NEXT: v_readlane_b32 s28, v31, 4
-; CHECK-NEXT: v_readlane_b32 s29, v31, 5
-; CHECK-NEXT: v_readlane_b32 s30, v31, 6
-; CHECK-NEXT: v_readlane_b32 s31, v31, 7
+; CHECK-NEXT: s_load_dwordx4 s[28:31], s[34:35], 0x20
; CHECK-NEXT: s_mov_b64 s[60:61], s[52:53]
; CHECK-NEXT: s_mov_b64 s[52:53], 0
; CHECK-NEXT: s_mov_b64 s[58:59], s[40:41]
-; CHECK-NEXT: s_mov_b32 s1, 1
+; CHECK-NEXT: s_mov_b32 s33, 1
; CHECK-NEXT: s_mov_b64 s[44:45], -1
; CHECK-NEXT: s_mov_b32 s62, 1
; CHECK-NEXT: s_mov_b32 s63, 1
@@ -233,13 +228,13 @@ define amdgpu_kernel void @reserved_wwm_vgpr_not_in_alloc_order(i32 %arg6, i1 %a
; CHECK-NEXT: scratch_load_dwordx4 v[18:21], off, off offset:16 ; 16-byte Folded Reload
; CHECK-NEXT: scratch_load_dwordx4 v[22:25], off, off offset:32 ; 16-byte Folded Reload
; CHECK-NEXT: scratch_load_dwordx4 v[26:29], off, off offset:48 ; 16-byte Folded Reload
+; CHECK-NEXT: v_readlane_b32 s18, v31, 4
; CHECK-NEXT: s_and_b64 s[46:47], s[46:47], exec
+; CHECK-NEXT: v_readlane_b32 s19, v31, 5
; CHECK-NEXT: s_cselect_b32 s16, 0x3f803f80, 0
-; CHECK-NEXT: s_and_b64 s[66:67], s[4:5], exec
+; CHECK-NEXT: s_and_b64 s[66:67], s[18:19], exec
; CHECK-NEXT: v_mov_b32_e32 v0, s16
-; CHECK-NEXT: s_cselect_b32 s16, s33, 0
-; CHECK-NEXT: s_mov_b32 s33, s31
-; CHECK-NEXT: s_load_dwordx4 s[28:31], s[20:21], 0x20
+; CHECK-NEXT: s_cselect_b32 s16, s1, 0
; CHECK-NEXT: s_and_b64 s[48:49], s[48:49], exec
; CHECK-NEXT: s_cselect_b32 s17, 0x3f803f80, 0
; CHECK-NEXT: s_lshr_b32 s16, s16, 16
@@ -252,11 +247,13 @@ define amdgpu_kernel void @reserved_wwm_vgpr_not_in_alloc_order(i32 %arg6, i1 %a
; CHECK-NEXT: v_mov_b32_e32 v2, v0
; CHECK-NEXT: v_mov_b32_e32 v3, v0
; CHECK-NEXT: ds_write_b128 v30, v[0:3]
+; CHECK-NEXT: v_readlane_b32 s48, v31, 6
; CHECK-NEXT: s_mov_b64 s[54:55], s[42:43]
; CHECK-NEXT: s_mov_b64 s[56:57], s[38:39]
; CHECK-NEXT: s_mov_b64 s[46:47], -1
; CHECK-NEXT: s_mov_b32 s65, 1
-; CHECK-NEXT: s_mov_b64 s[48:49], s[34:35]
+; CHECK-NEXT: v_readlane_b32 s49, v31, 7
+; CHECK-NEXT: s_mov_b32 s1, s23
; CHECK-NEXT: s_mov_b64 s[50:51], s[36:37]
; CHECK-NEXT: s_waitcnt vmcnt(0)
; CHECK-NEXT: v_mfma_f32_32x32x16_bf16 v[14:29], a[8:11], a[8:11], v[14:29]
@@ -283,41 +280,36 @@ define amdgpu_kernel void @reserved_wwm_vgpr_not_in_alloc_order(i32 %arg6, i1 %a
; CHECK-NEXT: ds_write_b64 v30, v[16:17]
; CHECK-NEXT: v_mov_b32_e32 v16, s68
; CHECK-NEXT: buffer_load_dwordx4 v[16:19], v16, s[24:27], 0 offen
-; CHECK-NEXT: s_and_b64 s[66:67], s[22:23], exec
+; CHECK-NEXT: s_and_b64 s[66:67], s[4:5], exec
; CHECK-NEXT: s_cbranch_scc0 .LBB0_1
; CHECK-NEXT: ; %bb.2: ; %bbl290
-; CHECK-NEXT: s_load_dwordx4 s[4:7], s[20:21], 0x80
+; CHECK-NEXT: s_load_dwordx4 s[4:7], s[34:35], 0x80
; CHECK-NEXT: s_and_b64 s[0:1], s[60:61], exec
; CHECK-NEXT: s_cselect_b32 s0, 0x3f803f80, 0
+; CHECK-NEXT: v_mov_b32_e32 v2, s0
+; CHECK-NEXT: v_mov_b32_e32 v3, s0
; CHECK-NEXT: v_mov_b32_e32 v4, s0
; CHECK-NEXT: v_mov_b32_e32 v5, s0
-; CHECK-NEXT: v_mov_b32_e32 v6, s0
-; CHECK-NEXT: v_mov_b32_e32 v7, s0
; CHECK-NEXT: v_mov_b32_e32 v0, 0
-; CHECK-NEXT: ds_write_b128 v0, v[4:7]
+; CHECK-NEXT: ds_write_b128 v0, v[2:5]
+; CHECK-NEXT: v_mov_b32_e32 v1, s3
; CHECK-NEXT: s_waitcnt lgkmcnt(0)
-; CHECK-NEXT: v_mov_b64_e32 v[8:9], s[6:7]
-; CHECK-NEXT: v_mov_b64_e32 v[6:7], s[4:5]
-; CHECK-NEXT: v_readlane_b32 s4, v31, 4
-; CHECK-NEXT: v_mov_b32_e32 v4, s3
-; CHECK-NEXT: v_readlane_b32 s5, v31, 5
-; CHECK-NEXT: v_readlane_b32 s6, v31, 6
-; CHECK-NEXT: v_readlane_b32 s7, v31, 7
-; CHECK-NEXT: ds_write_b128 v4, v[6:9]
-; CHECK-NEXT: v_mov_b64_e32 v[4:5], s[4:5]
-; CHECK-NEXT: v_mov_b64_e32 v[6:7], s[6:7]
-; CHECK-NEXT: ds_write_b128 v0, v[4:7]
-; CHECK-NEXT: v_mov_b32_e32 v4, s2
+; CHECK-NEXT: v_mov_b64_e32 v[2:3], s[4:5]
+; CHECK-NEXT: v_mov_b64_e32 v[4:5], s[6:7]
+; CHECK-NEXT: ds_write_b128 v1, v[2:5]
+; CHECK-NEXT: v_mov_b32_e32 v1, s2
; CHECK-NEXT: v_readlane_b32 s0, v31, 0
-; CHECK-NEXT: v_mov_b32_e32 v1, v0
-; CHECK-NEXT: v_mov_b32_e32 v2, v0
-; CHECK-NEXT: v_mov_b32_e32 v3, v0
+; CHECK-NEXT: v_mov_b64_e32 v[6:7], 0
+; CHECK-NEXT: v_mov_b64_e32 v[2:3], s[20:21]
+; CHECK-NEXT: v_mov_b64_e32 v[4:5], s[22:23]
; CHECK-NEXT: v_readlane_b32 s1, v31, 1
; CHECK-NEXT: v_readlane_b32 s2, v31, 2
; CHECK-NEXT: v_readlane_b32 s3, v31, 3
-; CHECK-NEXT: ds_write_b128 v4, v[0:3]
-; CHECK-NEXT: v_mov_b64_e32 v[2:3], s[0:1]
+; CHECK-NEXT: v_mov_b64_e32 v[8:9], v[6:7]
+; CHECK-NEXT: ds_write_b128 v0, v[2:5]
; CHECK-NEXT: v_mov_b64_e32 v[4:5], s[2:3]
+; CHECK-NEXT: v_mov_b64_e32 v[2:3], s[0:1]
+; CHECK-NEXT: ds_write_b128 v1, v[6:9]
; CHECK-NEXT: ds_write_b128 v0, v[2:5]
; CHECK-NEXT: s_endpgm
bbl:
diff --git a/llvm/test/CodeGen/AMDGPU/rewrite-vgpr-mfma-to-agpr-spill-joint-dom.ll b/llvm/test/CodeGen/AMDGPU/rewrite-vgpr-mfma-to-agpr-spill-joint-dom.ll
index f99989ccc74f5..3a8669432a802 100644
--- a/llvm/test/CodeGen/AMDGPU/rewrite-vgpr-mfma-to-agpr-spill-joint-dom.ll
+++ b/llvm/test/CodeGen/AMDGPU/rewrite-vgpr-mfma-to-agpr-spill-joint-dom.ll
@@ -1,9 +1,4 @@
; REQUIRES: asserts
-; FIXME: LiveVariables removal: the LiveIntervals-before-TwoAddress reorder
-; perturbs regalloc/spilling so the "reload not jointly dominated by stores"
-; scenario from issue #196671 no longer reproduces and the skip message is no
-; longer emitted. Needs a fresh reproducer (separate fix).
-; XFAIL: *
; RUN: llc -O3 -mtriple=amdgpu9.50-amd-amdhsa \
; RUN: -stop-after=amdgpu-rewrite-agpr-copy-mfma \
; RUN: -debug-only=amdgpu-rewrite-agpr-copy-mfma -filetype=null %s 2>&1 \
@@ -38,6 +33,8 @@ bb: ; preds = %bb49, %.lr.ph.i
%.sroa.678.2 = phi <16 x float> [ zeroinitializer, %.lr.ph.i ], [ %i89, %bb49 ]
%.sroa.730.2 = phi <16 x float> [ zeroinitializer, %.lr.ph.i ], [ %i90, %bb49 ]
%.sroa.782.2 = phi <16 x float> [ zeroinitializer, %.lr.ph.i ], [ %i77, %bb49 ]
+ %new.h.0 = phi <16 x float> [ zeroinitializer, %.lr.ph.i ], [ %new.l.0, %bb49 ]
+ %new.h.1 = phi <16 x float> [ zeroinitializer, %.lr.ph.i ], [ %new.l.1, %bb49 ]
%i = phi i64 [ 0, %.lr.ph.i ], [ 1, %bb49 ]
br i1 %arg, label %bb1, label %bb2
@@ -92,6 +89,10 @@ bb2: ; preds = %bb
%i46 = tail call <16 x float> @llvm.amdgcn.mfma.f32.32x32x16.bf16(<8 x bfloat> zeroinitializer, <8 x bfloat> zeroinitializer, <16 x float> %i31, i32 0, i32 0, i32 0)
%i47 = tail call <16 x float> @llvm.amdgcn.mfma.f32.32x32x16.bf16(<8 x bfloat> zeroinitializer, <8 x bfloat> zeroinitializer, <16 x float> %i32, i32 0, i32 0, i32 0)
%i48 = tail call <16 x float> @llvm.amdgcn.mfma.f32.32x32x16.bf16(<8 x bfloat> zeroinitializer, <8 x bfloat> zeroinitializer, <16 x float> %i33, i32 0, i32 0, i32 0)
+ %new.m2.0 = fmul <16 x float> %new.h.0, zeroinitializer
+ %new.a2.0 = tail call <16 x float> @llvm.amdgcn.mfma.f32.32x32x16.bf16(<8 x bfloat> zeroinitializer, <8 x bfloat> zeroinitializer, <16 x float> %new.m2.0, i32 0, i32 0, i32 0)
+ %new.m2.1 = fmul <16 x float> %new.h.1, zeroinitializer
+ %new.a2.1 = tail call <16 x float> @llvm.amdgcn.mfma.f32.32x32x16.bf16(<8 x bfloat> zeroinitializer, <8 x bfloat> zeroinitializer, <16 x float> %new.m2.1, i32 0, i32 0, i32 0)
br label %bb49
bb49: ; preds = %bb2, %bb1
@@ -111,6 +112,8 @@ bb49: ; preds = %bb2, %bb1
%.sroa.678.3 = phi <16 x float> [ %.sroa.678.2, %bb1 ], [ %i46, %bb2 ]
%.sroa.730.3 = phi <16 x float> [ %.sroa.730.2, %bb1 ], [ %i47, %bb2 ]
%.sroa.782.3 = phi <16 x float> [ %.sroa.782.2, %bb1 ], [ %i48, %bb2 ]
+ %new.h3.0 = phi <16 x float> [ %new.h.0, %bb1 ], [ %new.a2.0, %bb2 ]
+ %new.h3.1 = phi <16 x float> [ %new.h.1, %bb1 ], [ %new.a2.1, %bb2 ]
%i50 = fmul <16 x float> %.sroa.01121.3, zeroinitializer
%i51 = fmul <16 x float> %.sroa.54.3, zeroinitializer
%i52 = fmul <16 x float> %.sroa.106.3, zeroinitializer
@@ -152,6 +155,10 @@ bb49: ; preds = %bb2, %bb1
%i88 = tail call <16 x float> @llvm.amdgcn.mfma.f32.32x32x16.bf16(<8 x bfloat> zeroinitializer, <8 x bfloat> zeroinitializer, <16 x float> %.sroa.574.2, i32 0, i32 0, i32 0)
%i89 = tail call <16 x float> @llvm.amdgcn.mfma.f32.32x32x16.bf16(<8 x bfloat> zeroinitializer, <8 x bfloat> zeroinitializer, <16 x float> %i75, i32 0, i32 0, i32 0)
%i90 = tail call <16 x float> @llvm.amdgcn.mfma.f32.32x32x16.bf16(<8 x bfloat> zeroinitializer, <8 x bfloat> zeroinitializer, <16 x float> %i76, i32 0, i32 0, i32 0)
+ %new.m3.0 = fmul <16 x float> %new.h3.0, zeroinitializer
+ %new.l.0 = tail call <16 x float> @llvm.amdgcn.mfma.f32.32x32x16.bf16(<8 x bfloat> zeroinitializer, <8 x bfloat> zeroinitializer, <16 x float> %new.m3.0, i32 0, i32 0, i32 0)
+ %new.m3.1 = fmul <16 x float> %new.h3.1, zeroinitializer
+ %new.l.1 = tail call <16 x float> @llvm.amdgcn.mfma.f32.32x32x16.bf16(<8 x bfloat> zeroinitializer, <8 x bfloat> zeroinitializer, <16 x float> %new.m3.1, i32 0, i32 0, i32 0)
%exitcond.not.i = icmp eq i64 %i, 0
br i1 %exitcond.not.i, label %._crit_edge.i.loopexit, label %bb
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 fad467bdbb7cf..24795e2a80e71 100644
--- a/llvm/test/CodeGen/AMDGPU/rewrite-vgpr-mfma-to-agpr.ll
+++ b/llvm/test/CodeGen/AMDGPU/rewrite-vgpr-mfma-to-agpr.ll
@@ -374,73 +374,71 @@ bb:
define amdgpu_kernel void @illegal_mfma_after_rewrite() #1 {
; CHECK-LABEL: illegal_mfma_after_rewrite:
; 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[4:5], s[4:5]
+; CHECK-NEXT: v_mov_b64_e32 v[0:1], 0
; CHECK-NEXT: ;;#ASMSTART
; CHECK-NEXT: ; def s[0:3]
; CHECK-NEXT: ;;#ASMEND
-; CHECK-NEXT: ;;#ASMSTART
-; CHECK-NEXT: ; def v[16:19]
-; CHECK-NEXT: ;;#ASMEND
-; CHECK-NEXT: s_nop 0
-; CHECK-NEXT: v_mov_b64_e32 v[8:9], s[2:3]
-; CHECK-NEXT: v_mov_b64_e32 v[6:7], s[0:1]
+; CHECK-NEXT: v_mov_b32_e32 v12, 0x7fc00000
+; CHECK-NEXT: v_mov_b64_e32 v[4:5], s[2:3]
+; CHECK-NEXT: v_mov_b64_e32 v[2:3], s[0:1]
; CHECK-NEXT: s_mov_b32 s0, 0x3c003c00
; CHECK-NEXT: s_mov_b32 s1, s0
-; CHECK-NEXT: v_mov_b64_e32 v[24:25], s[0:1]
-; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[0:3], v[4:5], v[4:5], v[6:9]
-; CHECK-NEXT: s_mov_b32 s0, 0x7e007e00
-; CHECK-NEXT: s_mov_b32 s1, s0
+; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[6:9], v[0:1], v[0:1], v[2:5]
; CHECK-NEXT: v_mov_b64_e32 v[26:27], s[0:1]
-; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[10:13], v[4:5], v[24:25], v[6:9]
-; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[10:13], v[4:5], v[4:5], v[10:13]
-; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[0:3], v[4:5], v[4:5], v[0:3]
-; CHECK-NEXT: s_nop 5
-; CHECK-NEXT: v_mov_b32_e32 v12, 0x7fc00000
; CHECK-NEXT: v_mov_b32_e32 v13, v12
; CHECK-NEXT: v_mov_b32_e32 v14, v12
+; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[6:9], v[0:1], v[0:1], v[6:9]
; CHECK-NEXT: v_mov_b32_e32 v15, v12
-; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[6:9], v[4:5], v[26:27], v[6:9]
-; CHECK-NEXT: v_cvt_f16_f32_e32 v1, v10
-; CHECK-NEXT: v_mov_b64_e32 v[2:3], 0
-; CHECK-NEXT: v_cvt_f16_f32_e32 v0, v0
-; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[12:15], v[4:5], v[4:5], v[12:15]
-; CHECK-NEXT: global_store_short v[2:3], v1, off
+; CHECK-NEXT: s_mov_b32 s0, 0x7e007e00
+; CHECK-NEXT: s_mov_b32 s1, s0
+; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[8:11], v[0:1], v[26:27], v[2:5]
+; CHECK-NEXT: v_mov_b64_e32 v[28:29], s[0:1]
+; CHECK-NEXT: s_nop 1
+; CHECK-NEXT: v_cvt_f16_f32_e32 v24, v6
+; CHECK-NEXT: ;;#ASMSTART
+; CHECK-NEXT: ; def v[16:19]
+; CHECK-NEXT: ;;#ASMEND
+; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[12:15], v[0:1], v[0:1], v[12:15]
+; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[6:9], v[0:1], v[0:1], v[8:11]
+; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[2:5], v[0:1], v[28:29], v[2:5]
+; CHECK-NEXT: s_nop 5
+; CHECK-NEXT: v_cvt_f16_f32_e32 v10, v6
+; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[6:9], v[0:1], v[0:1], v[12:15]
+; CHECK-NEXT: global_store_short v[0:1], v10, off
+; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[20:23], v[0:1], v[0:1], v[16:19]
; 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[20:23], v[4:5], v[4:5], v[16:19]
-; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[16:19], v[4:5], v[24:25], v[16:19]
-; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[10:13], v[4:5], v[4:5], v[12:15]
-; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[6:9], v[4:5], v[4:5], v[6:9]
-; CHECK-NEXT: s_nop 5
-; CHECK-NEXT: v_cvt_f16_f32_e32 v1, v10
-; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[8:11], v[4:5], v[4:5], v[16:19]
-; CHECK-NEXT: global_store_short v[2:3], v1, off
-; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[20:23], v[4:5], v[4:5], v[20:23]
-; CHECK-NEXT: v_cvt_f16_f32_e32 v1, v6
+; 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[0:1], v[26:27], v[16:19]
; CHECK-NEXT: buffer_wbl2 sc0 sc1
; CHECK-NEXT: s_waitcnt vmcnt(0)
; CHECK-NEXT: buffer_inv sc0 sc1
-; CHECK-NEXT: global_store_short v[2:3], v1, off
-; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[6:9], v[24:25], v[4:5], v[8:11]
+; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[2:5], v[0:1], v[0:1], v[2:5]
+; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[4:7], v[0:1], v[0:1], v[16:19]
+; CHECK-NEXT: s_nop 5
+; CHECK-NEXT: v_cvt_f16_f32_e32 v2, v2
+; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[20:23], v[0:1], v[0:1], v[20:23]
+; CHECK-NEXT: global_store_short v[0:1], v2, off
+; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[2:5], v[26:27], v[0:1], v[4:7]
; CHECK-NEXT: buffer_wbl2 sc0 sc1
; CHECK-NEXT: s_waitcnt vmcnt(0)
; CHECK-NEXT: buffer_inv sc0 sc1
-; CHECK-NEXT: global_store_short v[2:3], v0, off
+; CHECK-NEXT: global_store_short v[0:1], v24, off
; CHECK-NEXT: buffer_wbl2 sc0 sc1
; CHECK-NEXT: s_waitcnt vmcnt(0)
; CHECK-NEXT: buffer_inv sc0 sc1
-; CHECK-NEXT: v_cvt_f16_f32_e32 v0, v6
-; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[4:7], v[26:27], v[4:5], v[20:23]
-; CHECK-NEXT: global_store_short v[2:3], v0, off
+; CHECK-NEXT: v_cvt_f16_f32_e32 v6, v2
+; CHECK-NEXT: v_mfma_f32_16x16x16_f16 v[2:5], v[28:29], v[0:1], v[20:23]
+; 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: s_nop 2
-; CHECK-NEXT: v_cvt_f16_f32_e32 v1, v4
-; CHECK-NEXT: global_store_short v[2:3], v1, off
+; CHECK-NEXT: v_cvt_f16_f32_e32 v2, v2
+; CHECK-NEXT: global_store_short v[0:1], v2, off
; CHECK-NEXT: s_endpgm
entry:
%k0 = call <4 x float> asm sideeffect "; def $0", "=s"()
diff --git a/llvm/test/CodeGen/AMDGPU/select-nsz-known-values-to-fmin-fmax.ll b/llvm/test/CodeGen/AMDGPU/select-nsz-known-values-to-fmin-fmax.ll
index 54abedf063864..a147da844868c 100644
--- a/llvm/test/CodeGen/AMDGPU/select-nsz-known-values-to-fmin-fmax.ll
+++ b/llvm/test/CodeGen/AMDGPU/select-nsz-known-values-to-fmin-fmax.ll
@@ -737,12 +737,19 @@ define <2 x double> @v_max_pat_v2f64_oge(<2 x double> nofpclass(nan) %a, <2 x do
; GFX7-NEXT: v_max_f64 v[2:3], v[2:3], v[6:7]
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
-; GFX9-LABEL: v_max_pat_v2f64_oge:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f64 v[0:1], v[0:1], v[4:5]
-; GFX9-NEXT: v_max_f64 v[2:3], v[2:3], v[6:7]
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: v_max_pat_v2f64_oge:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: v_max_f64 v[0:1], v[0:1], v[4:5]
+; GFX900-NEXT: v_max_f64 v[2:3], v[2:3], v[6:7]
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX950-LABEL: v_max_pat_v2f64_oge:
+; GFX950: ; %bb.0:
+; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX950-NEXT: v_max_f64 v[2:3], v[2:3], v[6:7]
+; GFX950-NEXT: v_max_f64 v[0:1], v[0:1], v[4:5]
+; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_max_pat_v2f64_oge:
; GFX11: ; %bb.0:
@@ -774,12 +781,19 @@ define <2 x double> @v_min_pat_v2f64_olt(<2 x double> nofpclass(nan) %a, <2 x do
; GFX7-NEXT: v_min_f64 v[2:3], v[2:3], v[6:7]
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
-; GFX9-LABEL: v_min_pat_v2f64_olt:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_min_f64 v[0:1], v[0:1], v[4:5]
-; GFX9-NEXT: v_min_f64 v[2:3], v[2:3], v[6:7]
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: v_min_pat_v2f64_olt:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: v_min_f64 v[0:1], v[0:1], v[4:5]
+; GFX900-NEXT: v_min_f64 v[2:3], v[2:3], v[6:7]
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX950-LABEL: v_min_pat_v2f64_olt:
+; GFX950: ; %bb.0:
+; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX950-NEXT: v_min_f64 v[2:3], v[2:3], v[6:7]
+; GFX950-NEXT: v_min_f64 v[0:1], v[0:1], v[4:5]
+; GFX950-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_min_pat_v2f64_olt:
; GFX11: ; %bb.0:
@@ -804,6 +818,3 @@ define <2 x double> @v_min_pat_v2f64_olt(<2 x double> nofpclass(nan) %a, <2 x do
}
attributes #0 = { nounwind }
-;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
-; GFX900: {{.*}}
-; GFX950: {{.*}}
diff --git a/llvm/test/CodeGen/AMDGPU/shl.v2i64.ll b/llvm/test/CodeGen/AMDGPU/shl.v2i64.ll
index d67292cbedb9c..53f96ecacf2f6 100644
--- a/llvm/test/CodeGen/AMDGPU/shl.v2i64.ll
+++ b/llvm/test/CodeGen/AMDGPU/shl.v2i64.ll
@@ -3,123 +3,69 @@
; RUN: llc -mtriple=amdgpu12.51 < %s | FileCheck -enable-var-scope --check-prefixes=GCN,GFX1251 %s
define amdgpu_kernel void @s_shl_v2i64(ptr addrspace(1) %out, <2 x i64> %lhs, <2 x i64> %rhs) #0 {
-; GFX1250-LABEL: s_shl_v2i64:
-; GFX1250: ; %bb.0:
-; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1 ; msbs: dst=0 src0=0 src1=0 src2=0
-; GFX1250-NEXT: s_mov_b64 s[64:65], 0
-; GFX1250-NEXT: v_nop
-; GFX1250-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
-; GFX1250-NEXT: s_clause 0x1
-; GFX1250-NEXT: s_load_b256 s[8:15], s[4:5], 0x34 nv
-; GFX1250-NEXT: s_load_b64 s[0:1], s[4:5], 0x24 nv
-; GFX1250-NEXT: s_wait_kmcnt 0x0
-; GFX1250-NEXT: s_lshl_b64 s[2:3], s[8:9], s12
-; GFX1250-NEXT: s_lshl_b64 s[4:5], s[10:11], s14
-; GFX1250-NEXT: v_dual_mov_b32 v4, 0 :: v_dual_mov_b32 v0, s2
-; GFX1250-NEXT: v_dual_mov_b32 v1, s3 :: v_dual_mov_b32 v2, s4
-; GFX1250-NEXT: v_mov_b32_e32 v3, s5
-; GFX1250-NEXT: global_store_b128 v4, v[0:3], s[0:1]
-; GFX1250-NEXT: s_endpgm
-;
-; GFX1251-LABEL: s_shl_v2i64:
-; GFX1251: ; %bb.0:
-; GFX1251-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1 ; msbs: dst=0 src0=0 src1=0 src2=0
-; GFX1251-NEXT: s_mov_b64 s[64:65], 0
-; GFX1251-NEXT: v_nop
-; GFX1251-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
-; GFX1251-NEXT: s_clause 0x1
-; GFX1251-NEXT: s_load_b256 s[8:15], s[4:5], 0x34 nv
-; GFX1251-NEXT: s_load_b64 s[0:1], s[4:5], 0x24 nv
-; GFX1251-NEXT: v_mov_b32_e32 v4, 0
-; GFX1251-NEXT: s_wait_kmcnt 0x0
-; GFX1251-NEXT: s_lshl_b64 s[2:3], s[8:9], s12
-; GFX1251-NEXT: s_lshl_b64 s[4:5], s[10:11], s14
-; GFX1251-NEXT: v_mov_b64_e32 v[0:1], s[2:3]
-; GFX1251-NEXT: v_mov_b64_e32 v[2:3], s[4:5]
-; GFX1251-NEXT: global_store_b128 v4, v[0:3], s[0:1]
-; GFX1251-NEXT: s_endpgm
+; GCN-LABEL: s_shl_v2i64:
+; GCN: ; %bb.0:
+; GCN-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1 ; msbs: dst=0 src0=0 src1=0 src2=0
+; GCN-NEXT: s_mov_b64 s[64:65], 0
+; GCN-NEXT: v_nop
+; GCN-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
+; GCN-NEXT: s_clause 0x1
+; GCN-NEXT: s_load_b256 s[8:15], s[4:5], 0x34 nv
+; GCN-NEXT: s_load_b64 s[0:1], s[4:5], 0x24 nv
+; GCN-NEXT: v_mov_b32_e32 v4, 0
+; GCN-NEXT: s_wait_kmcnt 0x0
+; GCN-NEXT: s_lshl_b64 s[2:3], s[8:9], s12
+; GCN-NEXT: s_lshl_b64 s[4:5], s[10:11], s14
+; GCN-NEXT: v_mov_b64_e32 v[0:1], s[2:3]
+; GCN-NEXT: v_mov_b64_e32 v[2:3], s[4:5]
+; GCN-NEXT: global_store_b128 v4, v[0:3], s[0:1]
+; GCN-NEXT: s_endpgm
%result = shl <2 x i64> %lhs, %rhs
store <2 x i64> %result, ptr addrspace(1) %out
ret void
}
define amdgpu_kernel void @s_shl_v2i64_s_imm(ptr addrspace(1) %out, <2 x i64> %lhs) #0 {
-; GFX1250-LABEL: s_shl_v2i64_s_imm:
-; GFX1250: ; %bb.0:
-; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1 ; msbs: dst=0 src0=0 src1=0 src2=0
-; GFX1250-NEXT: s_mov_b64 s[64:65], 0
-; GFX1250-NEXT: v_nop
-; GFX1250-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
-; GFX1250-NEXT: s_clause 0x1
-; GFX1250-NEXT: s_load_b128 s[0:3], s[4:5], 0x34 nv
-; GFX1250-NEXT: s_load_b64 s[6:7], s[4:5], 0x24 nv
-; GFX1250-NEXT: s_wait_kmcnt 0x0
-; GFX1250-NEXT: s_lshl_b64 s[0:1], s[0:1], 1
-; GFX1250-NEXT: s_lshl_b64 s[2:3], s[2:3], 2
-; GFX1250-NEXT: v_dual_mov_b32 v4, 0 :: v_dual_mov_b32 v0, s0
-; GFX1250-NEXT: v_dual_mov_b32 v1, s1 :: v_dual_mov_b32 v2, s2
-; GFX1250-NEXT: v_mov_b32_e32 v3, s3
-; GFX1250-NEXT: global_store_b128 v4, v[0:3], s[6:7]
-; GFX1250-NEXT: s_endpgm
-;
-; GFX1251-LABEL: s_shl_v2i64_s_imm:
-; GFX1251: ; %bb.0:
-; GFX1251-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1 ; msbs: dst=0 src0=0 src1=0 src2=0
-; GFX1251-NEXT: s_mov_b64 s[64:65], 0
-; GFX1251-NEXT: v_nop
-; GFX1251-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
-; GFX1251-NEXT: s_clause 0x1
-; GFX1251-NEXT: s_load_b128 s[0:3], s[4:5], 0x34 nv
-; GFX1251-NEXT: s_load_b64 s[6:7], s[4:5], 0x24 nv
-; GFX1251-NEXT: v_mov_b32_e32 v4, 0
-; GFX1251-NEXT: s_wait_kmcnt 0x0
-; GFX1251-NEXT: s_lshl_b64 s[0:1], s[0:1], 1
-; GFX1251-NEXT: s_lshl_b64 s[2:3], s[2:3], 2
-; GFX1251-NEXT: v_mov_b64_e32 v[0:1], s[0:1]
-; GFX1251-NEXT: v_mov_b64_e32 v[2:3], s[2:3]
-; GFX1251-NEXT: global_store_b128 v4, v[0:3], s[6:7]
-; GFX1251-NEXT: s_endpgm
+; GCN-LABEL: s_shl_v2i64_s_imm:
+; GCN: ; %bb.0:
+; GCN-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1 ; msbs: dst=0 src0=0 src1=0 src2=0
+; GCN-NEXT: s_mov_b64 s[64:65], 0
+; GCN-NEXT: v_nop
+; GCN-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
+; GCN-NEXT: s_clause 0x1
+; GCN-NEXT: s_load_b128 s[0:3], s[4:5], 0x34 nv
+; GCN-NEXT: s_load_b64 s[6:7], s[4:5], 0x24 nv
+; GCN-NEXT: v_mov_b32_e32 v4, 0
+; GCN-NEXT: s_wait_kmcnt 0x0
+; GCN-NEXT: s_lshl_b64 s[0:1], s[0:1], 1
+; GCN-NEXT: s_lshl_b64 s[2:3], s[2:3], 2
+; GCN-NEXT: v_mov_b64_e32 v[0:1], s[0:1]
+; GCN-NEXT: v_mov_b64_e32 v[2:3], s[2:3]
+; GCN-NEXT: global_store_b128 v4, v[0:3], s[6:7]
+; GCN-NEXT: s_endpgm
%result = shl <2 x i64> %lhs, <i64 1, i64 2>
store <2 x i64> %result, ptr addrspace(1) %out
ret void
}
define amdgpu_kernel void @s_shl_v2i64_imm_s(ptr addrspace(1) %out, <2 x i64> %rhs) #0 {
-; GFX1250-LABEL: s_shl_v2i64_imm_s:
-; GFX1250: ; %bb.0:
-; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1 ; msbs: dst=0 src0=0 src1=0 src2=0
-; GFX1250-NEXT: s_mov_b64 s[64:65], 0
-; GFX1250-NEXT: v_nop
-; GFX1250-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
-; GFX1250-NEXT: s_clause 0x1
-; GFX1250-NEXT: s_load_b128 s[0:3], s[4:5], 0x34 nv
-; GFX1250-NEXT: s_load_b64 s[6:7], s[4:5], 0x24 nv
-; GFX1250-NEXT: s_wait_kmcnt 0x0
-; GFX1250-NEXT: s_lshl_b64 s[0:1], 0x4d2, s0
-; GFX1250-NEXT: s_lshl_b64 s[2:3], 0x162e, s2
-; GFX1250-NEXT: v_dual_mov_b32 v4, 0 :: v_dual_mov_b32 v0, s0
-; GFX1250-NEXT: v_dual_mov_b32 v1, s1 :: v_dual_mov_b32 v2, s2
-; GFX1250-NEXT: v_mov_b32_e32 v3, s3
-; GFX1250-NEXT: global_store_b128 v4, v[0:3], s[6:7]
-; GFX1250-NEXT: s_endpgm
-;
-; GFX1251-LABEL: s_shl_v2i64_imm_s:
-; GFX1251: ; %bb.0:
-; GFX1251-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1 ; msbs: dst=0 src0=0 src1=0 src2=0
-; GFX1251-NEXT: s_mov_b64 s[64:65], 0
-; GFX1251-NEXT: v_nop
-; GFX1251-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
-; GFX1251-NEXT: s_clause 0x1
-; GFX1251-NEXT: s_load_b128 s[0:3], s[4:5], 0x34 nv
-; GFX1251-NEXT: s_load_b64 s[6:7], s[4:5], 0x24 nv
-; GFX1251-NEXT: v_mov_b32_e32 v4, 0
-; GFX1251-NEXT: s_wait_kmcnt 0x0
-; GFX1251-NEXT: s_lshl_b64 s[0:1], 0x4d2, s0
-; GFX1251-NEXT: s_lshl_b64 s[2:3], 0x162e, s2
-; GFX1251-NEXT: v_mov_b64_e32 v[0:1], s[0:1]
-; GFX1251-NEXT: v_mov_b64_e32 v[2:3], s[2:3]
-; GFX1251-NEXT: global_store_b128 v4, v[0:3], s[6:7]
-; GFX1251-NEXT: s_endpgm
+; GCN-LABEL: s_shl_v2i64_imm_s:
+; GCN: ; %bb.0:
+; GCN-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1 ; msbs: dst=0 src0=0 src1=0 src2=0
+; GCN-NEXT: s_mov_b64 s[64:65], 0
+; GCN-NEXT: v_nop
+; GCN-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
+; GCN-NEXT: s_clause 0x1
+; GCN-NEXT: s_load_b128 s[0:3], s[4:5], 0x34 nv
+; GCN-NEXT: s_load_b64 s[6:7], s[4:5], 0x24 nv
+; GCN-NEXT: v_mov_b32_e32 v4, 0
+; GCN-NEXT: s_wait_kmcnt 0x0
+; GCN-NEXT: s_lshl_b64 s[0:1], 0x4d2, s0
+; GCN-NEXT: s_lshl_b64 s[2:3], 0x162e, s2
+; GCN-NEXT: v_mov_b64_e32 v[0:1], s[0:1]
+; GCN-NEXT: v_mov_b64_e32 v[2:3], s[2:3]
+; GCN-NEXT: global_store_b128 v4, v[0:3], s[6:7]
+; GCN-NEXT: s_endpgm
%result = shl <2 x i64> <i64 1234, i64 5678>, %rhs
store <2 x i64> %result, ptr addrspace(1) %out
ret void
@@ -272,16 +218,16 @@ define amdgpu_kernel void @v_shl_v4i64(ptr addrspace(1) %out, ptr addrspace(1) %
; GCN-NEXT: v_lshlrev_b32_e32 v16, 5, v0
; GCN-NEXT: s_wait_kmcnt 0x0
; GCN-NEXT: s_clause 0x3
-; GCN-NEXT: global_load_b128 v[0:3], v16, s[2:3] offset:48
-; GCN-NEXT: global_load_b128 v[4:7], v16, s[2:3] offset:32
-; GCN-NEXT: global_load_b128 v[8:11], v16, s[2:3]
-; GCN-NEXT: global_load_b128 v[12:15], v16, s[2:3] offset:16
-; GCN-NEXT: s_wait_loadcnt 0x1
-; GCN-NEXT: v_lshlrev_b64_e32 v[6:7], v6, v[10:11]
+; GCN-NEXT: global_load_b128 v[0:3], v16, s[2:3] offset:16
+; GCN-NEXT: global_load_b128 v[4:7], v16, s[2:3] offset:48
+; GCN-NEXT: global_load_b128 v[8:11], v16, s[2:3] offset:32
+; GCN-NEXT: global_load_b128 v[12:15], v16, s[2:3]
+; GCN-NEXT: s_wait_loadcnt 0x2
+; GCN-NEXT: v_lshlrev_b64_e32 v[2:3], v6, v[2:3]
+; GCN-NEXT: v_lshlrev_b64_e32 v[0:1], v4, v[0:1]
; GCN-NEXT: s_wait_loadcnt 0x0
-; GCN-NEXT: v_lshlrev_b64_e32 v[2:3], v2, v[14:15]
-; GCN-NEXT: v_lshlrev_b64_e32 v[0:1], v0, v[12:13]
-; GCN-NEXT: v_lshlrev_b64_e32 v[4:5], v4, v[8:9]
+; GCN-NEXT: v_lshlrev_b64_e32 v[6:7], v10, v[14:15]
+; GCN-NEXT: v_lshlrev_b64_e32 v[4:5], v8, v[12:13]
; GCN-NEXT: s_clause 0x1
; GCN-NEXT: global_store_b128 v16, v[0:3], s[0:1] offset:16
; GCN-NEXT: global_store_b128 v16, v[4:7], s[0:1]
@@ -311,17 +257,17 @@ define amdgpu_kernel void @shl_v_imm_v4i64(ptr addrspace(1) %out, ptr addrspace(
; GCN-NEXT: v_lshlrev_b32_e32 v8, 5, v0
; GCN-NEXT: s_wait_kmcnt 0x0
; GCN-NEXT: s_clause 0x1
-; GCN-NEXT: global_load_b128 v[0:3], v8, s[2:3]
-; GCN-NEXT: global_load_b128 v[4:7], v8, s[2:3] offset:16
+; GCN-NEXT: global_load_b128 v[0:3], v8, s[2:3] offset:16
+; GCN-NEXT: global_load_b128 v[4:7], v8, s[2:3]
; GCN-NEXT: s_wait_loadcnt 0x1
; GCN-NEXT: v_lshlrev_b64_e32 v[2:3], 8, v[2:3]
+; GCN-NEXT: v_lshlrev_b64_e32 v[0:1], 8, v[0:1]
; GCN-NEXT: s_wait_loadcnt 0x0
; GCN-NEXT: v_lshlrev_b64_e32 v[6:7], 8, v[6:7]
; GCN-NEXT: v_lshlrev_b64_e32 v[4:5], 8, v[4:5]
-; GCN-NEXT: v_lshlrev_b64_e32 v[0:1], 8, v[0:1]
; GCN-NEXT: s_clause 0x1
-; GCN-NEXT: global_store_b128 v8, v[4:7], s[0:1] offset:16
-; GCN-NEXT: global_store_b128 v8, v[0:3], s[0:1]
+; GCN-NEXT: global_store_b128 v8, v[0:3], s[0:1] offset:16
+; GCN-NEXT: global_store_b128 v8, v[4:7], s[0:1]
; GCN-NEXT: s_endpgm
%tid = call i32 @llvm.amdgcn.workitem.id.x()
%tid.ext = sext i32 %tid to i64
@@ -334,44 +280,83 @@ define amdgpu_kernel void @shl_v_imm_v4i64(ptr addrspace(1) %out, ptr addrspace(
}
define amdgpu_kernel void @v_shl_v8i64(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {
-; GCN-LABEL: v_shl_v8i64:
-; GCN: ; %bb.0:
-; GCN-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1 ; msbs: dst=0 src0=0 src1=0 src2=0
-; GCN-NEXT: s_mov_b64 s[64:65], 0
-; GCN-NEXT: v_nop
-; GCN-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
-; GCN-NEXT: s_load_b128 s[0:3], s[4:5], 0x24 nv
-; GCN-NEXT: v_and_b32_e32 v0, 0x3ff, v0
-; GCN-NEXT: s_delay_alu instid0(VALU_DEP_1)
-; GCN-NEXT: v_lshlrev_b32_e32 v32, 6, v0
-; GCN-NEXT: s_wait_kmcnt 0x0
-; GCN-NEXT: s_clause 0x7
-; GCN-NEXT: global_load_b128 v[0:3], v32, s[2:3]
-; GCN-NEXT: global_load_b128 v[4:7], v32, s[2:3] offset:16
-; GCN-NEXT: global_load_b128 v[8:11], v32, s[2:3] offset:64
-; GCN-NEXT: global_load_b128 v[12:15], v32, s[2:3] offset:80
-; GCN-NEXT: global_load_b128 v[16:19], v32, s[2:3] offset:32
-; GCN-NEXT: global_load_b128 v[20:23], v32, s[2:3] offset:48
-; GCN-NEXT: global_load_b128 v[24:27], v32, s[2:3] offset:112
-; GCN-NEXT: global_load_b128 v[28:31], v32, s[2:3] offset:96
-; GCN-NEXT: s_wait_loadcnt 0x5
-; GCN-NEXT: v_lshlrev_b64_e32 v[2:3], v10, v[2:3]
-; GCN-NEXT: v_lshlrev_b64_e32 v[0:1], v8, v[0:1]
-; GCN-NEXT: s_wait_loadcnt 0x4
-; GCN-NEXT: v_lshlrev_b64_e32 v[6:7], v14, v[6:7]
-; GCN-NEXT: v_lshlrev_b64_e32 v[4:5], v12, v[4:5]
-; GCN-NEXT: s_wait_loadcnt 0x1
-; GCN-NEXT: v_lshlrev_b64_e32 v[22:23], v26, v[22:23]
-; GCN-NEXT: s_wait_loadcnt 0x0
-; GCN-NEXT: v_lshlrev_b64_e32 v[18:19], v30, v[18:19]
-; GCN-NEXT: v_lshlrev_b64_e32 v[16:17], v28, v[16:17]
-; GCN-NEXT: v_lshlrev_b64_e32 v[20:21], v24, v[20:21]
-; GCN-NEXT: s_clause 0x3
-; GCN-NEXT: global_store_b128 v32, v[16:19], s[0:1] offset:32
-; GCN-NEXT: global_store_b128 v32, v[20:23], s[0:1] offset:48
-; GCN-NEXT: global_store_b128 v32, v[0:3], s[0:1]
-; GCN-NEXT: global_store_b128 v32, v[4:7], s[0:1] offset:16
-; GCN-NEXT: s_endpgm
+; GFX1250-LABEL: v_shl_v8i64:
+; GFX1250: ; %bb.0:
+; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1 ; msbs: dst=0 src0=0 src1=0 src2=0
+; GFX1250-NEXT: s_mov_b64 s[64:65], 0
+; GFX1250-NEXT: v_nop
+; GFX1250-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
+; GFX1250-NEXT: s_load_b128 s[0:3], s[4:5], 0x24 nv
+; GFX1250-NEXT: v_and_b32_e32 v0, 0x3ff, v0
+; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX1250-NEXT: v_lshlrev_b32_e32 v32, 6, v0
+; GFX1250-NEXT: s_wait_kmcnt 0x0
+; GFX1250-NEXT: s_clause 0x7
+; GFX1250-NEXT: global_load_b128 v[0:3], v32, s[2:3] offset:32
+; GFX1250-NEXT: global_load_b128 v[4:7], v32, s[2:3] offset:48
+; GFX1250-NEXT: global_load_b128 v[8:11], v32, s[2:3] offset:112
+; GFX1250-NEXT: global_load_b128 v[12:15], v32, s[2:3] offset:96
+; GFX1250-NEXT: global_load_b128 v[16:19], v32, s[2:3]
+; GFX1250-NEXT: global_load_b128 v[20:23], v32, s[2:3] offset:16
+; GFX1250-NEXT: global_load_b128 v[24:27], v32, s[2:3] offset:80
+; GFX1250-NEXT: global_load_b128 v[28:31], v32, s[2:3] offset:64
+; GFX1250-NEXT: s_wait_loadcnt 0x5
+; GFX1250-NEXT: v_lshlrev_b64_e32 v[6:7], v10, v[6:7]
+; GFX1250-NEXT: s_wait_loadcnt 0x4
+; GFX1250-NEXT: v_lshlrev_b64_e32 v[2:3], v14, v[2:3]
+; GFX1250-NEXT: v_lshlrev_b64_e32 v[0:1], v12, v[0:1]
+; GFX1250-NEXT: v_lshlrev_b64_e32 v[4:5], v8, v[4:5]
+; GFX1250-NEXT: s_wait_loadcnt 0x1
+; GFX1250-NEXT: v_lshlrev_b64_e32 v[10:11], v26, v[22:23]
+; GFX1250-NEXT: s_wait_loadcnt 0x0
+; GFX1250-NEXT: v_lshlrev_b64_e32 v[14:15], v30, v[18:19]
+; GFX1250-NEXT: v_lshlrev_b64_e32 v[12:13], v28, v[16:17]
+; GFX1250-NEXT: v_lshlrev_b64_e32 v[8:9], v24, v[20:21]
+; GFX1250-NEXT: s_clause 0x3
+; GFX1250-NEXT: global_store_b128 v32, v[0:3], s[0:1] offset:32
+; GFX1250-NEXT: global_store_b128 v32, v[4:7], s[0:1] offset:48
+; GFX1250-NEXT: global_store_b128 v32, v[12:15], s[0:1]
+; GFX1250-NEXT: global_store_b128 v32, v[8:11], s[0:1] offset:16
+; GFX1250-NEXT: s_endpgm
+;
+; GFX1251-LABEL: v_shl_v8i64:
+; GFX1251: ; %bb.0:
+; GFX1251-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1 ; msbs: dst=0 src0=0 src1=0 src2=0
+; GFX1251-NEXT: s_mov_b64 s[64:65], 0
+; GFX1251-NEXT: v_nop
+; GFX1251-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
+; GFX1251-NEXT: s_load_b128 s[0:3], s[4:5], 0x24 nv
+; GFX1251-NEXT: v_and_b32_e32 v0, 0x3ff, v0
+; GFX1251-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX1251-NEXT: v_lshlrev_b32_e32 v32, 6, v0
+; GFX1251-NEXT: s_wait_kmcnt 0x0
+; GFX1251-NEXT: s_clause 0x7
+; GFX1251-NEXT: global_load_b128 v[0:3], v32, s[2:3] offset:48
+; GFX1251-NEXT: global_load_b128 v[4:7], v32, s[2:3] offset:32
+; GFX1251-NEXT: global_load_b128 v[8:11], v32, s[2:3] offset:112
+; GFX1251-NEXT: global_load_b128 v[12:15], v32, s[2:3] offset:96
+; GFX1251-NEXT: global_load_b128 v[16:19], v32, s[2:3] offset:16
+; GFX1251-NEXT: global_load_b128 v[20:23], v32, s[2:3]
+; GFX1251-NEXT: global_load_b128 v[24:27], v32, s[2:3] offset:80
+; GFX1251-NEXT: global_load_b128 v[28:31], v32, s[2:3] offset:64
+; GFX1251-NEXT: s_wait_loadcnt 0x5
+; GFX1251-NEXT: v_lshlrev_b64_e32 v[2:3], v10, v[2:3]
+; GFX1251-NEXT: s_wait_loadcnt 0x4
+; GFX1251-NEXT: v_lshlrev_b64_e32 v[6:7], v14, v[6:7]
+; GFX1251-NEXT: v_lshlrev_b64_e32 v[4:5], v12, v[4:5]
+; GFX1251-NEXT: v_lshlrev_b64_e32 v[0:1], v8, v[0:1]
+; GFX1251-NEXT: s_wait_loadcnt 0x1
+; GFX1251-NEXT: v_lshlrev_b64_e32 v[10:11], v26, v[18:19]
+; GFX1251-NEXT: s_wait_loadcnt 0x0
+; GFX1251-NEXT: v_lshlrev_b64_e32 v[14:15], v30, v[22:23]
+; GFX1251-NEXT: v_lshlrev_b64_e32 v[12:13], v28, v[20:21]
+; GFX1251-NEXT: v_lshlrev_b64_e32 v[8:9], v24, v[16:17]
+; GFX1251-NEXT: s_clause 0x3
+; GFX1251-NEXT: global_store_b128 v32, v[4:7], s[0:1] offset:32
+; GFX1251-NEXT: global_store_b128 v32, v[0:3], s[0:1] offset:48
+; GFX1251-NEXT: global_store_b128 v32, v[12:15], s[0:1]
+; GFX1251-NEXT: global_store_b128 v32, v[8:11], s[0:1] offset:16
+; GFX1251-NEXT: s_endpgm
%tid = call i32 @llvm.amdgcn.workitem.id.x()
%tid.ext = sext i32 %tid to i64
%in.gep = getelementptr inbounds <8 x i64>, ptr addrspace(1) %in, i64 %tid.ext
@@ -394,58 +379,59 @@ define amdgpu_kernel void @v_shl_v16i64(ptr addrspace(1) %out, ptr addrspace(1)
; GFX1250-NEXT: s_load_b128 s[0:3], s[4:5], 0x24 nv
; GFX1250-NEXT: v_and_b32_e32 v0, 0x3ff, v0
; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)
-; GFX1250-NEXT: v_lshlrev_b32_e32 v56, 7, v0
+; GFX1250-NEXT: v_lshlrev_b32_e32 v52, 7, v0
; GFX1250-NEXT: s_wait_kmcnt 0x0
-; GFX1250-NEXT: s_clause 0xd
-; GFX1250-NEXT: global_load_b128 v[0:3], v56, s[2:3] offset:144
-; GFX1250-NEXT: global_load_b128 v[4:7], v56, s[2:3] offset:16
-; GFX1250-NEXT: global_load_b128 v[8:11], v56, s[2:3]
-; GFX1250-NEXT: global_load_b128 v[12:15], v56, s[2:3] offset:128
-; GFX1250-NEXT: global_load_b128 v[16:19], v56, s[2:3] offset:64
-; GFX1250-NEXT: global_load_b128 v[20:23], v56, s[2:3] offset:192
-; GFX1250-NEXT: global_load_b128 v[24:27], v56, s[2:3] offset:96
-; GFX1250-NEXT: global_load_b128 v[28:31], v56, s[2:3] offset:112
-; GFX1250-NEXT: global_load_b128 v[32:35], v56, s[2:3] offset:80
-; GFX1250-NEXT: global_load_b128 v[36:39], v56, s[2:3] offset:32
-; GFX1250-NEXT: global_load_b128 v[40:43], v56, s[2:3] offset:48
-; GFX1250-NEXT: global_load_b128 v[44:47], v56, s[2:3] offset:224
-; GFX1250-NEXT: global_load_b128 v[48:51], v56, s[2:3] offset:240
-; GFX1250-NEXT: global_load_b128 v[52:55], v56, s[2:3] offset:208
-; GFX1250-NEXT: s_wait_loadcnt 0xc
+; GFX1250-NEXT: s_clause 0xb
+; GFX1250-NEXT: global_load_b128 v[0:3], v52, s[2:3] offset:240
+; GFX1250-NEXT: global_load_b128 v[4:7], v52, s[2:3] offset:112
+; GFX1250-NEXT: global_load_b128 v[8:11], v52, s[2:3] offset:96
+; GFX1250-NEXT: global_load_b128 v[12:15], v52, s[2:3] offset:224
+; GFX1250-NEXT: global_load_b128 v[16:19], v52, s[2:3] offset:208
+; GFX1250-NEXT: global_load_b128 v[20:23], v52, s[2:3] offset:80
+; GFX1250-NEXT: global_load_b128 v[24:27], v52, s[2:3] offset:64
+; GFX1250-NEXT: global_load_b128 v[28:31], v52, s[2:3] offset:192
+; GFX1250-NEXT: global_load_b128 v[32:35], v52, s[2:3]
+; GFX1250-NEXT: global_load_b128 v[36:39], v52, s[2:3] offset:16
+; GFX1250-NEXT: global_load_b128 v[40:43], v52, s[2:3] offset:32
+; GFX1250-NEXT: global_load_b128 v[44:47], v52, s[2:3] offset:48
+; GFX1250-NEXT: s_wait_loadcnt 0xa
; GFX1250-NEXT: v_lshlrev_b64_e32 v[2:3], v2, v[6:7]
; GFX1250-NEXT: v_lshlrev_b64_e32 v[0:1], v0, v[4:5]
+; GFX1250-NEXT: s_clause 0x1
+; GFX1250-NEXT: global_load_b128 v[4:7], v52, s[2:3] offset:160
+; GFX1250-NEXT: global_load_b128 v[48:51], v52, s[2:3] offset:176
; GFX1250-NEXT: s_wait_loadcnt 0xa
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[6:7], v14, v[10:11]
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[4:5], v12, v[8:9]
-; GFX1250-NEXT: global_load_b128 v[8:11], v56, s[2:3] offset:176
+; GFX1250-NEXT: v_lshlrev_b64_e32 v[10:11], v14, v[10:11]
+; GFX1250-NEXT: v_lshlrev_b64_e32 v[8:9], v12, v[8:9]
+; GFX1250-NEXT: global_load_b128 v[12:15], v52, s[2:3] offset:144
; GFX1250-NEXT: s_wait_loadcnt 0x9
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[14:15], v22, v[18:19]
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[12:13], v20, v[16:17]
-; GFX1250-NEXT: global_load_b128 v[16:19], v56, s[2:3] offset:160
-; GFX1250-NEXT: s_wait_loadcnt 0x4
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[26:27], v46, v[26:27]
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[24:25], v44, v[24:25]
+; GFX1250-NEXT: v_lshlrev_b64_e32 v[18:19], v18, v[22:23]
+; GFX1250-NEXT: v_lshlrev_b64_e32 v[16:17], v16, v[20:21]
+; GFX1250-NEXT: global_load_b128 v[20:23], v52, s[2:3] offset:128
+; GFX1250-NEXT: s_wait_loadcnt 0x8
+; GFX1250-NEXT: v_lshlrev_b64_e32 v[26:27], v30, v[26:27]
+; GFX1250-NEXT: v_lshlrev_b64_e32 v[24:25], v28, v[24:25]
; GFX1250-NEXT: s_wait_loadcnt 0x3
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[22:23], v50, v[30:31]
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[20:21], v48, v[28:29]
+; GFX1250-NEXT: v_lshlrev_b64_e32 v[6:7], v6, v[42:43]
+; GFX1250-NEXT: v_lshlrev_b64_e32 v[4:5], v4, v[40:41]
; GFX1250-NEXT: s_wait_loadcnt 0x2
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[30:31], v54, v[34:35]
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[28:29], v52, v[32:33]
+; GFX1250-NEXT: v_lshlrev_b64_e32 v[30:31], v50, v[46:47]
+; GFX1250-NEXT: v_lshlrev_b64_e32 v[28:29], v48, v[44:45]
; GFX1250-NEXT: s_wait_loadcnt 0x1
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[10:11], v10, v[42:43]
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[8:9], v8, v[40:41]
+; GFX1250-NEXT: v_lshlrev_b64_e32 v[14:15], v14, v[38:39]
+; GFX1250-NEXT: v_lshlrev_b64_e32 v[12:13], v12, v[36:37]
; GFX1250-NEXT: s_wait_loadcnt 0x0
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[18:19], v18, v[38:39]
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[16:17], v16, v[36:37]
+; GFX1250-NEXT: v_lshlrev_b64_e32 v[22:23], v22, v[34:35]
+; GFX1250-NEXT: v_lshlrev_b64_e32 v[20:21], v20, v[32:33]
; GFX1250-NEXT: s_clause 0x7
-; GFX1250-NEXT: global_store_b128 v56, v[24:27], s[0:1] offset:96
-; GFX1250-NEXT: global_store_b128 v56, v[20:23], s[0:1] offset:112
-; GFX1250-NEXT: global_store_b128 v56, v[12:15], s[0:1] offset:64
-; GFX1250-NEXT: global_store_b128 v56, v[28:31], s[0:1] offset:80
-; GFX1250-NEXT: global_store_b128 v56, v[16:19], s[0:1] offset:32
-; GFX1250-NEXT: global_store_b128 v56, v[8:11], s[0:1] offset:48
-; GFX1250-NEXT: global_store_b128 v56, v[4:7], s[0:1]
-; GFX1250-NEXT: global_store_b128 v56, v[0:3], s[0:1] offset:16
+; GFX1250-NEXT: global_store_b128 v52, v[8:11], s[0:1] offset:96
+; GFX1250-NEXT: global_store_b128 v52, v[0:3], s[0:1] offset:112
+; GFX1250-NEXT: global_store_b128 v52, v[24:27], s[0:1] offset:64
+; GFX1250-NEXT: global_store_b128 v52, v[16:19], s[0:1] offset:80
+; GFX1250-NEXT: global_store_b128 v52, v[4:7], s[0:1] offset:32
+; GFX1250-NEXT: global_store_b128 v52, v[28:31], s[0:1] offset:48
+; GFX1250-NEXT: global_store_b128 v52, v[20:23], s[0:1]
+; GFX1250-NEXT: global_store_b128 v52, v[12:15], s[0:1] offset:16
; GFX1250-NEXT: s_endpgm
;
; GFX1251-LABEL: v_shl_v16i64:
@@ -460,57 +446,56 @@ define amdgpu_kernel void @v_shl_v16i64(ptr addrspace(1) %out, ptr addrspace(1)
; GFX1251-NEXT: v_lshlrev_b32_e32 v52, 7, v0
; GFX1251-NEXT: s_wait_kmcnt 0x0
; GFX1251-NEXT: s_clause 0xb
-; GFX1251-NEXT: global_load_b128 v[0:3], v52, s[2:3] offset:144
-; GFX1251-NEXT: global_load_b128 v[4:7], v52, s[2:3] offset:16
-; GFX1251-NEXT: global_load_b128 v[8:11], v52, s[2:3]
-; GFX1251-NEXT: global_load_b128 v[12:15], v52, s[2:3] offset:128
-; GFX1251-NEXT: global_load_b128 v[16:19], v52, s[2:3] offset:176
-; GFX1251-NEXT: global_load_b128 v[20:23], v52, s[2:3] offset:48
-; GFX1251-NEXT: global_load_b128 v[24:27], v52, s[2:3] offset:32
-; GFX1251-NEXT: global_load_b128 v[28:31], v52, s[2:3] offset:160
-; GFX1251-NEXT: global_load_b128 v[32:35], v52, s[2:3] offset:96
-; GFX1251-NEXT: global_load_b128 v[36:39], v52, s[2:3] offset:112
+; GFX1251-NEXT: global_load_b128 v[0:3], v52, s[2:3] offset:240
+; GFX1251-NEXT: global_load_b128 v[4:7], v52, s[2:3] offset:112
+; GFX1251-NEXT: global_load_b128 v[8:11], v52, s[2:3] offset:96
+; GFX1251-NEXT: global_load_b128 v[12:15], v52, s[2:3] offset:224
+; GFX1251-NEXT: global_load_b128 v[16:19], v52, s[2:3] offset:80
+; GFX1251-NEXT: global_load_b128 v[20:23], v52, s[2:3] offset:208
+; GFX1251-NEXT: global_load_b128 v[24:27], v52, s[2:3] offset:48
+; GFX1251-NEXT: global_load_b128 v[28:31], v52, s[2:3] offset:32
+; GFX1251-NEXT: global_load_b128 v[32:35], v52, s[2:3] offset:16
+; GFX1251-NEXT: global_load_b128 v[36:39], v52, s[2:3]
; GFX1251-NEXT: global_load_b128 v[40:43], v52, s[2:3] offset:64
-; GFX1251-NEXT: global_load_b128 v[44:47], v52, s[2:3] offset:80
+; GFX1251-NEXT: global_load_b128 v[44:47], v52, s[2:3] offset:192
; GFX1251-NEXT: s_wait_loadcnt 0xa
; GFX1251-NEXT: v_lshlrev_b64_e32 v[2:3], v2, v[6:7]
; GFX1251-NEXT: v_lshlrev_b64_e32 v[0:1], v0, v[4:5]
; GFX1251-NEXT: s_clause 0x1
-; GFX1251-NEXT: global_load_b128 v[4:7], v52, s[2:3] offset:224
-; GFX1251-NEXT: global_load_b128 v[48:51], v52, s[2:3] offset:240
+; GFX1251-NEXT: global_load_b128 v[4:7], v52, s[2:3] offset:176
+; GFX1251-NEXT: global_load_b128 v[48:51], v52, s[2:3] offset:160
; GFX1251-NEXT: s_wait_loadcnt 0xa
; GFX1251-NEXT: v_lshlrev_b64_e32 v[10:11], v14, v[10:11]
; GFX1251-NEXT: v_lshlrev_b64_e32 v[8:9], v12, v[8:9]
-; GFX1251-NEXT: s_wait_loadcnt 0x8
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[14:15], v18, v[22:23]
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[12:13], v16, v[20:21]
-; GFX1251-NEXT: s_clause 0x1
-; GFX1251-NEXT: global_load_b128 v[16:19], v52, s[2:3] offset:208
-; GFX1251-NEXT: global_load_b128 v[20:23], v52, s[2:3] offset:192
-; GFX1251-NEXT: s_wait_loadcnt 0x8
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[26:27], v30, v[26:27]
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[24:25], v28, v[24:25]
+; GFX1251-NEXT: global_load_b128 v[12:15], v52, s[2:3] offset:144
+; GFX1251-NEXT: s_wait_loadcnt 0x9
+; GFX1251-NEXT: v_lshlrev_b64_e32 v[18:19], v22, v[18:19]
+; GFX1251-NEXT: v_lshlrev_b64_e32 v[16:17], v20, v[16:17]
+; GFX1251-NEXT: global_load_b128 v[20:23], v52, s[2:3] offset:128
+; GFX1251-NEXT: s_wait_loadcnt 0x4
+; GFX1251-NEXT: v_lshlrev_b64_e32 v[42:43], v46, v[42:43]
+; GFX1251-NEXT: v_lshlrev_b64_e32 v[40:41], v44, v[40:41]
; GFX1251-NEXT: s_wait_loadcnt 0x3
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[6:7], v6, v[34:35]
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[4:5], v4, v[32:33]
+; GFX1251-NEXT: v_lshlrev_b64_e32 v[6:7], v6, v[26:27]
+; GFX1251-NEXT: v_lshlrev_b64_e32 v[4:5], v4, v[24:25]
; GFX1251-NEXT: s_wait_loadcnt 0x2
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[38:39], v50, v[38:39]
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[36:37], v48, v[36:37]
+; GFX1251-NEXT: v_lshlrev_b64_e32 v[26:27], v50, v[30:31]
+; GFX1251-NEXT: v_lshlrev_b64_e32 v[24:25], v48, v[28:29]
; GFX1251-NEXT: s_wait_loadcnt 0x1
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[18:19], v18, v[46:47]
+; GFX1251-NEXT: v_lshlrev_b64_e32 v[14:15], v14, v[34:35]
+; GFX1251-NEXT: v_lshlrev_b64_e32 v[12:13], v12, v[32:33]
; GFX1251-NEXT: s_wait_loadcnt 0x0
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[22:23], v22, v[42:43]
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[20:21], v20, v[40:41]
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[16:17], v16, v[44:45]
+; GFX1251-NEXT: v_lshlrev_b64_e32 v[22:23], v22, v[38:39]
+; GFX1251-NEXT: v_lshlrev_b64_e32 v[20:21], v20, v[36:37]
; GFX1251-NEXT: s_clause 0x7
-; GFX1251-NEXT: global_store_b128 v52, v[4:7], s[0:1] offset:96
-; GFX1251-NEXT: global_store_b128 v52, v[36:39], s[0:1] offset:112
-; GFX1251-NEXT: global_store_b128 v52, v[20:23], s[0:1] offset:64
+; GFX1251-NEXT: global_store_b128 v52, v[8:11], s[0:1] offset:96
+; GFX1251-NEXT: global_store_b128 v52, v[0:3], s[0:1] offset:112
+; GFX1251-NEXT: global_store_b128 v52, v[40:43], s[0:1] offset:64
; GFX1251-NEXT: global_store_b128 v52, v[16:19], s[0:1] offset:80
; GFX1251-NEXT: global_store_b128 v52, v[24:27], s[0:1] offset:32
-; GFX1251-NEXT: global_store_b128 v52, v[12:15], s[0:1] offset:48
-; GFX1251-NEXT: global_store_b128 v52, v[8:11], s[0:1]
-; GFX1251-NEXT: global_store_b128 v52, v[0:3], s[0:1] offset:16
+; GFX1251-NEXT: global_store_b128 v52, v[4:7], s[0:1] offset:48
+; GFX1251-NEXT: global_store_b128 v52, v[20:23], s[0:1]
+; GFX1251-NEXT: global_store_b128 v52, v[12:15], s[0:1] offset:16
; GFX1251-NEXT: s_endpgm
%tid = call i32 @llvm.amdgcn.workitem.id.x()
%tid.ext = sext i32 %tid to i64
@@ -525,235 +510,121 @@ define amdgpu_kernel void @v_shl_v16i64(ptr addrspace(1) %out, ptr addrspace(1)
}
define amdgpu_kernel void @v_shl_v32i64(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {
-; GFX1250-LABEL: v_shl_v32i64:
-; GFX1250: ; %bb.0:
-; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1 ; msbs: dst=0 src0=0 src1=0 src2=0
-; GFX1250-NEXT: s_mov_b64 s[64:65], 0
-; GFX1250-NEXT: v_nop
-; GFX1250-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
-; GFX1250-NEXT: s_load_b128 s[0:3], s[4:5], 0x24 nv
-; GFX1250-NEXT: v_and_b32_e32 v0, 0x3ff, v0
-; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)
-; GFX1250-NEXT: v_lshlrev_b32_e32 v64, 8, v0
-; GFX1250-NEXT: s_wait_kmcnt 0x0
-; GFX1250-NEXT: s_clause 0x11
-; GFX1250-NEXT: global_load_b128 v[0:3], v64, s[2:3] offset:400
-; GFX1250-NEXT: global_load_b128 v[4:7], v64, s[2:3] offset:144
-; GFX1250-NEXT: global_load_b128 v[8:11], v64, s[2:3] offset:128
-; GFX1250-NEXT: global_load_b128 v[12:15], v64, s[2:3] offset:384
-; GFX1250-NEXT: global_load_b128 v[40:43], v64, s[2:3] offset:432
-; GFX1250-NEXT: global_load_b128 v[56:59], v64, s[2:3] offset:176
-; GFX1250-NEXT: global_load_b128 v[66:69], v64, s[2:3] offset:160
-; GFX1250-NEXT: global_load_b128 v[70:73], v64, s[2:3] offset:416
-; GFX1250-NEXT: global_load_b128 v[16:19], v64, s[2:3] offset:464
-; GFX1250-NEXT: global_load_b128 v[52:55], v64, s[2:3] offset:208
-; GFX1250-NEXT: global_load_b128 v[20:23], v64, s[2:3] offset:192
-; GFX1250-NEXT: global_load_b128 v[24:27], v64, s[2:3] offset:448
-; GFX1250-NEXT: global_load_b128 v[44:47], v64, s[2:3] offset:496
-; GFX1250-NEXT: global_load_b128 v[48:51], v64, s[2:3] offset:240
-; GFX1250-NEXT: global_load_b128 v[28:31], v64, s[2:3] offset:224
-; GFX1250-NEXT: global_load_b128 v[60:63], v64, s[2:3] offset:480
-; GFX1250-NEXT: global_load_b128 v[32:35], v64, s[2:3] offset:16
-; GFX1250-NEXT: global_load_b128 v[36:39], v64, s[2:3]
-; GFX1250-NEXT: s_wait_loadcnt 0x10
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[2:3], v2, v[6:7]
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[0:1], v0, v[4:5]
-; GFX1250-NEXT: s_wait_loadcnt 0xe
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[6:7], v14, v[10:11]
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[4:5], v12, v[8:9]
-; GFX1250-NEXT: s_wait_loadcnt 0xc
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[10:11], v42, v[58:59]
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[8:9], v40, v[56:57]
-; GFX1250-NEXT: s_clause 0x1
-; GFX1250-NEXT: global_load_b128 v[40:43], v64, s[2:3] offset:272
-; GFX1250-NEXT: global_load_b128 v[56:59], v64, s[2:3] offset:256
-; GFX1250-NEXT: s_wait_loadcnt 0xc
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[14:15], v72, v[68:69]
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[12:13], v70, v[66:67]
-; GFX1250-NEXT: global_load_b128 v[66:69], v64, s[2:3] offset:32
-; GFX1250-NEXT: s_wait_loadcnt 0xb
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[18:19], v18, v[54:55]
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[16:17], v16, v[52:53]
-; GFX1250-NEXT: global_load_b128 v[52:55], v64, s[2:3] offset:288
-; GFX1250-NEXT: s_wait_loadcnt 0xa
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[22:23], v26, v[22:23]
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[20:21], v24, v[20:21]
-; GFX1250-NEXT: global_load_b128 v[70:73], v64, s[2:3] offset:320
-; GFX1250-NEXT: s_wait_loadcnt 0x9
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[26:27], v46, v[50:51]
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[24:25], v44, v[48:49]
-; GFX1250-NEXT: s_clause 0x1
-; GFX1250-NEXT: global_load_b128 v[44:47], v64, s[2:3] offset:64
-; GFX1250-NEXT: global_load_b128 v[48:51], v64, s[2:3] offset:80
-; GFX1250-NEXT: s_wait_loadcnt 0x9
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[30:31], v62, v[30:31]
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[28:29], v60, v[28:29]
-; GFX1250-NEXT: global_load_b128 v[60:63], v64, s[2:3] offset:336
-; GFX1250-NEXT: s_wait_loadcnt 0x7
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[34:35], v42, v[34:35]
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[32:33], v40, v[32:33]
-; GFX1250-NEXT: global_load_b128 v[40:43], v64, s[2:3] offset:48
-; GFX1250-NEXT: s_wait_loadcnt 0x7
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[38:39], v58, v[38:39]
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[36:37], v56, v[36:37]
-; GFX1250-NEXT: global_load_b128 v[56:59], v64, s[2:3] offset:304
-; GFX1250-NEXT: s_wait_loadcnt 0x6
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[54:55], v54, v[68:69]
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[52:53], v52, v[66:67]
-; GFX1250-NEXT: s_wait_loadcnt 0x4
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[46:47], v72, v[46:47]
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[44:45], v70, v[44:45]
-; GFX1250-NEXT: s_clause 0x3
-; GFX1250-NEXT: global_load_b128 v[66:69], v64, s[2:3] offset:352
-; GFX1250-NEXT: global_load_b128 v[70:73], v64, s[2:3] offset:96
-; GFX1250-NEXT: global_load_b128 v[74:77], v64, s[2:3] offset:112
-; GFX1250-NEXT: global_load_b128 v[78:81], v64, s[2:3] offset:368
-; GFX1250-NEXT: s_wait_loadcnt 0x6
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[50:51], v62, v[50:51]
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[48:49], v60, v[48:49]
-; GFX1250-NEXT: s_wait_loadcnt 0x4
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[42:43], v58, v[42:43]
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[40:41], v56, v[40:41]
-; GFX1250-NEXT: s_wait_loadcnt 0x2
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[68:69], v68, v[72:73]
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[66:67], v66, v[70:71]
-; GFX1250-NEXT: s_wait_loadcnt 0x0
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[72:73], v80, v[76:77]
-; GFX1250-NEXT: v_lshlrev_b64_e32 v[70:71], v78, v[74:75]
-; GFX1250-NEXT: s_clause 0xf
-; GFX1250-NEXT: global_store_b128 v64, v[66:69], s[0:1] offset:96
-; GFX1250-NEXT: global_store_b128 v64, v[70:73], s[0:1] offset:112
-; GFX1250-NEXT: global_store_b128 v64, v[44:47], s[0:1] offset:64
-; GFX1250-NEXT: global_store_b128 v64, v[48:51], s[0:1] offset:80
-; GFX1250-NEXT: global_store_b128 v64, v[52:55], s[0:1] offset:32
-; GFX1250-NEXT: global_store_b128 v64, v[40:43], s[0:1] offset:48
-; GFX1250-NEXT: global_store_b128 v64, v[36:39], s[0:1]
-; GFX1250-NEXT: global_store_b128 v64, v[32:35], s[0:1] offset:16
-; GFX1250-NEXT: global_store_b128 v64, v[28:31], s[0:1] offset:224
-; GFX1250-NEXT: global_store_b128 v64, v[24:27], s[0:1] offset:240
-; GFX1250-NEXT: global_store_b128 v64, v[20:23], s[0:1] offset:192
-; GFX1250-NEXT: global_store_b128 v64, v[16:19], s[0:1] offset:208
-; GFX1250-NEXT: global_store_b128 v64, v[12:15], s[0:1] offset:160
-; GFX1250-NEXT: global_store_b128 v64, v[8:11], s[0:1] offset:176
-; GFX1250-NEXT: global_store_b128 v64, v[4:7], s[0:1] offset:128
-; GFX1250-NEXT: global_store_b128 v64, v[0:3], s[0:1] offset:144
-; GFX1250-NEXT: s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
-; GFX1250-NEXT: s_endpgm
-;
-; GFX1251-LABEL: v_shl_v32i64:
-; GFX1251: ; %bb.0:
-; GFX1251-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1 ; msbs: dst=0 src0=0 src1=0 src2=0
-; GFX1251-NEXT: s_mov_b64 s[64:65], 0
-; GFX1251-NEXT: v_nop
-; GFX1251-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
-; GFX1251-NEXT: s_load_b128 s[0:3], s[4:5], 0x24 nv
-; GFX1251-NEXT: v_and_b32_e32 v0, 0x3ff, v0
-; GFX1251-NEXT: s_delay_alu instid0(VALU_DEP_1)
-; GFX1251-NEXT: v_lshlrev_b32_e32 v40, 8, v0
-; GFX1251-NEXT: s_wait_kmcnt 0x0
-; GFX1251-NEXT: s_clause 0x12
-; GFX1251-NEXT: global_load_b128 v[0:3], v40, s[2:3] offset:400
-; GFX1251-NEXT: global_load_b128 v[4:7], v40, s[2:3] offset:144
-; GFX1251-NEXT: global_load_b128 v[8:11], v40, s[2:3] offset:128
-; GFX1251-NEXT: global_load_b128 v[12:15], v40, s[2:3] offset:384
-; GFX1251-NEXT: global_load_b128 v[32:35], v40, s[2:3] offset:432
-; GFX1251-NEXT: global_load_b128 v[42:45], v40, s[2:3] offset:176
-; GFX1251-NEXT: global_load_b128 v[46:49], v40, s[2:3] offset:160
-; GFX1251-NEXT: global_load_b128 v[50:53], v40, s[2:3] offset:416
-; GFX1251-NEXT: global_load_b128 v[16:19], v40, s[2:3] offset:464
-; GFX1251-NEXT: global_load_b128 v[28:31], v40, s[2:3] offset:208
-; GFX1251-NEXT: global_load_b128 v[20:23], v40, s[2:3] offset:192
-; GFX1251-NEXT: global_load_b128 v[24:27], v40, s[2:3] offset:448
-; GFX1251-NEXT: global_load_b128 v[54:57], v40, s[2:3] offset:496
-; GFX1251-NEXT: global_load_b128 v[58:61], v40, s[2:3] offset:240
-; GFX1251-NEXT: global_load_b128 v[62:65], v40, s[2:3] offset:224
-; GFX1251-NEXT: global_load_b128 v[66:69], v40, s[2:3] offset:480
-; GFX1251-NEXT: global_load_b128 v[70:73], v40, s[2:3] offset:16
-; GFX1251-NEXT: global_load_b128 v[36:39], v40, s[2:3]
-; GFX1251-NEXT: global_load_b128 v[74:77], v40, s[2:3] offset:80
-; GFX1251-NEXT: s_wait_loadcnt 0x11
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[2:3], v2, v[6:7]
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[0:1], v0, v[4:5]
-; GFX1251-NEXT: s_wait_loadcnt 0xf
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[6:7], v14, v[10:11]
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[4:5], v12, v[8:9]
-; GFX1251-NEXT: s_wait_loadcnt 0xd
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[10:11], v34, v[44:45]
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[8:9], v32, v[42:43]
-; GFX1251-NEXT: s_clause 0x1
-; GFX1251-NEXT: global_load_b128 v[32:35], v40, s[2:3] offset:272
-; GFX1251-NEXT: global_load_b128 v[42:45], v40, s[2:3] offset:256
-; GFX1251-NEXT: s_wait_loadcnt 0xd
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[14:15], v52, v[48:49]
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[12:13], v50, v[46:47]
-; GFX1251-NEXT: s_clause 0x1
-; GFX1251-NEXT: global_load_b128 v[46:49], v40, s[2:3] offset:48
-; GFX1251-NEXT: global_load_b128 v[50:53], v40, s[2:3] offset:304
-; GFX1251-NEXT: s_wait_loadcnt 0xb
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[22:23], v26, v[22:23]
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[20:21], v24, v[20:21]
-; GFX1251-NEXT: s_wait_loadcnt 0x9
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[26:27], v56, v[60:61]
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[24:25], v54, v[58:59]
-; GFX1251-NEXT: global_load_b128 v[54:57], v40, s[2:3] offset:336
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[18:19], v18, v[30:31]
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[16:17], v16, v[28:29]
-; GFX1251-NEXT: s_wait_loadcnt 0x8
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[30:31], v68, v[64:65]
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[28:29], v66, v[62:63]
-; GFX1251-NEXT: s_clause 0x1
-; GFX1251-NEXT: global_load_b128 v[58:61], v40, s[2:3] offset:64
-; GFX1251-NEXT: global_load_b128 v[62:65], v40, s[2:3] offset:32
-; GFX1251-NEXT: s_wait_loadcnt 0x6
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[34:35], v34, v[72:73]
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[32:33], v32, v[70:71]
-; GFX1251-NEXT: s_wait_loadcnt 0x5
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[38:39], v44, v[38:39]
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[36:37], v42, v[36:37]
-; GFX1251-NEXT: global_load_b128 v[42:45], v40, s[2:3] offset:288
-; GFX1251-NEXT: s_wait_loadcnt 0x4
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[48:49], v52, v[48:49]
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[46:47], v50, v[46:47]
-; GFX1251-NEXT: global_load_b128 v[50:53], v40, s[2:3] offset:320
-; GFX1251-NEXT: s_wait_loadcnt 0x4
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[56:57], v56, v[76:77]
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[54:55], v54, v[74:75]
-; GFX1251-NEXT: s_clause 0x3
-; GFX1251-NEXT: global_load_b128 v[66:69], v40, s[2:3] offset:368
-; GFX1251-NEXT: global_load_b128 v[70:73], v40, s[2:3] offset:112
-; GFX1251-NEXT: global_load_b128 v[74:77], v40, s[2:3] offset:96
-; GFX1251-NEXT: global_load_b128 v[78:81], v40, s[2:3] offset:352
-; GFX1251-NEXT: s_wait_loadcnt 0x5
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[44:45], v44, v[64:65]
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[42:43], v42, v[62:63]
-; GFX1251-NEXT: s_wait_loadcnt 0x4
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[52:53], v52, v[60:61]
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[50:51], v50, v[58:59]
-; GFX1251-NEXT: s_wait_loadcnt 0x2
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[68:69], v68, v[72:73]
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[66:67], v66, v[70:71]
-; GFX1251-NEXT: s_wait_loadcnt 0x0
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[72:73], v80, v[76:77]
-; GFX1251-NEXT: v_lshlrev_b64_e32 v[70:71], v78, v[74:75]
-; GFX1251-NEXT: s_clause 0xf
-; GFX1251-NEXT: global_store_b128 v40, v[70:73], s[0:1] offset:96
-; GFX1251-NEXT: global_store_b128 v40, v[66:69], s[0:1] offset:112
-; GFX1251-NEXT: global_store_b128 v40, v[50:53], s[0:1] offset:64
-; GFX1251-NEXT: global_store_b128 v40, v[54:57], s[0:1] offset:80
-; GFX1251-NEXT: global_store_b128 v40, v[42:45], s[0:1] offset:32
-; GFX1251-NEXT: global_store_b128 v40, v[46:49], s[0:1] offset:48
-; GFX1251-NEXT: global_store_b128 v40, v[36:39], s[0:1]
-; GFX1251-NEXT: global_store_b128 v40, v[32:35], s[0:1] offset:16
-; GFX1251-NEXT: global_store_b128 v40, v[28:31], s[0:1] offset:224
-; GFX1251-NEXT: global_store_b128 v40, v[24:27], s[0:1] offset:240
-; GFX1251-NEXT: global_store_b128 v40, v[20:23], s[0:1] offset:192
-; GFX1251-NEXT: global_store_b128 v40, v[16:19], s[0:1] offset:208
-; GFX1251-NEXT: global_store_b128 v40, v[12:15], s[0:1] offset:160
-; GFX1251-NEXT: global_store_b128 v40, v[8:11], s[0:1] offset:176
-; GFX1251-NEXT: global_store_b128 v40, v[4:7], s[0:1] offset:128
-; GFX1251-NEXT: global_store_b128 v40, v[0:3], s[0:1] offset:144
-; GFX1251-NEXT: s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
-; GFX1251-NEXT: s_endpgm
+; GCN-LABEL: v_shl_v32i64:
+; GCN: ; %bb.0:
+; GCN-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1 ; msbs: dst=0 src0=0 src1=0 src2=0
+; GCN-NEXT: s_mov_b64 s[64:65], 0
+; GCN-NEXT: v_nop
+; GCN-NEXT: global_prefetch_b8 v0, s[64:65] scope:SCOPE_SE
+; GCN-NEXT: s_load_b128 s[0:3], s[4:5], 0x24 nv
+; GCN-NEXT: v_and_b32_e32 v0, 0x3ff, v0
+; GCN-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GCN-NEXT: v_lshlrev_b32_e32 v40, 8, v0
+; GCN-NEXT: s_wait_kmcnt 0x0
+; GCN-NEXT: s_clause 0x11
+; GCN-NEXT: global_load_b128 v[0:3], v40, s[2:3] offset:496
+; GCN-NEXT: global_load_b128 v[4:7], v40, s[2:3] offset:240
+; GCN-NEXT: global_load_b128 v[16:19], v40, s[2:3] offset:224
+; GCN-NEXT: global_load_b128 v[20:23], v40, s[2:3] offset:480
+; GCN-NEXT: global_load_b128 v[42:45], v40, s[2:3] offset:464
+; GCN-NEXT: global_load_b128 v[46:49], v40, s[2:3] offset:208
+; GCN-NEXT: global_load_b128 v[50:53], v40, s[2:3] offset:192
+; GCN-NEXT: global_load_b128 v[54:57], v40, s[2:3] offset:448
+; GCN-NEXT: global_load_b128 v[8:11], v40, s[2:3] offset:432
+; GCN-NEXT: global_load_b128 v[36:39], v40, s[2:3] offset:176
+; GCN-NEXT: global_load_b128 v[12:15], v40, s[2:3] offset:160
+; GCN-NEXT: global_load_b128 v[28:31], v40, s[2:3] offset:416
+; GCN-NEXT: global_load_b128 v[24:27], v40, s[2:3] offset:128
+; GCN-NEXT: global_load_b128 v[32:35], v40, s[2:3] offset:144
+; GCN-NEXT: global_load_b128 v[58:61], v40, s[2:3] offset:400
+; GCN-NEXT: global_load_b128 v[62:65], v40, s[2:3] offset:384
+; GCN-NEXT: global_load_b128 v[66:69], v40, s[2:3] offset:112
+; GCN-NEXT: global_load_b128 v[70:73], v40, s[2:3] offset:96
+; GCN-NEXT: s_wait_loadcnt 0x10
+; GCN-NEXT: v_lshlrev_b64_e32 v[2:3], v2, v[6:7]
+; GCN-NEXT: v_lshlrev_b64_e32 v[0:1], v0, v[4:5]
+; GCN-NEXT: s_wait_loadcnt 0xe
+; GCN-NEXT: v_lshlrev_b64_e32 v[22:23], v22, v[18:19]
+; GCN-NEXT: v_lshlrev_b64_e32 v[20:21], v20, v[16:17]
+; GCN-NEXT: s_wait_loadcnt 0xc
+; GCN-NEXT: v_lshlrev_b64_e32 v[6:7], v44, v[48:49]
+; GCN-NEXT: v_lshlrev_b64_e32 v[4:5], v42, v[46:47]
+; GCN-NEXT: s_wait_loadcnt 0xa
+; GCN-NEXT: v_lshlrev_b64_e32 v[18:19], v56, v[52:53]
+; GCN-NEXT: v_lshlrev_b64_e32 v[16:17], v54, v[50:51]
+; GCN-NEXT: s_clause 0x1
+; GCN-NEXT: global_load_b128 v[50:53], v40, s[2:3] offset:80
+; GCN-NEXT: global_load_b128 v[54:57], v40, s[2:3] offset:64
+; GCN-NEXT: s_wait_loadcnt 0xa
+; GCN-NEXT: v_lshlrev_b64_e32 v[10:11], v10, v[38:39]
+; GCN-NEXT: v_lshlrev_b64_e32 v[8:9], v8, v[36:37]
+; GCN-NEXT: s_clause 0x2
+; GCN-NEXT: global_load_b128 v[36:39], v40, s[2:3] offset:336
+; GCN-NEXT: global_load_b128 v[42:45], v40, s[2:3] offset:368
+; GCN-NEXT: global_load_b128 v[46:49], v40, s[2:3] offset:352
+; GCN-NEXT: s_wait_loadcnt 0xb
+; GCN-NEXT: v_lshlrev_b64_e32 v[30:31], v30, v[14:15]
+; GCN-NEXT: v_lshlrev_b64_e32 v[28:29], v28, v[12:13]
+; GCN-NEXT: s_wait_loadcnt 0x8
+; GCN-NEXT: v_lshlrev_b64_e32 v[14:15], v60, v[34:35]
+; GCN-NEXT: v_lshlrev_b64_e32 v[12:13], v58, v[32:33]
+; GCN-NEXT: s_clause 0x1
+; GCN-NEXT: global_load_b128 v[32:35], v40, s[2:3] offset:320
+; GCN-NEXT: global_load_b128 v[58:61], v40, s[2:3] offset:304
+; GCN-NEXT: s_wait_loadcnt 0x9
+; GCN-NEXT: v_lshlrev_b64_e32 v[26:27], v64, v[26:27]
+; GCN-NEXT: v_lshlrev_b64_e32 v[24:25], v62, v[24:25]
+; GCN-NEXT: s_wait_loadcnt 0x3
+; GCN-NEXT: v_lshlrev_b64_e32 v[44:45], v44, v[68:69]
+; GCN-NEXT: v_lshlrev_b64_e32 v[42:43], v42, v[66:67]
+; GCN-NEXT: s_clause 0x1
+; GCN-NEXT: global_load_b128 v[62:65], v40, s[2:3] offset:48
+; GCN-NEXT: global_load_b128 v[66:69], v40, s[2:3] offset:32
+; GCN-NEXT: v_lshlrev_b64_e32 v[38:39], v38, v[52:53]
+; GCN-NEXT: v_lshlrev_b64_e32 v[36:37], v36, v[50:51]
+; GCN-NEXT: global_load_b128 v[50:53], v40, s[2:3] offset:288
+; GCN-NEXT: s_wait_loadcnt 0x5
+; GCN-NEXT: v_lshlrev_b64_e32 v[48:49], v48, v[72:73]
+; GCN-NEXT: v_lshlrev_b64_e32 v[46:47], v46, v[70:71]
+; GCN-NEXT: s_wait_loadcnt 0x4
+; GCN-NEXT: v_lshlrev_b64_e32 v[34:35], v34, v[56:57]
+; GCN-NEXT: v_lshlrev_b64_e32 v[32:33], v32, v[54:55]
+; GCN-NEXT: global_load_b128 v[54:57], v40, s[2:3] offset:272
+; GCN-NEXT: s_wait_loadcnt 0x3
+; GCN-NEXT: v_lshlrev_b64_e32 v[60:61], v60, v[64:65]
+; GCN-NEXT: v_lshlrev_b64_e32 v[58:59], v58, v[62:63]
+; GCN-NEXT: s_wait_loadcnt 0x1
+; GCN-NEXT: v_lshlrev_b64_e32 v[52:53], v52, v[68:69]
+; GCN-NEXT: v_lshlrev_b64_e32 v[50:51], v50, v[66:67]
+; GCN-NEXT: s_clause 0x2
+; GCN-NEXT: global_load_b128 v[62:65], v40, s[2:3] offset:16
+; GCN-NEXT: global_load_b128 v[66:69], v40, s[2:3]
+; GCN-NEXT: global_load_b128 v[70:73], v40, s[2:3] offset:256
+; GCN-NEXT: s_wait_loadcnt 0x2
+; GCN-NEXT: v_lshlrev_b64_e32 v[56:57], v56, v[64:65]
+; GCN-NEXT: v_lshlrev_b64_e32 v[54:55], v54, v[62:63]
+; GCN-NEXT: s_wait_loadcnt 0x0
+; GCN-NEXT: v_lshlrev_b64_e32 v[64:65], v72, v[68:69]
+; GCN-NEXT: v_lshlrev_b64_e32 v[62:63], v70, v[66:67]
+; GCN-NEXT: s_clause 0xf
+; GCN-NEXT: global_store_b128 v40, v[46:49], s[0:1] offset:96
+; GCN-NEXT: global_store_b128 v40, v[42:45], s[0:1] offset:112
+; GCN-NEXT: global_store_b128 v40, v[32:35], s[0:1] offset:64
+; GCN-NEXT: global_store_b128 v40, v[36:39], s[0:1] offset:80
+; GCN-NEXT: global_store_b128 v40, v[50:53], s[0:1] offset:32
+; GCN-NEXT: global_store_b128 v40, v[58:61], s[0:1] offset:48
+; GCN-NEXT: global_store_b128 v40, v[62:65], s[0:1]
+; GCN-NEXT: global_store_b128 v40, v[54:57], s[0:1] offset:16
+; GCN-NEXT: global_store_b128 v40, v[20:23], s[0:1] offset:224
+; GCN-NEXT: global_store_b128 v40, v[0:3], s[0:1] offset:240
+; GCN-NEXT: global_store_b128 v40, v[16:19], s[0:1] offset:192
+; GCN-NEXT: global_store_b128 v40, v[4:7], s[0:1] offset:208
+; GCN-NEXT: global_store_b128 v40, v[28:31], s[0:1] offset:160
+; GCN-NEXT: global_store_b128 v40, v[8:11], s[0:1] offset:176
+; GCN-NEXT: global_store_b128 v40, v[24:27], s[0:1] offset:128
+; GCN-NEXT: global_store_b128 v40, v[12:15], s[0:1] offset:144
+; GCN-NEXT: s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
+; GCN-NEXT: s_endpgm
%tid = call i32 @llvm.amdgcn.workitem.id.x()
%tid.ext = sext i32 %tid to i64
%in.gep = getelementptr inbounds <32 x i64>, ptr addrspace(1) %in, i64 %tid.ext
diff --git a/llvm/test/CodeGen/AMDGPU/shufflevector.v2i64.v2i64.ll b/llvm/test/CodeGen/AMDGPU/shufflevector.v2i64.v2i64.ll
index 929f0ac51f1f0..56883b7c03c5e 100644
--- a/llvm/test/CodeGen/AMDGPU/shufflevector.v2i64.v2i64.ll
+++ b/llvm/test/CodeGen/AMDGPU/shufflevector.v2i64.v2i64.ll
@@ -278,8 +278,7 @@ define void @v_shuffle_v2i64_v2i64__3_2(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:3]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v0
-; GFX942-NEXT: v_mov_b32_e32 v5, v1
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -325,8 +324,7 @@ define void @v_shuffle_v2i64_v2i64__3_3(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:3]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v2
-; GFX942-NEXT: v_mov_b32_e32 v5, v3
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -410,8 +408,7 @@ define void @v_shuffle_v2i64_v2i64__0_0(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:3]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v4, 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v0
-; GFX942-NEXT: v_mov_b32_e32 v3, v1
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -456,8 +453,7 @@ define void @v_shuffle_v2i64_v2i64__1_0(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:3]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v0
-; GFX942-NEXT: v_mov_b32_e32 v5, v1
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -619,8 +615,7 @@ define void @v_shuffle_v2i64_v2i64__1_1(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:3]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v2
-; GFX942-NEXT: v_mov_b32_e32 v5, v3
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -853,8 +848,7 @@ define void @v_shuffle_v2i64_v2i64__0_3(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[2:5]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v4
-; GFX942-NEXT: v_mov_b32_e32 v3, v5
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v6, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -905,8 +899,7 @@ define void @v_shuffle_v2i64_v2i64__1_3(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[4:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v6
-; GFX942-NEXT: v_mov_b32_e32 v5, v7
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def v[0:3]
; GFX942-NEXT: ;;#ASMEND
@@ -1047,8 +1040,7 @@ define void @s_shuffle_v2i64_v2i64__1_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -1106,8 +1098,7 @@ define void @s_shuffle_v2i64_v2i64__3_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -1165,10 +1156,8 @@ define void @s_shuffle_v2i64_v2i64__3_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -1222,8 +1211,7 @@ define void @s_shuffle_v2i64_v2i64__3_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -1272,10 +1260,8 @@ define void @s_shuffle_v2i64_v2i64__3_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -1288,18 +1274,43 @@ define void @s_shuffle_v2i64_v2i64__3_2() {
}
define void @s_shuffle_v2i64_v2i64__3_3() {
-; GFX9-LABEL: s_shuffle_v2i64_v2i64__3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v2i64__3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v2i64__3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v2i64__3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%vec1 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 3, i32 3>
@@ -1340,8 +1351,7 @@ define void @s_shuffle_v2i64_v2i64__u_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -1353,18 +1363,43 @@ define void @s_shuffle_v2i64_v2i64__u_0() {
}
define void @s_shuffle_v2i64_v2i64__0_0() {
-; GFX9-LABEL: s_shuffle_v2i64_v2i64__0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v2i64__0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v2i64__0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v2i64__0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> zeroinitializer
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -1408,10 +1443,8 @@ define void @s_shuffle_v2i64_v2i64__1_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -1455,8 +1488,7 @@ define void @s_shuffle_v2i64_v2i64__2_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -1548,18 +1580,43 @@ define void @s_shuffle_v2i64_v2i64__0_1() {
}
define void @s_shuffle_v2i64_v2i64__1_1() {
-; GFX9-LABEL: s_shuffle_v2i64_v2i64__1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v2i64__1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v2i64__1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v2i64__1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -1693,8 +1750,7 @@ define void @s_shuffle_v2i64_v2i64__1_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -1802,8 +1858,7 @@ define void @s_shuffle_v2i64_v2i64__0_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s2
-; GFX942-NEXT: s_mov_b32 s11, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -1857,8 +1912,7 @@ define void @s_shuffle_v2i64_v2i64__1_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
diff --git a/llvm/test/CodeGen/AMDGPU/shufflevector.v2i64.v3i64.ll b/llvm/test/CodeGen/AMDGPU/shufflevector.v2i64.v3i64.ll
index 62e70dd56bea7..13751f3ef6e2e 100644
--- a/llvm/test/CodeGen/AMDGPU/shufflevector.v2i64.v3i64.ll
+++ b/llvm/test/CodeGen/AMDGPU/shufflevector.v2i64.v3i64.ll
@@ -407,8 +407,7 @@ define void @v_shuffle_v2i64_v3i64__5_3(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:5]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v0
-; GFX942-NEXT: v_mov_b32_e32 v7, v1
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -454,8 +453,7 @@ define void @v_shuffle_v2i64_v3i64__5_4(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:5]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v2
-; GFX942-NEXT: v_mov_b32_e32 v7, v3
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -501,8 +499,7 @@ define void @v_shuffle_v2i64_v3i64__5_5(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:5]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v4
-; GFX942-NEXT: v_mov_b32_e32 v7, v5
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -586,8 +583,7 @@ define void @v_shuffle_v2i64_v3i64__0_0(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:5]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v6, 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v0
-; GFX942-NEXT: v_mov_b32_e32 v3, v1
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v6, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -631,8 +627,7 @@ define void @v_shuffle_v2i64_v3i64__1_0(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:5]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v6, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v0
-; GFX942-NEXT: v_mov_b32_e32 v5, v1
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -677,8 +672,7 @@ define void @v_shuffle_v2i64_v3i64__2_0(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:5]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v0
-; GFX942-NEXT: v_mov_b32_e32 v7, v1
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -771,8 +765,7 @@ define void @v_shuffle_v2i64_v3i64__4_0(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[2:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v0
-; GFX942-NEXT: v_mov_b32_e32 v7, v1
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -895,8 +888,7 @@ define void @v_shuffle_v2i64_v3i64__1_1(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:5]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v6, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v2
-; GFX942-NEXT: v_mov_b32_e32 v5, v3
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -941,8 +933,7 @@ define void @v_shuffle_v2i64_v3i64__2_1(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:5]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v2
-; GFX942-NEXT: v_mov_b32_e32 v7, v3
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1035,8 +1026,7 @@ define void @v_shuffle_v2i64_v3i64__4_1(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[4:9]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v2
-; GFX942-NEXT: v_mov_b32_e32 v9, v3
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v10, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1120,8 +1110,7 @@ define void @v_shuffle_v2i64_v3i64__0_2(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:5]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v6, 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v4
-; GFX942-NEXT: v_mov_b32_e32 v3, v5
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v6, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1205,8 +1194,7 @@ define void @v_shuffle_v2i64_v3i64__2_2(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:5]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v4
-; GFX942-NEXT: v_mov_b32_e32 v7, v5
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1299,8 +1287,7 @@ define void @v_shuffle_v2i64_v3i64__4_2(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:5]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v4
-; GFX942-NEXT: v_mov_b32_e32 v11, v5
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v12, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1484,8 +1471,7 @@ define void @v_shuffle_v2i64_v3i64__4_3(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:5]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v6, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v0
-; GFX942-NEXT: v_mov_b32_e32 v5, v1
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1580,8 +1566,7 @@ define void @v_shuffle_v2i64_v3i64__0_4(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[2:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v4
-; GFX942-NEXT: v_mov_b32_e32 v3, v5
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v8, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1636,8 +1621,7 @@ define void @v_shuffle_v2i64_v3i64__1_4(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[4:9]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v6
-; GFX942-NEXT: v_mov_b32_e32 v5, v7
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v10, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1688,8 +1672,7 @@ define void @v_shuffle_v2i64_v3i64__2_4(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[6:11]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v12, 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v8
-; GFX942-NEXT: v_mov_b32_e32 v7, v9
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def v[0:5]
; GFX942-NEXT: ;;#ASMEND
@@ -1777,8 +1760,7 @@ define void @v_shuffle_v2i64_v3i64__4_4(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:5]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v6, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v2
-; GFX942-NEXT: v_mov_b32_e32 v5, v3
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1873,8 +1855,7 @@ define void @v_shuffle_v2i64_v3i64__0_5(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[2:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v6
-; GFX942-NEXT: v_mov_b32_e32 v3, v7
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v8, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1929,8 +1910,7 @@ define void @v_shuffle_v2i64_v3i64__1_5(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[4:9]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v8
-; GFX942-NEXT: v_mov_b32_e32 v5, v9
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[8:9]
; GFX942-NEXT: global_store_dwordx4 v10, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1981,8 +1961,7 @@ define void @v_shuffle_v2i64_v3i64__2_5(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[6:11]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v12, 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v10
-; GFX942-NEXT: v_mov_b32_e32 v7, v11
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def v[0:5]
; GFX942-NEXT: ;;#ASMEND
@@ -2030,8 +2009,7 @@ define void @v_shuffle_v2i64_v3i64__3_5(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:5]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v6, 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v4
-; GFX942-NEXT: v_mov_b32_e32 v3, v5
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v6, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2169,8 +2147,7 @@ define void @s_shuffle_v2i64_v3i64__1_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -2268,8 +2245,7 @@ define void @s_shuffle_v2i64_v3i64__4_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -2361,11 +2337,11 @@ define void @s_shuffle_v2i64_v3i64__5_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -2467,11 +2443,11 @@ define void @s_shuffle_v2i64_v3i64__5_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -2484,18 +2460,43 @@ define void @s_shuffle_v2i64_v3i64__5_2() {
}
define void @s_shuffle_v2i64_v3i64__5_3() {
-; GFX9-LABEL: s_shuffle_v2i64_v3i64__5_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v3i64__5_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v3i64__5_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v3i64__5_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 5, i32 3>
@@ -2504,18 +2505,43 @@ define void @s_shuffle_v2i64_v3i64__5_3() {
}
define void @s_shuffle_v2i64_v3i64__5_4() {
-; GFX9-LABEL: s_shuffle_v2i64_v3i64__5_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v3i64__5_4:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v3i64__5_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v3i64__5_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 5, i32 4>
@@ -2524,18 +2550,43 @@ define void @s_shuffle_v2i64_v3i64__5_4() {
}
define void @s_shuffle_v2i64_v3i64__5_5() {
-; GFX9-LABEL: s_shuffle_v2i64_v3i64__5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v3i64__5_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v3i64__5_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v3i64__5_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 5, i32 5>
@@ -2576,8 +2627,7 @@ define void @s_shuffle_v2i64_v3i64__u_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -2589,18 +2639,43 @@ define void @s_shuffle_v2i64_v3i64__u_0() {
}
define void @s_shuffle_v2i64_v3i64__0_0() {
-; GFX9-LABEL: s_shuffle_v2i64_v3i64__0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v3i64__0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v3i64__0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v3i64__0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> zeroinitializer
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -2644,10 +2719,8 @@ define void @s_shuffle_v2i64_v3i64__1_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -2659,18 +2732,43 @@ define void @s_shuffle_v2i64_v3i64__1_0() {
}
define void @s_shuffle_v2i64_v3i64__2_0() {
-; GFX9-LABEL: s_shuffle_v2i64_v3i64__2_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v3i64__2_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v3i64__2_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v3i64__2_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 2, i32 0>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -2710,8 +2808,7 @@ define void @s_shuffle_v2i64_v3i64__3_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -2765,13 +2862,11 @@ define void @s_shuffle_v2i64_v3i64__4_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -2864,18 +2959,43 @@ define void @s_shuffle_v2i64_v3i64__0_1() {
}
define void @s_shuffle_v2i64_v3i64__1_1() {
-; GFX9-LABEL: s_shuffle_v2i64_v3i64__1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v3i64__1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v3i64__1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v3i64__1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -2883,18 +3003,43 @@ define void @s_shuffle_v2i64_v3i64__1_1() {
}
define void @s_shuffle_v2i64_v3i64__2_1() {
-; GFX9-LABEL: s_shuffle_v2i64_v3i64__2_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v3i64__2_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v3i64__2_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v3i64__2_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 2, i32 1>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -2983,8 +3128,7 @@ define void @s_shuffle_v2i64_v3i64__4_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3029,8 +3173,7 @@ define void @s_shuffle_v2i64_v3i64__u_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3042,18 +3185,43 @@ define void @s_shuffle_v2i64_v3i64__u_2() {
}
define void @s_shuffle_v2i64_v3i64__0_2() {
-; GFX9-LABEL: s_shuffle_v2i64_v3i64__0_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v3i64__0_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v3i64__0_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v3i64__0_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 0, i32 2>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -3097,10 +3265,8 @@ define void @s_shuffle_v2i64_v3i64__1_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3112,18 +3278,43 @@ define void @s_shuffle_v2i64_v3i64__1_2() {
}
define void @s_shuffle_v2i64_v3i64__2_2() {
-; GFX9-LABEL: s_shuffle_v2i64_v3i64__2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v3i64__2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v3i64__2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v3i64__2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 2, i32 2>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -3163,8 +3354,7 @@ define void @s_shuffle_v2i64_v3i64__3_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3221,10 +3411,8 @@ define void @s_shuffle_v2i64_v3i64__4_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3323,8 +3511,7 @@ define void @s_shuffle_v2i64_v3i64__1_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3426,10 +3613,8 @@ define void @s_shuffle_v2i64_v3i64__4_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3524,8 +3709,7 @@ define void @s_shuffle_v2i64_v3i64__0_4() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s2
-; GFX942-NEXT: s_mov_b32 s11, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3579,8 +3763,7 @@ define void @s_shuffle_v2i64_v3i64__1_4() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3635,8 +3818,7 @@ define void @s_shuffle_v2i64_v3i64__2_4() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s2
-; GFX942-NEXT: s_mov_b32 s11, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3690,18 +3872,43 @@ define void @s_shuffle_v2i64_v3i64__3_4() {
}
define void @s_shuffle_v2i64_v3i64__4_4() {
-; GFX9-LABEL: s_shuffle_v2i64_v3i64__4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v3i64__4_4:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v3i64__4_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v3i64__4_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 4, i32 4>
@@ -3742,8 +3949,7 @@ define void @s_shuffle_v2i64_v3i64__u_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3797,8 +4003,7 @@ define void @s_shuffle_v2i64_v3i64__0_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3856,10 +4061,8 @@ define void @s_shuffle_v2i64_v3i64__1_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3914,8 +4117,7 @@ define void @s_shuffle_v2i64_v3i64__2_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3928,18 +4130,43 @@ define void @s_shuffle_v2i64_v3i64__2_5() {
}
define void @s_shuffle_v2i64_v3i64__3_5() {
-; GFX9-LABEL: s_shuffle_v2i64_v3i64__3_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v3i64__3_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v3i64__3_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v3i64__3_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 3, i32 5>
@@ -3984,10 +4211,8 @@ define void @s_shuffle_v2i64_v3i64__4_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
diff --git a/llvm/test/CodeGen/AMDGPU/shufflevector.v2i64.v4i64.ll b/llvm/test/CodeGen/AMDGPU/shufflevector.v2i64.v4i64.ll
index 368b80000a2de..55a574a7ff7a0 100644
--- a/llvm/test/CodeGen/AMDGPU/shufflevector.v2i64.v4i64.ll
+++ b/llvm/test/CodeGen/AMDGPU/shufflevector.v2i64.v4i64.ll
@@ -536,8 +536,7 @@ define void @v_shuffle_v2i64_v4i64__7_4(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v0
-; GFX942-NEXT: v_mov_b32_e32 v9, v1
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v10, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -583,8 +582,7 @@ define void @v_shuffle_v2i64_v4i64__7_5(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v2
-; GFX942-NEXT: v_mov_b32_e32 v9, v3
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v10, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -630,8 +628,7 @@ define void @v_shuffle_v2i64_v4i64__7_6(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v4
-; GFX942-NEXT: v_mov_b32_e32 v9, v5
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v10, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -677,8 +674,7 @@ define void @v_shuffle_v2i64_v4i64__7_7(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v6
-; GFX942-NEXT: v_mov_b32_e32 v9, v7
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v10, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -762,8 +758,7 @@ define void @v_shuffle_v2i64_v4i64__0_0(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v0
-; GFX942-NEXT: v_mov_b32_e32 v3, v1
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v8, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -807,8 +802,7 @@ define void @v_shuffle_v2i64_v4i64__1_0(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v0
-; GFX942-NEXT: v_mov_b32_e32 v5, v1
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v8, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -852,8 +846,7 @@ define void @v_shuffle_v2i64_v4i64__2_0(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v0
-; GFX942-NEXT: v_mov_b32_e32 v7, v1
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -898,8 +891,7 @@ define void @v_shuffle_v2i64_v4i64__3_0(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v0
-; GFX942-NEXT: v_mov_b32_e32 v9, v1
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v10, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -992,8 +984,7 @@ define void @v_shuffle_v2i64_v4i64__5_0(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[2:9]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v0
-; GFX942-NEXT: v_mov_b32_e32 v7, v1
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v10, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1048,8 +1039,7 @@ define void @v_shuffle_v2i64_v4i64__6_0(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[2:9]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v0
-; GFX942-NEXT: v_mov_b32_e32 v9, v1
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v10, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1172,8 +1162,7 @@ define void @v_shuffle_v2i64_v4i64__1_1(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v2
-; GFX942-NEXT: v_mov_b32_e32 v5, v3
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v8, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1217,8 +1206,7 @@ define void @v_shuffle_v2i64_v4i64__2_1(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v2
-; GFX942-NEXT: v_mov_b32_e32 v7, v3
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1263,8 +1251,7 @@ define void @v_shuffle_v2i64_v4i64__3_1(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v2
-; GFX942-NEXT: v_mov_b32_e32 v9, v3
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v10, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1357,8 +1344,7 @@ define void @v_shuffle_v2i64_v4i64__5_1(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[4:11]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v2
-; GFX942-NEXT: v_mov_b32_e32 v9, v3
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v12, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1413,8 +1399,7 @@ define void @v_shuffle_v2i64_v4i64__6_1(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[4:11]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v2
-; GFX942-NEXT: v_mov_b32_e32 v11, v3
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v12, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1498,8 +1483,7 @@ define void @v_shuffle_v2i64_v4i64__0_2(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v4
-; GFX942-NEXT: v_mov_b32_e32 v3, v5
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v8, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1582,8 +1566,7 @@ define void @v_shuffle_v2i64_v4i64__2_2(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v4
-; GFX942-NEXT: v_mov_b32_e32 v7, v5
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1628,8 +1611,7 @@ define void @v_shuffle_v2i64_v4i64__3_2(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v4
-; GFX942-NEXT: v_mov_b32_e32 v9, v5
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v10, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1722,8 +1704,7 @@ define void @v_shuffle_v2i64_v4i64__5_2(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[6:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v4
-; GFX942-NEXT: v_mov_b32_e32 v11, v5
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v14, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1778,8 +1759,7 @@ define void @v_shuffle_v2i64_v4i64__6_2(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[6:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v12, v4
-; GFX942-NEXT: v_mov_b32_e32 v13, v5
+; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v14, v[10:13], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1863,8 +1843,7 @@ define void @v_shuffle_v2i64_v4i64__0_3(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v6
-; GFX942-NEXT: v_mov_b32_e32 v3, v7
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v8, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1908,8 +1887,7 @@ define void @v_shuffle_v2i64_v4i64__1_3(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v6
-; GFX942-NEXT: v_mov_b32_e32 v5, v7
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v8, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1993,8 +1971,7 @@ define void @v_shuffle_v2i64_v4i64__3_3(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v6
-; GFX942-NEXT: v_mov_b32_e32 v9, v7
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v10, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2087,8 +2064,7 @@ define void @v_shuffle_v2i64_v4i64__5_3(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v12, v6
-; GFX942-NEXT: v_mov_b32_e32 v13, v7
+; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v16, v[10:13], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2143,8 +2119,7 @@ define void @v_shuffle_v2i64_v4i64__6_3(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v14, v6
-; GFX942-NEXT: v_mov_b32_e32 v15, v7
+; GFX942-NEXT: v_mov_b64_e32 v[14:15], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v16, v[12:15], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2367,8 +2342,7 @@ define void @v_shuffle_v2i64_v4i64__5_4(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v0
-; GFX942-NEXT: v_mov_b32_e32 v5, v1
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v8, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2413,8 +2387,7 @@ define void @v_shuffle_v2i64_v4i64__6_4(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v0
-; GFX942-NEXT: v_mov_b32_e32 v7, v1
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2509,8 +2482,7 @@ define void @v_shuffle_v2i64_v4i64__0_5(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[2:9]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v4
-; GFX942-NEXT: v_mov_b32_e32 v3, v5
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v10, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2565,8 +2537,7 @@ define void @v_shuffle_v2i64_v4i64__1_5(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[4:11]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v6
-; GFX942-NEXT: v_mov_b32_e32 v5, v7
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v12, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2621,8 +2592,7 @@ define void @v_shuffle_v2i64_v4i64__2_5(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[6:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v8
-; GFX942-NEXT: v_mov_b32_e32 v7, v9
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[8:9]
; GFX942-NEXT: global_store_dwordx4 v14, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2673,8 +2643,7 @@ define void @v_shuffle_v2i64_v4i64__3_5(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v10
-; GFX942-NEXT: v_mov_b32_e32 v9, v11
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
@@ -2762,8 +2731,7 @@ define void @v_shuffle_v2i64_v4i64__5_5(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v2
-; GFX942-NEXT: v_mov_b32_e32 v5, v3
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v8, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2808,8 +2776,7 @@ define void @v_shuffle_v2i64_v4i64__6_5(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v2
-; GFX942-NEXT: v_mov_b32_e32 v7, v3
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2904,8 +2871,7 @@ define void @v_shuffle_v2i64_v4i64__0_6(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[2:9]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v6
-; GFX942-NEXT: v_mov_b32_e32 v3, v7
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v10, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2960,8 +2926,7 @@ define void @v_shuffle_v2i64_v4i64__1_6(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[4:11]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v8
-; GFX942-NEXT: v_mov_b32_e32 v5, v9
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[8:9]
; GFX942-NEXT: global_store_dwordx4 v12, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3016,8 +2981,7 @@ define void @v_shuffle_v2i64_v4i64__2_6(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[6:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v10
-; GFX942-NEXT: v_mov_b32_e32 v7, v11
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[10:11]
; GFX942-NEXT: global_store_dwordx4 v14, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3068,8 +3032,7 @@ define void @v_shuffle_v2i64_v4i64__3_6(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v12
-; GFX942-NEXT: v_mov_b32_e32 v9, v13
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
@@ -3117,8 +3080,7 @@ define void @v_shuffle_v2i64_v4i64__4_6(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v4
-; GFX942-NEXT: v_mov_b32_e32 v3, v5
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v8, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3203,8 +3165,7 @@ define void @v_shuffle_v2i64_v4i64__6_6(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v4
-; GFX942-NEXT: v_mov_b32_e32 v7, v5
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3299,8 +3260,7 @@ define void @v_shuffle_v2i64_v4i64__0_7(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[2:9]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v8
-; GFX942-NEXT: v_mov_b32_e32 v3, v9
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[8:9]
; GFX942-NEXT: global_store_dwordx4 v10, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3355,8 +3315,7 @@ define void @v_shuffle_v2i64_v4i64__1_7(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[4:11]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v10
-; GFX942-NEXT: v_mov_b32_e32 v5, v11
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[10:11]
; GFX942-NEXT: global_store_dwordx4 v12, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3411,8 +3370,7 @@ define void @v_shuffle_v2i64_v4i64__2_7(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[6:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v12
-; GFX942-NEXT: v_mov_b32_e32 v7, v13
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[12:13]
; GFX942-NEXT: global_store_dwordx4 v14, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3463,8 +3421,7 @@ define void @v_shuffle_v2i64_v4i64__3_7(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v14
-; GFX942-NEXT: v_mov_b32_e32 v9, v15
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
@@ -3512,8 +3469,7 @@ define void @v_shuffle_v2i64_v4i64__4_7(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v6
-; GFX942-NEXT: v_mov_b32_e32 v3, v7
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v8, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3558,8 +3514,7 @@ define void @v_shuffle_v2i64_v4i64__5_7(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v6
-; GFX942-NEXT: v_mov_b32_e32 v5, v7
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v8, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3697,8 +3652,7 @@ define void @s_shuffle_v2i64_v4i64__1_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3782,8 +3736,7 @@ define void @s_shuffle_v2i64_v4i64__3_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3841,8 +3794,7 @@ define void @s_shuffle_v2i64_v4i64__5_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3928,8 +3880,7 @@ define void @s_shuffle_v2i64_v4i64__7_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3988,10 +3939,8 @@ define void @s_shuffle_v2i64_v4i64__7_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -4045,8 +3994,7 @@ define void @s_shuffle_v2i64_v4i64__7_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -4104,10 +4052,8 @@ define void @s_shuffle_v2i64_v4i64__7_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -4162,8 +4108,7 @@ define void @s_shuffle_v2i64_v4i64__7_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -4212,10 +4157,8 @@ define void @s_shuffle_v2i64_v4i64__7_4() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -4228,18 +4171,43 @@ define void @s_shuffle_v2i64_v4i64__7_4() {
}
define void @s_shuffle_v2i64_v4i64__7_5() {
-; GFX9-LABEL: s_shuffle_v2i64_v4i64__7_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v4i64__7_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v4i64__7_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v4i64__7_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <2 x i32> <i32 7, i32 5>
@@ -4284,10 +4252,8 @@ define void @s_shuffle_v2i64_v4i64__7_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -4300,18 +4266,43 @@ define void @s_shuffle_v2i64_v4i64__7_6() {
}
define void @s_shuffle_v2i64_v4i64__7_7() {
-; GFX9-LABEL: s_shuffle_v2i64_v4i64__7_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v4i64__7_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v4i64__7_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v4i64__7_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <2 x i32> <i32 7, i32 7>
@@ -4352,8 +4343,7 @@ define void @s_shuffle_v2i64_v4i64__u_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -4365,18 +4355,43 @@ define void @s_shuffle_v2i64_v4i64__u_0() {
}
define void @s_shuffle_v2i64_v4i64__0_0() {
-; GFX9-LABEL: s_shuffle_v2i64_v4i64__0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v4i64__0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v4i64__0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v4i64__0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <2 x i32> zeroinitializer
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -4420,10 +4435,8 @@ define void @s_shuffle_v2i64_v4i64__1_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -4435,18 +4448,43 @@ define void @s_shuffle_v2i64_v4i64__1_0() {
}
define void @s_shuffle_v2i64_v4i64__2_0() {
-; GFX9-LABEL: s_shuffle_v2i64_v4i64__2_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v4i64__2_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v4i64__2_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v4i64__2_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <2 x i32> <i32 2, i32 0>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -4490,10 +4528,8 @@ define void @s_shuffle_v2i64_v4i64__3_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -4537,8 +4573,7 @@ define void @s_shuffle_v2i64_v4i64__4_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -4596,10 +4631,8 @@ define void @s_shuffle_v2i64_v4i64__5_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -4654,8 +4687,7 @@ define void @s_shuffle_v2i64_v4i64__6_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -4748,18 +4780,43 @@ define void @s_shuffle_v2i64_v4i64__0_1() {
}
define void @s_shuffle_v2i64_v4i64__1_1() {
-; GFX9-LABEL: s_shuffle_v2i64_v4i64__1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v4i64__1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v4i64__1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v4i64__1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <2 x i32> <i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -4767,18 +4824,43 @@ define void @s_shuffle_v2i64_v4i64__1_1() {
}
define void @s_shuffle_v2i64_v4i64__2_1() {
-; GFX9-LABEL: s_shuffle_v2i64_v4i64__2_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v4i64__2_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v4i64__2_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v4i64__2_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <2 x i32> <i32 2, i32 1>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -4786,18 +4868,43 @@ define void @s_shuffle_v2i64_v4i64__2_1() {
}
define void @s_shuffle_v2i64_v4i64__3_1() {
-; GFX9-LABEL: s_shuffle_v2i64_v4i64__3_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v4i64__3_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v4i64__3_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v4i64__3_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <2 x i32> <i32 3, i32 1>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -4886,8 +4993,7 @@ define void @s_shuffle_v2i64_v4i64__5_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -4942,8 +5048,7 @@ define void @s_shuffle_v2i64_v4i64__6_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s2
-; GFX942-NEXT: s_mov_b32 s11, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -4988,8 +5093,7 @@ define void @s_shuffle_v2i64_v4i64__u_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -5001,18 +5105,43 @@ define void @s_shuffle_v2i64_v4i64__u_2() {
}
define void @s_shuffle_v2i64_v4i64__0_2() {
-; GFX9-LABEL: s_shuffle_v2i64_v4i64__0_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v4i64__0_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v4i64__0_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v4i64__0_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <2 x i32> <i32 0, i32 2>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -5056,10 +5185,8 @@ define void @s_shuffle_v2i64_v4i64__1_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -5071,18 +5198,43 @@ define void @s_shuffle_v2i64_v4i64__1_2() {
}
define void @s_shuffle_v2i64_v4i64__2_2() {
-; GFX9-LABEL: s_shuffle_v2i64_v4i64__2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v4i64__2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v4i64__2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v4i64__2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <2 x i32> <i32 2, i32 2>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -5126,10 +5278,8 @@ define void @s_shuffle_v2i64_v4i64__3_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -5173,8 +5323,7 @@ define void @s_shuffle_v2i64_v4i64__4_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -5231,10 +5380,8 @@ define void @s_shuffle_v2i64_v4i64__5_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -5289,8 +5436,7 @@ define void @s_shuffle_v2i64_v4i64__6_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -5343,18 +5489,43 @@ define void @s_shuffle_v2i64_v4i64__u_3() {
}
define void @s_shuffle_v2i64_v4i64__0_3() {
-; GFX9-LABEL: s_shuffle_v2i64_v4i64__0_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v4i64__0_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v4i64__0_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v4i64__0_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <2 x i32> <i32 0, i32 3>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -5362,18 +5533,43 @@ define void @s_shuffle_v2i64_v4i64__0_3() {
}
define void @s_shuffle_v2i64_v4i64__1_3() {
-; GFX9-LABEL: s_shuffle_v2i64_v4i64__1_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s6
-; GFX9-NEXT: s_mov_b32 s9, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v4i64__1_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v4i64__1_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v4i64__1_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <2 x i32> <i32 1, i32 3>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -5421,18 +5617,43 @@ define void @s_shuffle_v2i64_v4i64__2_3() {
}
define void @s_shuffle_v2i64_v4i64__3_3() {
-; GFX9-LABEL: s_shuffle_v2i64_v4i64__3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v4i64__3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v4i64__3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v4i64__3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <2 x i32> <i32 3, i32 3>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -5522,8 +5743,7 @@ define void @s_shuffle_v2i64_v4i64__5_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -5578,8 +5798,7 @@ define void @s_shuffle_v2i64_v4i64__6_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -5678,8 +5897,7 @@ define void @s_shuffle_v2i64_v4i64__1_4() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -5763,8 +5981,7 @@ define void @s_shuffle_v2i64_v4i64__3_4() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -5826,10 +6043,8 @@ define void @s_shuffle_v2i64_v4i64__5_4() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -5842,18 +6057,43 @@ define void @s_shuffle_v2i64_v4i64__5_4() {
}
define void @s_shuffle_v2i64_v4i64__6_4() {
-; GFX9-LABEL: s_shuffle_v2i64_v4i64__6_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v4i64__6_4:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v4i64__6_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v4i64__6_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <2 x i32> <i32 6, i32 4>
@@ -5944,8 +6184,7 @@ define void @s_shuffle_v2i64_v4i64__0_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s2
-; GFX942-NEXT: s_mov_b32 s11, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -5999,8 +6238,7 @@ define void @s_shuffle_v2i64_v4i64__1_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -6055,8 +6293,7 @@ define void @s_shuffle_v2i64_v4i64__2_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s2
-; GFX942-NEXT: s_mov_b32 s11, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -6110,8 +6347,7 @@ define void @s_shuffle_v2i64_v4i64__3_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -6165,18 +6401,43 @@ define void @s_shuffle_v2i64_v4i64__4_5() {
}
define void @s_shuffle_v2i64_v4i64__5_5() {
-; GFX9-LABEL: s_shuffle_v2i64_v4i64__5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v4i64__5_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v4i64__5_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v4i64__5_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <2 x i32> <i32 5, i32 5>
@@ -6185,18 +6446,43 @@ define void @s_shuffle_v2i64_v4i64__5_5() {
}
define void @s_shuffle_v2i64_v4i64__6_5() {
-; GFX9-LABEL: s_shuffle_v2i64_v4i64__6_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v4i64__6_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v4i64__6_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v4i64__6_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <2 x i32> <i32 6, i32 5>
@@ -6237,8 +6523,7 @@ define void @s_shuffle_v2i64_v4i64__u_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -6292,8 +6577,7 @@ define void @s_shuffle_v2i64_v4i64__0_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -6351,10 +6635,8 @@ define void @s_shuffle_v2i64_v4i64__1_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -6409,8 +6691,7 @@ define void @s_shuffle_v2i64_v4i64__2_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -6468,10 +6749,8 @@ define void @s_shuffle_v2i64_v4i64__3_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -6484,18 +6763,43 @@ define void @s_shuffle_v2i64_v4i64__3_6() {
}
define void @s_shuffle_v2i64_v4i64__4_6() {
-; GFX9-LABEL: s_shuffle_v2i64_v4i64__4_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v4i64__4_6:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v4i64__4_6:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v4i64__4_6:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <2 x i32> <i32 4, i32 6>
@@ -6540,10 +6844,8 @@ define void @s_shuffle_v2i64_v4i64__5_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -6556,18 +6858,43 @@ define void @s_shuffle_v2i64_v4i64__5_6() {
}
define void @s_shuffle_v2i64_v4i64__6_6() {
-; GFX9-LABEL: s_shuffle_v2i64_v4i64__6_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v4i64__6_6:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v4i64__6_6:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v4i64__6_6:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <2 x i32> <i32 6, i32 6>
@@ -6658,8 +6985,7 @@ define void @s_shuffle_v2i64_v4i64__0_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s6
-; GFX942-NEXT: s_mov_b32 s11, s7
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -6714,8 +7040,7 @@ define void @s_shuffle_v2i64_v4i64__1_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -6770,8 +7095,7 @@ define void @s_shuffle_v2i64_v4i64__2_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s6
-; GFX942-NEXT: s_mov_b32 s11, s7
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -6826,8 +7150,7 @@ define void @s_shuffle_v2i64_v4i64__3_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -6840,18 +7163,43 @@ define void @s_shuffle_v2i64_v4i64__3_7() {
}
define void @s_shuffle_v2i64_v4i64__4_7() {
-; GFX9-LABEL: s_shuffle_v2i64_v4i64__4_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v4i64__4_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v4i64__4_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v4i64__4_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <2 x i32> <i32 4, i32 7>
@@ -6860,18 +7208,43 @@ define void @s_shuffle_v2i64_v4i64__4_7() {
}
define void @s_shuffle_v2i64_v4i64__5_7() {
-; GFX9-LABEL: s_shuffle_v2i64_v4i64__5_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s6
-; GFX9-NEXT: s_mov_b32 s9, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v4i64__5_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v4i64__5_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v4i64__5_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <2 x i32> <i32 5, i32 7>
diff --git a/llvm/test/CodeGen/AMDGPU/shufflevector.v2i64.v8i64.ll b/llvm/test/CodeGen/AMDGPU/shufflevector.v2i64.v8i64.ll
index 60ba7d9e69927..ddd888499c5a1 100644
--- a/llvm/test/CodeGen/AMDGPU/shufflevector.v2i64.v8i64.ll
+++ b/llvm/test/CodeGen/AMDGPU/shufflevector.v2i64.v8i64.ll
@@ -1052,8 +1052,7 @@ define void @v_shuffle_v2i64_v8i64__15_8(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v16, v0
-; GFX942-NEXT: v_mov_b32_e32 v17, v1
+; GFX942-NEXT: v_mov_b64_e32 v[16:17], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v18, v[14:17], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1099,8 +1098,7 @@ define void @v_shuffle_v2i64_v8i64__15_9(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v16, v2
-; GFX942-NEXT: v_mov_b32_e32 v17, v3
+; GFX942-NEXT: v_mov_b64_e32 v[16:17], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v18, v[14:17], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1146,8 +1144,7 @@ define void @v_shuffle_v2i64_v8i64__15_10(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v16, v4
-; GFX942-NEXT: v_mov_b32_e32 v17, v5
+; GFX942-NEXT: v_mov_b64_e32 v[16:17], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v18, v[14:17], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1193,8 +1190,7 @@ define void @v_shuffle_v2i64_v8i64__15_11(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v16, v6
-; GFX942-NEXT: v_mov_b32_e32 v17, v7
+; GFX942-NEXT: v_mov_b64_e32 v[16:17], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v18, v[14:17], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1240,8 +1236,7 @@ define void @v_shuffle_v2i64_v8i64__15_12(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v16, v8
-; GFX942-NEXT: v_mov_b32_e32 v17, v9
+; GFX942-NEXT: v_mov_b64_e32 v[16:17], v[8:9]
; GFX942-NEXT: global_store_dwordx4 v18, v[14:17], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1287,8 +1282,7 @@ define void @v_shuffle_v2i64_v8i64__15_13(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v16, v10
-; GFX942-NEXT: v_mov_b32_e32 v17, v11
+; GFX942-NEXT: v_mov_b64_e32 v[16:17], v[10:11]
; GFX942-NEXT: global_store_dwordx4 v18, v[14:17], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1334,8 +1328,7 @@ define void @v_shuffle_v2i64_v8i64__15_14(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v16, v12
-; GFX942-NEXT: v_mov_b32_e32 v17, v13
+; GFX942-NEXT: v_mov_b64_e32 v[16:17], v[12:13]
; GFX942-NEXT: global_store_dwordx4 v18, v[14:17], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1381,8 +1374,7 @@ define void @v_shuffle_v2i64_v8i64__15_15(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v16, v14
-; GFX942-NEXT: v_mov_b32_e32 v17, v15
+; GFX942-NEXT: v_mov_b64_e32 v[16:17], v[14:15]
; GFX942-NEXT: global_store_dwordx4 v18, v[14:17], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1466,8 +1458,7 @@ define void @v_shuffle_v2i64_v8i64__0_0(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v0
-; GFX942-NEXT: v_mov_b32_e32 v3, v1
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v16, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1511,8 +1502,7 @@ define void @v_shuffle_v2i64_v8i64__1_0(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v0
-; GFX942-NEXT: v_mov_b32_e32 v5, v1
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v16, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1556,8 +1546,7 @@ define void @v_shuffle_v2i64_v8i64__2_0(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v0
-; GFX942-NEXT: v_mov_b32_e32 v7, v1
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v16, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1601,8 +1590,7 @@ define void @v_shuffle_v2i64_v8i64__3_0(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v0
-; GFX942-NEXT: v_mov_b32_e32 v9, v1
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v16, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1646,8 +1634,7 @@ define void @v_shuffle_v2i64_v8i64__4_0(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v0
-; GFX942-NEXT: v_mov_b32_e32 v11, v1
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v16, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1691,8 +1678,7 @@ define void @v_shuffle_v2i64_v8i64__5_0(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v12, v0
-; GFX942-NEXT: v_mov_b32_e32 v13, v1
+; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v16, v[10:13], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1736,8 +1722,7 @@ define void @v_shuffle_v2i64_v8i64__6_0(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v14, v0
-; GFX942-NEXT: v_mov_b32_e32 v15, v1
+; GFX942-NEXT: v_mov_b64_e32 v[14:15], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v16, v[12:15], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1782,8 +1767,7 @@ define void @v_shuffle_v2i64_v8i64__7_0(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v16, v0
-; GFX942-NEXT: v_mov_b32_e32 v17, v1
+; GFX942-NEXT: v_mov_b64_e32 v[16:17], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v18, v[14:17], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1876,8 +1860,7 @@ define void @v_shuffle_v2i64_v8i64__9_0(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[16:31]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v16
-; GFX942-NEXT: v_mov_b32_e32 v5, v17
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v32, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1932,8 +1915,7 @@ define void @v_shuffle_v2i64_v8i64__10_0(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[16:31]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v16
-; GFX942-NEXT: v_mov_b32_e32 v7, v17
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v32, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1988,8 +1970,7 @@ define void @v_shuffle_v2i64_v8i64__11_0(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[16:31]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v16
-; GFX942-NEXT: v_mov_b32_e32 v9, v17
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v32, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2044,8 +2025,7 @@ define void @v_shuffle_v2i64_v8i64__12_0(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[16:31]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v16
-; GFX942-NEXT: v_mov_b32_e32 v11, v17
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v32, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2100,8 +2080,7 @@ define void @v_shuffle_v2i64_v8i64__13_0(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[16:31]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v12, v16
-; GFX942-NEXT: v_mov_b32_e32 v13, v17
+; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v32, v[10:13], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2156,8 +2135,7 @@ define void @v_shuffle_v2i64_v8i64__14_0(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[16:31]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v14, v16
-; GFX942-NEXT: v_mov_b32_e32 v15, v17
+; GFX942-NEXT: v_mov_b64_e32 v[14:15], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v32, v[12:15], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2280,8 +2258,7 @@ define void @v_shuffle_v2i64_v8i64__1_1(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v2
-; GFX942-NEXT: v_mov_b32_e32 v5, v3
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v16, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2325,8 +2302,7 @@ define void @v_shuffle_v2i64_v8i64__2_1(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v2
-; GFX942-NEXT: v_mov_b32_e32 v7, v3
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v16, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2370,8 +2346,7 @@ define void @v_shuffle_v2i64_v8i64__3_1(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v2
-; GFX942-NEXT: v_mov_b32_e32 v9, v3
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v16, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2415,8 +2390,7 @@ define void @v_shuffle_v2i64_v8i64__4_1(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v2
-; GFX942-NEXT: v_mov_b32_e32 v11, v3
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v16, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2460,8 +2434,7 @@ define void @v_shuffle_v2i64_v8i64__5_1(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v12, v2
-; GFX942-NEXT: v_mov_b32_e32 v13, v3
+; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v16, v[10:13], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2505,8 +2478,7 @@ define void @v_shuffle_v2i64_v8i64__6_1(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v14, v2
-; GFX942-NEXT: v_mov_b32_e32 v15, v3
+; GFX942-NEXT: v_mov_b64_e32 v[14:15], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v16, v[12:15], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2551,8 +2523,7 @@ define void @v_shuffle_v2i64_v8i64__7_1(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v16, v2
-; GFX942-NEXT: v_mov_b32_e32 v17, v3
+; GFX942-NEXT: v_mov_b64_e32 v[16:17], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v18, v[14:17], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2645,8 +2616,7 @@ define void @v_shuffle_v2i64_v8i64__9_1(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v16
-; GFX942-NEXT: v_mov_b32_e32 v5, v17
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v30, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2701,8 +2671,7 @@ define void @v_shuffle_v2i64_v8i64__10_1(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v16
-; GFX942-NEXT: v_mov_b32_e32 v7, v17
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v30, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2757,8 +2726,7 @@ define void @v_shuffle_v2i64_v8i64__11_1(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v16
-; GFX942-NEXT: v_mov_b32_e32 v9, v17
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v30, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2813,8 +2781,7 @@ define void @v_shuffle_v2i64_v8i64__12_1(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v16
-; GFX942-NEXT: v_mov_b32_e32 v11, v17
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v30, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2869,8 +2836,7 @@ define void @v_shuffle_v2i64_v8i64__13_1(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v12, v16
-; GFX942-NEXT: v_mov_b32_e32 v13, v17
+; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v30, v[10:13], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2925,8 +2891,7 @@ define void @v_shuffle_v2i64_v8i64__14_1(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v14, v16
-; GFX942-NEXT: v_mov_b32_e32 v15, v17
+; GFX942-NEXT: v_mov_b64_e32 v[14:15], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v30, v[12:15], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3010,8 +2975,7 @@ define void @v_shuffle_v2i64_v8i64__0_2(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v4
-; GFX942-NEXT: v_mov_b32_e32 v3, v5
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v16, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3094,8 +3058,7 @@ define void @v_shuffle_v2i64_v8i64__2_2(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v4
-; GFX942-NEXT: v_mov_b32_e32 v7, v5
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v16, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3139,8 +3102,7 @@ define void @v_shuffle_v2i64_v8i64__3_2(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v4
-; GFX942-NEXT: v_mov_b32_e32 v9, v5
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v16, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3184,8 +3146,7 @@ define void @v_shuffle_v2i64_v8i64__4_2(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v4
-; GFX942-NEXT: v_mov_b32_e32 v11, v5
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v16, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3229,8 +3190,7 @@ define void @v_shuffle_v2i64_v8i64__5_2(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v12, v4
-; GFX942-NEXT: v_mov_b32_e32 v13, v5
+; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v16, v[10:13], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3274,8 +3234,7 @@ define void @v_shuffle_v2i64_v8i64__6_2(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v14, v4
-; GFX942-NEXT: v_mov_b32_e32 v15, v5
+; GFX942-NEXT: v_mov_b64_e32 v[14:15], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v16, v[12:15], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3320,8 +3279,7 @@ define void @v_shuffle_v2i64_v8i64__7_2(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v16, v4
-; GFX942-NEXT: v_mov_b32_e32 v17, v5
+; GFX942-NEXT: v_mov_b64_e32 v[16:17], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v18, v[14:17], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3414,8 +3372,7 @@ define void @v_shuffle_v2i64_v8i64__9_2(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v16
-; GFX942-NEXT: v_mov_b32_e32 v5, v17
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v28, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3470,8 +3427,7 @@ define void @v_shuffle_v2i64_v8i64__10_2(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v16
-; GFX942-NEXT: v_mov_b32_e32 v7, v17
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v28, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3526,8 +3482,7 @@ define void @v_shuffle_v2i64_v8i64__11_2(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v16
-; GFX942-NEXT: v_mov_b32_e32 v9, v17
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v28, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3582,8 +3537,7 @@ define void @v_shuffle_v2i64_v8i64__12_2(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v16
-; GFX942-NEXT: v_mov_b32_e32 v11, v17
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v28, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3638,8 +3592,7 @@ define void @v_shuffle_v2i64_v8i64__13_2(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v12, v16
-; GFX942-NEXT: v_mov_b32_e32 v13, v17
+; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v28, v[10:13], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3694,8 +3647,7 @@ define void @v_shuffle_v2i64_v8i64__14_2(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v14, v16
-; GFX942-NEXT: v_mov_b32_e32 v15, v17
+; GFX942-NEXT: v_mov_b64_e32 v[14:15], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v28, v[12:15], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3779,8 +3731,7 @@ define void @v_shuffle_v2i64_v8i64__0_3(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v6
-; GFX942-NEXT: v_mov_b32_e32 v3, v7
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v16, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3824,8 +3775,7 @@ define void @v_shuffle_v2i64_v8i64__1_3(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v6
-; GFX942-NEXT: v_mov_b32_e32 v5, v7
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v16, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3908,8 +3858,7 @@ define void @v_shuffle_v2i64_v8i64__3_3(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v6
-; GFX942-NEXT: v_mov_b32_e32 v9, v7
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v16, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3953,8 +3902,7 @@ define void @v_shuffle_v2i64_v8i64__4_3(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v6
-; GFX942-NEXT: v_mov_b32_e32 v11, v7
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v16, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3998,8 +3946,7 @@ define void @v_shuffle_v2i64_v8i64__5_3(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v12, v6
-; GFX942-NEXT: v_mov_b32_e32 v13, v7
+; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v16, v[10:13], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -4043,8 +3990,7 @@ define void @v_shuffle_v2i64_v8i64__6_3(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v14, v6
-; GFX942-NEXT: v_mov_b32_e32 v15, v7
+; GFX942-NEXT: v_mov_b64_e32 v[14:15], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v16, v[12:15], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -4089,8 +4035,7 @@ define void @v_shuffle_v2i64_v8i64__7_3(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v16, v6
-; GFX942-NEXT: v_mov_b32_e32 v17, v7
+; GFX942-NEXT: v_mov_b64_e32 v[16:17], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v18, v[14:17], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -4183,8 +4128,7 @@ define void @v_shuffle_v2i64_v8i64__9_3(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v16
-; GFX942-NEXT: v_mov_b32_e32 v5, v17
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v26, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -4239,8 +4183,7 @@ define void @v_shuffle_v2i64_v8i64__10_3(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v16
-; GFX942-NEXT: v_mov_b32_e32 v7, v17
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v26, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -4295,8 +4238,7 @@ define void @v_shuffle_v2i64_v8i64__11_3(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v16
-; GFX942-NEXT: v_mov_b32_e32 v9, v17
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v26, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -4351,8 +4293,7 @@ define void @v_shuffle_v2i64_v8i64__12_3(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v16
-; GFX942-NEXT: v_mov_b32_e32 v11, v17
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v26, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -4407,8 +4348,7 @@ define void @v_shuffle_v2i64_v8i64__13_3(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v12, v16
-; GFX942-NEXT: v_mov_b32_e32 v13, v17
+; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v26, v[10:13], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -4463,8 +4403,7 @@ define void @v_shuffle_v2i64_v8i64__14_3(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v14, v16
-; GFX942-NEXT: v_mov_b32_e32 v15, v17
+; GFX942-NEXT: v_mov_b64_e32 v[14:15], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v26, v[12:15], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -4548,8 +4487,7 @@ define void @v_shuffle_v2i64_v8i64__0_4(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v8
-; GFX942-NEXT: v_mov_b32_e32 v3, v9
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[8:9]
; GFX942-NEXT: global_store_dwordx4 v16, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -4593,8 +4531,7 @@ define void @v_shuffle_v2i64_v8i64__1_4(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v8
-; GFX942-NEXT: v_mov_b32_e32 v5, v9
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[8:9]
; GFX942-NEXT: global_store_dwordx4 v16, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -4638,8 +4575,7 @@ define void @v_shuffle_v2i64_v8i64__2_4(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v8
-; GFX942-NEXT: v_mov_b32_e32 v7, v9
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[8:9]
; GFX942-NEXT: global_store_dwordx4 v16, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -4722,8 +4658,7 @@ define void @v_shuffle_v2i64_v8i64__4_4(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v8
-; GFX942-NEXT: v_mov_b32_e32 v11, v9
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[8:9]
; GFX942-NEXT: global_store_dwordx4 v16, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -4767,8 +4702,7 @@ define void @v_shuffle_v2i64_v8i64__5_4(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v12, v8
-; GFX942-NEXT: v_mov_b32_e32 v13, v9
+; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[8:9]
; GFX942-NEXT: global_store_dwordx4 v16, v[10:13], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -4812,8 +4746,7 @@ define void @v_shuffle_v2i64_v8i64__6_4(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v14, v8
-; GFX942-NEXT: v_mov_b32_e32 v15, v9
+; GFX942-NEXT: v_mov_b64_e32 v[14:15], v[8:9]
; GFX942-NEXT: global_store_dwordx4 v16, v[12:15], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -4858,8 +4791,7 @@ define void @v_shuffle_v2i64_v8i64__7_4(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v16, v8
-; GFX942-NEXT: v_mov_b32_e32 v17, v9
+; GFX942-NEXT: v_mov_b64_e32 v[16:17], v[8:9]
; GFX942-NEXT: global_store_dwordx4 v18, v[14:17], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -4952,8 +4884,7 @@ define void @v_shuffle_v2i64_v8i64__9_4(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v16
-; GFX942-NEXT: v_mov_b32_e32 v5, v17
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v24, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -5008,8 +4939,7 @@ define void @v_shuffle_v2i64_v8i64__10_4(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v16
-; GFX942-NEXT: v_mov_b32_e32 v7, v17
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v24, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -5064,8 +4994,7 @@ define void @v_shuffle_v2i64_v8i64__11_4(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v16
-; GFX942-NEXT: v_mov_b32_e32 v9, v17
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v24, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -5120,8 +5049,7 @@ define void @v_shuffle_v2i64_v8i64__12_4(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v16
-; GFX942-NEXT: v_mov_b32_e32 v11, v17
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v24, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -5176,8 +5104,7 @@ define void @v_shuffle_v2i64_v8i64__13_4(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v12, v16
-; GFX942-NEXT: v_mov_b32_e32 v13, v17
+; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v24, v[10:13], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -5232,8 +5159,7 @@ define void @v_shuffle_v2i64_v8i64__14_4(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v14, v16
-; GFX942-NEXT: v_mov_b32_e32 v15, v17
+; GFX942-NEXT: v_mov_b64_e32 v[14:15], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v24, v[12:15], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -5317,8 +5243,7 @@ define void @v_shuffle_v2i64_v8i64__0_5(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v10
-; GFX942-NEXT: v_mov_b32_e32 v3, v11
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[10:11]
; GFX942-NEXT: global_store_dwordx4 v16, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -5362,8 +5287,7 @@ define void @v_shuffle_v2i64_v8i64__1_5(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v10
-; GFX942-NEXT: v_mov_b32_e32 v5, v11
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[10:11]
; GFX942-NEXT: global_store_dwordx4 v16, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -5407,8 +5331,7 @@ define void @v_shuffle_v2i64_v8i64__2_5(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v10
-; GFX942-NEXT: v_mov_b32_e32 v7, v11
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[10:11]
; GFX942-NEXT: global_store_dwordx4 v16, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -5452,8 +5375,7 @@ define void @v_shuffle_v2i64_v8i64__3_5(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v10
-; GFX942-NEXT: v_mov_b32_e32 v9, v11
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[10:11]
; GFX942-NEXT: global_store_dwordx4 v16, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -5536,8 +5458,7 @@ define void @v_shuffle_v2i64_v8i64__5_5(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v12, v10
-; GFX942-NEXT: v_mov_b32_e32 v13, v11
+; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[10:11]
; GFX942-NEXT: global_store_dwordx4 v16, v[10:13], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -5581,8 +5502,7 @@ define void @v_shuffle_v2i64_v8i64__6_5(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v14, v10
-; GFX942-NEXT: v_mov_b32_e32 v15, v11
+; GFX942-NEXT: v_mov_b64_e32 v[14:15], v[10:11]
; GFX942-NEXT: global_store_dwordx4 v16, v[12:15], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -5627,8 +5547,7 @@ define void @v_shuffle_v2i64_v8i64__7_5(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v16, v10
-; GFX942-NEXT: v_mov_b32_e32 v17, v11
+; GFX942-NEXT: v_mov_b64_e32 v[16:17], v[10:11]
; GFX942-NEXT: global_store_dwordx4 v18, v[14:17], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -5721,8 +5640,7 @@ define void @v_shuffle_v2i64_v8i64__9_5(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v16
-; GFX942-NEXT: v_mov_b32_e32 v5, v17
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v22, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -5777,8 +5695,7 @@ define void @v_shuffle_v2i64_v8i64__10_5(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v16
-; GFX942-NEXT: v_mov_b32_e32 v7, v17
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v22, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -5833,8 +5750,7 @@ define void @v_shuffle_v2i64_v8i64__11_5(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v16
-; GFX942-NEXT: v_mov_b32_e32 v9, v17
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v22, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -5889,8 +5805,7 @@ define void @v_shuffle_v2i64_v8i64__12_5(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v16
-; GFX942-NEXT: v_mov_b32_e32 v11, v17
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v22, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -5945,8 +5860,7 @@ define void @v_shuffle_v2i64_v8i64__13_5(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v12, v16
-; GFX942-NEXT: v_mov_b32_e32 v13, v17
+; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v22, v[10:13], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -6001,8 +5915,7 @@ define void @v_shuffle_v2i64_v8i64__14_5(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v14, v16
-; GFX942-NEXT: v_mov_b32_e32 v15, v17
+; GFX942-NEXT: v_mov_b64_e32 v[14:15], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v22, v[12:15], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -6086,8 +5999,7 @@ define void @v_shuffle_v2i64_v8i64__0_6(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v12
-; GFX942-NEXT: v_mov_b32_e32 v3, v13
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[12:13]
; GFX942-NEXT: global_store_dwordx4 v16, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -6131,8 +6043,7 @@ define void @v_shuffle_v2i64_v8i64__1_6(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v12
-; GFX942-NEXT: v_mov_b32_e32 v5, v13
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[12:13]
; GFX942-NEXT: global_store_dwordx4 v16, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -6176,8 +6087,7 @@ define void @v_shuffle_v2i64_v8i64__2_6(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v12
-; GFX942-NEXT: v_mov_b32_e32 v7, v13
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[12:13]
; GFX942-NEXT: global_store_dwordx4 v16, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -6221,8 +6131,7 @@ define void @v_shuffle_v2i64_v8i64__3_6(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v12
-; GFX942-NEXT: v_mov_b32_e32 v9, v13
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[12:13]
; GFX942-NEXT: global_store_dwordx4 v16, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -6266,8 +6175,7 @@ define void @v_shuffle_v2i64_v8i64__4_6(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v12
-; GFX942-NEXT: v_mov_b32_e32 v11, v13
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[12:13]
; GFX942-NEXT: global_store_dwordx4 v16, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -6350,8 +6258,7 @@ define void @v_shuffle_v2i64_v8i64__6_6(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v14, v12
-; GFX942-NEXT: v_mov_b32_e32 v15, v13
+; GFX942-NEXT: v_mov_b64_e32 v[14:15], v[12:13]
; GFX942-NEXT: global_store_dwordx4 v16, v[12:15], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -6396,8 +6303,7 @@ define void @v_shuffle_v2i64_v8i64__7_6(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v16, v12
-; GFX942-NEXT: v_mov_b32_e32 v17, v13
+; GFX942-NEXT: v_mov_b64_e32 v[16:17], v[12:13]
; GFX942-NEXT: global_store_dwordx4 v18, v[14:17], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -6490,8 +6396,7 @@ define void @v_shuffle_v2i64_v8i64__9_6(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v16
-; GFX942-NEXT: v_mov_b32_e32 v5, v17
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v20, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -6546,8 +6451,7 @@ define void @v_shuffle_v2i64_v8i64__10_6(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v16
-; GFX942-NEXT: v_mov_b32_e32 v7, v17
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v20, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -6602,8 +6506,7 @@ define void @v_shuffle_v2i64_v8i64__11_6(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v16
-; GFX942-NEXT: v_mov_b32_e32 v9, v17
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v20, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -6658,8 +6561,7 @@ define void @v_shuffle_v2i64_v8i64__12_6(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v16
-; GFX942-NEXT: v_mov_b32_e32 v11, v17
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v20, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -6714,8 +6616,7 @@ define void @v_shuffle_v2i64_v8i64__13_6(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v12, v16
-; GFX942-NEXT: v_mov_b32_e32 v13, v17
+; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v20, v[10:13], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -6770,8 +6671,7 @@ define void @v_shuffle_v2i64_v8i64__14_6(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v14, v16
-; GFX942-NEXT: v_mov_b32_e32 v15, v17
+; GFX942-NEXT: v_mov_b64_e32 v[14:15], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v20, v[12:15], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -6855,8 +6755,7 @@ define void @v_shuffle_v2i64_v8i64__0_7(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v14
-; GFX942-NEXT: v_mov_b32_e32 v3, v15
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[14:15]
; GFX942-NEXT: global_store_dwordx4 v16, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -6900,8 +6799,7 @@ define void @v_shuffle_v2i64_v8i64__1_7(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v14
-; GFX942-NEXT: v_mov_b32_e32 v5, v15
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[14:15]
; GFX942-NEXT: global_store_dwordx4 v16, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -6945,8 +6843,7 @@ define void @v_shuffle_v2i64_v8i64__2_7(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v14
-; GFX942-NEXT: v_mov_b32_e32 v7, v15
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[14:15]
; GFX942-NEXT: global_store_dwordx4 v16, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -6990,8 +6887,7 @@ define void @v_shuffle_v2i64_v8i64__3_7(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v14
-; GFX942-NEXT: v_mov_b32_e32 v9, v15
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[14:15]
; GFX942-NEXT: global_store_dwordx4 v16, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -7035,8 +6931,7 @@ define void @v_shuffle_v2i64_v8i64__4_7(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v14
-; GFX942-NEXT: v_mov_b32_e32 v11, v15
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[14:15]
; GFX942-NEXT: global_store_dwordx4 v16, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -7080,8 +6975,7 @@ define void @v_shuffle_v2i64_v8i64__5_7(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v12, v14
-; GFX942-NEXT: v_mov_b32_e32 v13, v15
+; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[14:15]
; GFX942-NEXT: global_store_dwordx4 v16, v[10:13], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -7165,8 +7059,7 @@ define void @v_shuffle_v2i64_v8i64__7_7(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v16, v14
-; GFX942-NEXT: v_mov_b32_e32 v17, v15
+; GFX942-NEXT: v_mov_b64_e32 v[16:17], v[14:15]
; GFX942-NEXT: global_store_dwordx4 v18, v[14:17], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -7259,8 +7152,7 @@ define void @v_shuffle_v2i64_v8i64__9_7(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v16
-; GFX942-NEXT: v_mov_b32_e32 v5, v17
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v18, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -7315,8 +7207,7 @@ define void @v_shuffle_v2i64_v8i64__10_7(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v16
-; GFX942-NEXT: v_mov_b32_e32 v7, v17
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v18, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -7371,8 +7262,7 @@ define void @v_shuffle_v2i64_v8i64__11_7(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v16
-; GFX942-NEXT: v_mov_b32_e32 v9, v17
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v18, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -7427,8 +7317,7 @@ define void @v_shuffle_v2i64_v8i64__12_7(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v16
-; GFX942-NEXT: v_mov_b32_e32 v11, v17
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v18, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -7483,8 +7372,7 @@ define void @v_shuffle_v2i64_v8i64__13_7(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v12, v16
-; GFX942-NEXT: v_mov_b32_e32 v13, v17
+; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v18, v[10:13], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -7539,8 +7427,7 @@ define void @v_shuffle_v2i64_v8i64__14_7(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v14, v16
-; GFX942-NEXT: v_mov_b32_e32 v15, v17
+; GFX942-NEXT: v_mov_b64_e32 v[14:15], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v18, v[12:15], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -7919,8 +7806,7 @@ define void @v_shuffle_v2i64_v8i64__9_8(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v0
-; GFX942-NEXT: v_mov_b32_e32 v5, v1
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v16, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -7965,8 +7851,7 @@ define void @v_shuffle_v2i64_v8i64__10_8(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v0
-; GFX942-NEXT: v_mov_b32_e32 v7, v1
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v16, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -8011,8 +7896,7 @@ define void @v_shuffle_v2i64_v8i64__11_8(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v0
-; GFX942-NEXT: v_mov_b32_e32 v9, v1
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v16, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -8057,8 +7941,7 @@ define void @v_shuffle_v2i64_v8i64__12_8(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v0
-; GFX942-NEXT: v_mov_b32_e32 v11, v1
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v16, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -8103,8 +7986,7 @@ define void @v_shuffle_v2i64_v8i64__13_8(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v12, v0
-; GFX942-NEXT: v_mov_b32_e32 v13, v1
+; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v16, v[10:13], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -8149,8 +8031,7 @@ define void @v_shuffle_v2i64_v8i64__14_8(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v14, v0
-; GFX942-NEXT: v_mov_b32_e32 v15, v1
+; GFX942-NEXT: v_mov_b64_e32 v[14:15], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v16, v[12:15], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -8245,8 +8126,7 @@ define void @v_shuffle_v2i64_v8i64__0_9(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[2:17]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v4
-; GFX942-NEXT: v_mov_b32_e32 v3, v5
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v18, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -8301,8 +8181,7 @@ define void @v_shuffle_v2i64_v8i64__1_9(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[4:19]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v6
-; GFX942-NEXT: v_mov_b32_e32 v5, v7
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v20, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -8357,8 +8236,7 @@ define void @v_shuffle_v2i64_v8i64__2_9(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[6:21]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v8
-; GFX942-NEXT: v_mov_b32_e32 v7, v9
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[8:9]
; GFX942-NEXT: global_store_dwordx4 v22, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -8413,8 +8291,7 @@ define void @v_shuffle_v2i64_v8i64__3_9(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[8:23]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v10
-; GFX942-NEXT: v_mov_b32_e32 v9, v11
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[10:11]
; GFX942-NEXT: global_store_dwordx4 v24, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -8469,8 +8346,7 @@ define void @v_shuffle_v2i64_v8i64__4_9(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[10:25]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v12
-; GFX942-NEXT: v_mov_b32_e32 v11, v13
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[12:13]
; GFX942-NEXT: global_store_dwordx4 v26, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -8525,8 +8401,7 @@ define void @v_shuffle_v2i64_v8i64__5_9(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[12:27]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v12, v14
-; GFX942-NEXT: v_mov_b32_e32 v13, v15
+; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[14:15]
; GFX942-NEXT: global_store_dwordx4 v28, v[10:13], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -8581,8 +8456,7 @@ define void @v_shuffle_v2i64_v8i64__6_9(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[14:29]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v14, v16
-; GFX942-NEXT: v_mov_b32_e32 v15, v17
+; GFX942-NEXT: v_mov_b64_e32 v[14:15], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v30, v[12:15], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -8633,8 +8507,7 @@ define void @v_shuffle_v2i64_v8i64__7_9(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[16:31]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v32, 0
-; GFX942-NEXT: v_mov_b32_e32 v16, v18
-; GFX942-NEXT: v_mov_b32_e32 v17, v19
+; GFX942-NEXT: v_mov_b64_e32 v[16:17], v[18:19]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
@@ -8722,8 +8595,7 @@ define void @v_shuffle_v2i64_v8i64__9_9(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v2
-; GFX942-NEXT: v_mov_b32_e32 v5, v3
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v16, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -8768,8 +8640,7 @@ define void @v_shuffle_v2i64_v8i64__10_9(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v2
-; GFX942-NEXT: v_mov_b32_e32 v7, v3
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v16, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -8814,8 +8685,7 @@ define void @v_shuffle_v2i64_v8i64__11_9(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v2
-; GFX942-NEXT: v_mov_b32_e32 v9, v3
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v16, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -8860,8 +8730,7 @@ define void @v_shuffle_v2i64_v8i64__12_9(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v2
-; GFX942-NEXT: v_mov_b32_e32 v11, v3
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v16, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -8906,8 +8775,7 @@ define void @v_shuffle_v2i64_v8i64__13_9(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v12, v2
-; GFX942-NEXT: v_mov_b32_e32 v13, v3
+; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v16, v[10:13], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -8952,8 +8820,7 @@ define void @v_shuffle_v2i64_v8i64__14_9(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v14, v2
-; GFX942-NEXT: v_mov_b32_e32 v15, v3
+; GFX942-NEXT: v_mov_b64_e32 v[14:15], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v16, v[12:15], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -9048,8 +8915,7 @@ define void @v_shuffle_v2i64_v8i64__0_10(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[2:17]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v6
-; GFX942-NEXT: v_mov_b32_e32 v3, v7
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v18, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -9104,8 +8970,7 @@ define void @v_shuffle_v2i64_v8i64__1_10(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[4:19]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v8
-; GFX942-NEXT: v_mov_b32_e32 v5, v9
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[8:9]
; GFX942-NEXT: global_store_dwordx4 v20, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -9160,8 +9025,7 @@ define void @v_shuffle_v2i64_v8i64__2_10(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[6:21]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v10
-; GFX942-NEXT: v_mov_b32_e32 v7, v11
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[10:11]
; GFX942-NEXT: global_store_dwordx4 v22, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -9216,8 +9080,7 @@ define void @v_shuffle_v2i64_v8i64__3_10(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[8:23]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v12
-; GFX942-NEXT: v_mov_b32_e32 v9, v13
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[12:13]
; GFX942-NEXT: global_store_dwordx4 v24, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -9272,8 +9135,7 @@ define void @v_shuffle_v2i64_v8i64__4_10(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[10:25]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v14
-; GFX942-NEXT: v_mov_b32_e32 v11, v15
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[14:15]
; GFX942-NEXT: global_store_dwordx4 v26, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -9328,8 +9190,7 @@ define void @v_shuffle_v2i64_v8i64__5_10(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[12:27]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v12, v16
-; GFX942-NEXT: v_mov_b32_e32 v13, v17
+; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v28, v[10:13], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -9384,8 +9245,7 @@ define void @v_shuffle_v2i64_v8i64__6_10(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[14:29]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v14, v18
-; GFX942-NEXT: v_mov_b32_e32 v15, v19
+; GFX942-NEXT: v_mov_b64_e32 v[14:15], v[18:19]
; GFX942-NEXT: global_store_dwordx4 v30, v[12:15], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -9436,8 +9296,7 @@ define void @v_shuffle_v2i64_v8i64__7_10(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[16:31]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v32, 0
-; GFX942-NEXT: v_mov_b32_e32 v16, v20
-; GFX942-NEXT: v_mov_b32_e32 v17, v21
+; GFX942-NEXT: v_mov_b64_e32 v[16:17], v[20:21]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
@@ -9485,8 +9344,7 @@ define void @v_shuffle_v2i64_v8i64__8_10(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v4
-; GFX942-NEXT: v_mov_b32_e32 v3, v5
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v16, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -9571,8 +9429,7 @@ define void @v_shuffle_v2i64_v8i64__10_10(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v4
-; GFX942-NEXT: v_mov_b32_e32 v7, v5
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v16, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -9617,8 +9474,7 @@ define void @v_shuffle_v2i64_v8i64__11_10(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v4
-; GFX942-NEXT: v_mov_b32_e32 v9, v5
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v16, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -9663,8 +9519,7 @@ define void @v_shuffle_v2i64_v8i64__12_10(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v4
-; GFX942-NEXT: v_mov_b32_e32 v11, v5
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v16, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -9709,8 +9564,7 @@ define void @v_shuffle_v2i64_v8i64__13_10(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v12, v4
-; GFX942-NEXT: v_mov_b32_e32 v13, v5
+; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v16, v[10:13], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -9755,8 +9609,7 @@ define void @v_shuffle_v2i64_v8i64__14_10(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v14, v4
-; GFX942-NEXT: v_mov_b32_e32 v15, v5
+; GFX942-NEXT: v_mov_b64_e32 v[14:15], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v16, v[12:15], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -9851,8 +9704,7 @@ define void @v_shuffle_v2i64_v8i64__0_11(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[2:17]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v8
-; GFX942-NEXT: v_mov_b32_e32 v3, v9
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[8:9]
; GFX942-NEXT: global_store_dwordx4 v18, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -9907,8 +9759,7 @@ define void @v_shuffle_v2i64_v8i64__1_11(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[4:19]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v10
-; GFX942-NEXT: v_mov_b32_e32 v5, v11
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[10:11]
; GFX942-NEXT: global_store_dwordx4 v20, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -9963,8 +9814,7 @@ define void @v_shuffle_v2i64_v8i64__2_11(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[6:21]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v12
-; GFX942-NEXT: v_mov_b32_e32 v7, v13
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[12:13]
; GFX942-NEXT: global_store_dwordx4 v22, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -10019,8 +9869,7 @@ define void @v_shuffle_v2i64_v8i64__3_11(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[8:23]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v14
-; GFX942-NEXT: v_mov_b32_e32 v9, v15
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[14:15]
; GFX942-NEXT: global_store_dwordx4 v24, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -10075,8 +9924,7 @@ define void @v_shuffle_v2i64_v8i64__4_11(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[10:25]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v16
-; GFX942-NEXT: v_mov_b32_e32 v11, v17
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v26, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -10131,8 +9979,7 @@ define void @v_shuffle_v2i64_v8i64__5_11(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[12:27]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v12, v18
-; GFX942-NEXT: v_mov_b32_e32 v13, v19
+; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[18:19]
; GFX942-NEXT: global_store_dwordx4 v28, v[10:13], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -10187,8 +10034,7 @@ define void @v_shuffle_v2i64_v8i64__6_11(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[14:29]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v14, v20
-; GFX942-NEXT: v_mov_b32_e32 v15, v21
+; GFX942-NEXT: v_mov_b64_e32 v[14:15], v[20:21]
; GFX942-NEXT: global_store_dwordx4 v30, v[12:15], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -10239,8 +10085,7 @@ define void @v_shuffle_v2i64_v8i64__7_11(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[16:31]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v32, 0
-; GFX942-NEXT: v_mov_b32_e32 v16, v22
-; GFX942-NEXT: v_mov_b32_e32 v17, v23
+; GFX942-NEXT: v_mov_b64_e32 v[16:17], v[22:23]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
@@ -10288,8 +10133,7 @@ define void @v_shuffle_v2i64_v8i64__8_11(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v6
-; GFX942-NEXT: v_mov_b32_e32 v3, v7
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v16, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -10334,8 +10178,7 @@ define void @v_shuffle_v2i64_v8i64__9_11(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v6
-; GFX942-NEXT: v_mov_b32_e32 v5, v7
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v16, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -10420,8 +10263,7 @@ define void @v_shuffle_v2i64_v8i64__11_11(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v6
-; GFX942-NEXT: v_mov_b32_e32 v9, v7
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v16, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -10466,8 +10308,7 @@ define void @v_shuffle_v2i64_v8i64__12_11(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v6
-; GFX942-NEXT: v_mov_b32_e32 v11, v7
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v16, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -10512,8 +10353,7 @@ define void @v_shuffle_v2i64_v8i64__13_11(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v12, v6
-; GFX942-NEXT: v_mov_b32_e32 v13, v7
+; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v16, v[10:13], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -10558,8 +10398,7 @@ define void @v_shuffle_v2i64_v8i64__14_11(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v14, v6
-; GFX942-NEXT: v_mov_b32_e32 v15, v7
+; GFX942-NEXT: v_mov_b64_e32 v[14:15], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v16, v[12:15], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -10654,8 +10493,7 @@ define void @v_shuffle_v2i64_v8i64__0_12(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[2:17]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v10
-; GFX942-NEXT: v_mov_b32_e32 v3, v11
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[10:11]
; GFX942-NEXT: global_store_dwordx4 v18, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -10710,8 +10548,7 @@ define void @v_shuffle_v2i64_v8i64__1_12(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[4:19]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v12
-; GFX942-NEXT: v_mov_b32_e32 v5, v13
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[12:13]
; GFX942-NEXT: global_store_dwordx4 v20, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -10766,8 +10603,7 @@ define void @v_shuffle_v2i64_v8i64__2_12(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[6:21]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v14
-; GFX942-NEXT: v_mov_b32_e32 v7, v15
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[14:15]
; GFX942-NEXT: global_store_dwordx4 v22, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -10822,8 +10658,7 @@ define void @v_shuffle_v2i64_v8i64__3_12(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[8:23]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v16
-; GFX942-NEXT: v_mov_b32_e32 v9, v17
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v24, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -10878,8 +10713,7 @@ define void @v_shuffle_v2i64_v8i64__4_12(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[10:25]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v18
-; GFX942-NEXT: v_mov_b32_e32 v11, v19
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[18:19]
; GFX942-NEXT: global_store_dwordx4 v26, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -10934,8 +10768,7 @@ define void @v_shuffle_v2i64_v8i64__5_12(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[12:27]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v12, v20
-; GFX942-NEXT: v_mov_b32_e32 v13, v21
+; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[20:21]
; GFX942-NEXT: global_store_dwordx4 v28, v[10:13], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -10990,8 +10823,7 @@ define void @v_shuffle_v2i64_v8i64__6_12(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[14:29]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v14, v22
-; GFX942-NEXT: v_mov_b32_e32 v15, v23
+; GFX942-NEXT: v_mov_b64_e32 v[14:15], v[22:23]
; GFX942-NEXT: global_store_dwordx4 v30, v[12:15], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -11042,8 +10874,7 @@ define void @v_shuffle_v2i64_v8i64__7_12(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[16:31]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v32, 0
-; GFX942-NEXT: v_mov_b32_e32 v16, v24
-; GFX942-NEXT: v_mov_b32_e32 v17, v25
+; GFX942-NEXT: v_mov_b64_e32 v[16:17], v[24:25]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
@@ -11091,8 +10922,7 @@ define void @v_shuffle_v2i64_v8i64__8_12(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v8
-; GFX942-NEXT: v_mov_b32_e32 v3, v9
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[8:9]
; GFX942-NEXT: global_store_dwordx4 v16, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -11137,8 +10967,7 @@ define void @v_shuffle_v2i64_v8i64__9_12(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v8
-; GFX942-NEXT: v_mov_b32_e32 v5, v9
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[8:9]
; GFX942-NEXT: global_store_dwordx4 v16, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -11183,8 +11012,7 @@ define void @v_shuffle_v2i64_v8i64__10_12(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v8
-; GFX942-NEXT: v_mov_b32_e32 v7, v9
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[8:9]
; GFX942-NEXT: global_store_dwordx4 v16, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -11269,8 +11097,7 @@ define void @v_shuffle_v2i64_v8i64__12_12(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v8
-; GFX942-NEXT: v_mov_b32_e32 v11, v9
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[8:9]
; GFX942-NEXT: global_store_dwordx4 v16, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -11315,8 +11142,7 @@ define void @v_shuffle_v2i64_v8i64__13_12(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v12, v8
-; GFX942-NEXT: v_mov_b32_e32 v13, v9
+; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[8:9]
; GFX942-NEXT: global_store_dwordx4 v16, v[10:13], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -11361,8 +11187,7 @@ define void @v_shuffle_v2i64_v8i64__14_12(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v14, v8
-; GFX942-NEXT: v_mov_b32_e32 v15, v9
+; GFX942-NEXT: v_mov_b64_e32 v[14:15], v[8:9]
; GFX942-NEXT: global_store_dwordx4 v16, v[12:15], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -11457,8 +11282,7 @@ define void @v_shuffle_v2i64_v8i64__0_13(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[2:17]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v12
-; GFX942-NEXT: v_mov_b32_e32 v3, v13
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[12:13]
; GFX942-NEXT: global_store_dwordx4 v18, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -11513,8 +11337,7 @@ define void @v_shuffle_v2i64_v8i64__1_13(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[4:19]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v14
-; GFX942-NEXT: v_mov_b32_e32 v5, v15
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[14:15]
; GFX942-NEXT: global_store_dwordx4 v20, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -11569,8 +11392,7 @@ define void @v_shuffle_v2i64_v8i64__2_13(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[6:21]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v16
-; GFX942-NEXT: v_mov_b32_e32 v7, v17
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v22, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -11625,8 +11447,7 @@ define void @v_shuffle_v2i64_v8i64__3_13(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[8:23]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v18
-; GFX942-NEXT: v_mov_b32_e32 v9, v19
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[18:19]
; GFX942-NEXT: global_store_dwordx4 v24, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -11681,8 +11502,7 @@ define void @v_shuffle_v2i64_v8i64__4_13(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[10:25]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v20
-; GFX942-NEXT: v_mov_b32_e32 v11, v21
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[20:21]
; GFX942-NEXT: global_store_dwordx4 v26, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -11737,8 +11557,7 @@ define void @v_shuffle_v2i64_v8i64__5_13(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[12:27]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v12, v22
-; GFX942-NEXT: v_mov_b32_e32 v13, v23
+; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[22:23]
; GFX942-NEXT: global_store_dwordx4 v28, v[10:13], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -11793,8 +11612,7 @@ define void @v_shuffle_v2i64_v8i64__6_13(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[14:29]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v14, v24
-; GFX942-NEXT: v_mov_b32_e32 v15, v25
+; GFX942-NEXT: v_mov_b64_e32 v[14:15], v[24:25]
; GFX942-NEXT: global_store_dwordx4 v30, v[12:15], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -11845,8 +11663,7 @@ define void @v_shuffle_v2i64_v8i64__7_13(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[16:31]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v32, 0
-; GFX942-NEXT: v_mov_b32_e32 v16, v26
-; GFX942-NEXT: v_mov_b32_e32 v17, v27
+; GFX942-NEXT: v_mov_b64_e32 v[16:17], v[26:27]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
@@ -11894,8 +11711,7 @@ define void @v_shuffle_v2i64_v8i64__8_13(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v10
-; GFX942-NEXT: v_mov_b32_e32 v3, v11
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[10:11]
; GFX942-NEXT: global_store_dwordx4 v16, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -11940,8 +11756,7 @@ define void @v_shuffle_v2i64_v8i64__9_13(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v10
-; GFX942-NEXT: v_mov_b32_e32 v5, v11
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[10:11]
; GFX942-NEXT: global_store_dwordx4 v16, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -11986,8 +11801,7 @@ define void @v_shuffle_v2i64_v8i64__10_13(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v10
-; GFX942-NEXT: v_mov_b32_e32 v7, v11
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[10:11]
; GFX942-NEXT: global_store_dwordx4 v16, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -12032,8 +11846,7 @@ define void @v_shuffle_v2i64_v8i64__11_13(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v10
-; GFX942-NEXT: v_mov_b32_e32 v9, v11
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[10:11]
; GFX942-NEXT: global_store_dwordx4 v16, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -12118,8 +11931,7 @@ define void @v_shuffle_v2i64_v8i64__13_13(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v12, v10
-; GFX942-NEXT: v_mov_b32_e32 v13, v11
+; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[10:11]
; GFX942-NEXT: global_store_dwordx4 v16, v[10:13], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -12164,8 +11976,7 @@ define void @v_shuffle_v2i64_v8i64__14_13(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v14, v10
-; GFX942-NEXT: v_mov_b32_e32 v15, v11
+; GFX942-NEXT: v_mov_b64_e32 v[14:15], v[10:11]
; GFX942-NEXT: global_store_dwordx4 v16, v[12:15], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -12260,8 +12071,7 @@ define void @v_shuffle_v2i64_v8i64__0_14(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[2:17]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v14
-; GFX942-NEXT: v_mov_b32_e32 v3, v15
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[14:15]
; GFX942-NEXT: global_store_dwordx4 v18, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -12316,8 +12126,7 @@ define void @v_shuffle_v2i64_v8i64__1_14(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[4:19]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v16
-; GFX942-NEXT: v_mov_b32_e32 v5, v17
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v20, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -12372,8 +12181,7 @@ define void @v_shuffle_v2i64_v8i64__2_14(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[6:21]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v18
-; GFX942-NEXT: v_mov_b32_e32 v7, v19
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[18:19]
; GFX942-NEXT: global_store_dwordx4 v22, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -12428,8 +12236,7 @@ define void @v_shuffle_v2i64_v8i64__3_14(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[8:23]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v20
-; GFX942-NEXT: v_mov_b32_e32 v9, v21
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[20:21]
; GFX942-NEXT: global_store_dwordx4 v24, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -12484,8 +12291,7 @@ define void @v_shuffle_v2i64_v8i64__4_14(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[10:25]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v22
-; GFX942-NEXT: v_mov_b32_e32 v11, v23
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[22:23]
; GFX942-NEXT: global_store_dwordx4 v26, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -12540,8 +12346,7 @@ define void @v_shuffle_v2i64_v8i64__5_14(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[12:27]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v12, v24
-; GFX942-NEXT: v_mov_b32_e32 v13, v25
+; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[24:25]
; GFX942-NEXT: global_store_dwordx4 v28, v[10:13], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -12596,8 +12401,7 @@ define void @v_shuffle_v2i64_v8i64__6_14(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[14:29]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v14, v26
-; GFX942-NEXT: v_mov_b32_e32 v15, v27
+; GFX942-NEXT: v_mov_b64_e32 v[14:15], v[26:27]
; GFX942-NEXT: global_store_dwordx4 v30, v[12:15], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -12648,8 +12452,7 @@ define void @v_shuffle_v2i64_v8i64__7_14(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[16:31]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v32, 0
-; GFX942-NEXT: v_mov_b32_e32 v16, v28
-; GFX942-NEXT: v_mov_b32_e32 v17, v29
+; GFX942-NEXT: v_mov_b64_e32 v[16:17], v[28:29]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
@@ -12697,8 +12500,7 @@ define void @v_shuffle_v2i64_v8i64__8_14(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v12
-; GFX942-NEXT: v_mov_b32_e32 v3, v13
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[12:13]
; GFX942-NEXT: global_store_dwordx4 v16, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -12743,8 +12545,7 @@ define void @v_shuffle_v2i64_v8i64__9_14(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v12
-; GFX942-NEXT: v_mov_b32_e32 v5, v13
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[12:13]
; GFX942-NEXT: global_store_dwordx4 v16, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -12789,8 +12590,7 @@ define void @v_shuffle_v2i64_v8i64__10_14(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v12
-; GFX942-NEXT: v_mov_b32_e32 v7, v13
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[12:13]
; GFX942-NEXT: global_store_dwordx4 v16, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -12835,8 +12635,7 @@ define void @v_shuffle_v2i64_v8i64__11_14(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v12
-; GFX942-NEXT: v_mov_b32_e32 v9, v13
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[12:13]
; GFX942-NEXT: global_store_dwordx4 v16, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -12881,8 +12680,7 @@ define void @v_shuffle_v2i64_v8i64__12_14(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v12
-; GFX942-NEXT: v_mov_b32_e32 v11, v13
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[12:13]
; GFX942-NEXT: global_store_dwordx4 v16, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -12967,8 +12765,7 @@ define void @v_shuffle_v2i64_v8i64__14_14(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v14, v12
-; GFX942-NEXT: v_mov_b32_e32 v15, v13
+; GFX942-NEXT: v_mov_b64_e32 v[14:15], v[12:13]
; GFX942-NEXT: global_store_dwordx4 v16, v[12:15], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -13063,8 +12860,7 @@ define void @v_shuffle_v2i64_v8i64__0_15(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[2:17]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v16
-; GFX942-NEXT: v_mov_b32_e32 v3, v17
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[16:17]
; GFX942-NEXT: global_store_dwordx4 v18, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -13119,8 +12915,7 @@ define void @v_shuffle_v2i64_v8i64__1_15(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[4:19]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v18
-; GFX942-NEXT: v_mov_b32_e32 v5, v19
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[18:19]
; GFX942-NEXT: global_store_dwordx4 v20, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -13175,8 +12970,7 @@ define void @v_shuffle_v2i64_v8i64__2_15(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[6:21]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v20
-; GFX942-NEXT: v_mov_b32_e32 v7, v21
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[20:21]
; GFX942-NEXT: global_store_dwordx4 v22, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -13231,8 +13025,7 @@ define void @v_shuffle_v2i64_v8i64__3_15(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[8:23]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v22
-; GFX942-NEXT: v_mov_b32_e32 v9, v23
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[22:23]
; GFX942-NEXT: global_store_dwordx4 v24, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -13287,8 +13080,7 @@ define void @v_shuffle_v2i64_v8i64__4_15(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[10:25]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v24
-; GFX942-NEXT: v_mov_b32_e32 v11, v25
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[24:25]
; GFX942-NEXT: global_store_dwordx4 v26, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -13343,8 +13135,7 @@ define void @v_shuffle_v2i64_v8i64__5_15(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[12:27]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v12, v26
-; GFX942-NEXT: v_mov_b32_e32 v13, v27
+; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[26:27]
; GFX942-NEXT: global_store_dwordx4 v28, v[10:13], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -13399,8 +13190,7 @@ define void @v_shuffle_v2i64_v8i64__6_15(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[14:29]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v14, v28
-; GFX942-NEXT: v_mov_b32_e32 v15, v29
+; GFX942-NEXT: v_mov_b64_e32 v[14:15], v[28:29]
; GFX942-NEXT: global_store_dwordx4 v30, v[12:15], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -13451,8 +13241,7 @@ define void @v_shuffle_v2i64_v8i64__7_15(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[16:31]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v32, 0
-; GFX942-NEXT: v_mov_b32_e32 v16, v30
-; GFX942-NEXT: v_mov_b32_e32 v17, v31
+; GFX942-NEXT: v_mov_b64_e32 v[16:17], v[30:31]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
@@ -13500,8 +13289,7 @@ define void @v_shuffle_v2i64_v8i64__8_15(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v14
-; GFX942-NEXT: v_mov_b32_e32 v3, v15
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[14:15]
; GFX942-NEXT: global_store_dwordx4 v16, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -13546,8 +13334,7 @@ define void @v_shuffle_v2i64_v8i64__9_15(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v14
-; GFX942-NEXT: v_mov_b32_e32 v5, v15
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[14:15]
; GFX942-NEXT: global_store_dwordx4 v16, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -13592,8 +13379,7 @@ define void @v_shuffle_v2i64_v8i64__10_15(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v14
-; GFX942-NEXT: v_mov_b32_e32 v7, v15
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[14:15]
; GFX942-NEXT: global_store_dwordx4 v16, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -13638,8 +13424,7 @@ define void @v_shuffle_v2i64_v8i64__11_15(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v14
-; GFX942-NEXT: v_mov_b32_e32 v9, v15
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[14:15]
; GFX942-NEXT: global_store_dwordx4 v16, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -13684,8 +13469,7 @@ define void @v_shuffle_v2i64_v8i64__12_15(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v14
-; GFX942-NEXT: v_mov_b32_e32 v11, v15
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[14:15]
; GFX942-NEXT: global_store_dwordx4 v16, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -13730,8 +13514,7 @@ define void @v_shuffle_v2i64_v8i64__13_15(ptr addrspace(1) inreg %ptr) #0 {
; GFX942-NEXT: ; def v[0:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v12, v14
-; GFX942-NEXT: v_mov_b32_e32 v13, v15
+; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[14:15]
; GFX942-NEXT: global_store_dwordx4 v16, v[10:13], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -13869,8 +13652,7 @@ define void @s_shuffle_v2i64_v8i64__1_u() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -13954,8 +13736,7 @@ define void @s_shuffle_v2i64_v8i64__3_u() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -14043,8 +13824,7 @@ define void @s_shuffle_v2i64_v8i64__5_u() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -14133,8 +13913,7 @@ define void @s_shuffle_v2i64_v8i64__7_u() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -14192,8 +13971,7 @@ define void @s_shuffle_v2i64_v8i64__9_u() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -14279,8 +14057,7 @@ define void @s_shuffle_v2i64_v8i64__11_u() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -14370,8 +14147,7 @@ define void @s_shuffle_v2i64_v8i64__13_u() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -14462,8 +14238,7 @@ define void @s_shuffle_v2i64_v8i64__15_u() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -14522,10 +14297,8 @@ define void @s_shuffle_v2i64_v8i64__15_0() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -14580,8 +14353,7 @@ define void @s_shuffle_v2i64_v8i64__15_1() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:27]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s26
-; GFX942-NEXT: s_mov_b32 s9, s27
+; GFX942-NEXT: s_mov_b64 s[8:9], s[26:27]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -14662,10 +14434,8 @@ define void @s_shuffle_v2i64_v8i64__15_2() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:23]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s22
-; GFX942-NEXT: s_mov_b32 s9, s23
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[22:23]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -14720,8 +14490,7 @@ define void @s_shuffle_v2i64_v8i64__15_3() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:27]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s26
-; GFX942-NEXT: s_mov_b32 s9, s27
+; GFX942-NEXT: s_mov_b64 s[8:9], s[26:27]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -14804,14 +14573,12 @@ define void @s_shuffle_v2i64_v8i64__15_4() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[16:31]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s30
-; GFX942-NEXT: s_mov_b32 s9, s31
+; GFX942-NEXT: s_mov_b64 s[8:9], s[30:31]
; GFX942-NEXT: v_readlane_b32 s30, v0, 0
-; GFX942-NEXT: s_mov_b32 s11, s13
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -14897,8 +14664,7 @@ define void @s_shuffle_v2i64_v8i64__15_5() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:27]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s26
-; GFX942-NEXT: s_mov_b32 s9, s27
+; GFX942-NEXT: s_mov_b64 s[8:9], s[26:27]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -15008,11 +14774,9 @@ define void @s_shuffle_v2i64_v8i64__15_6() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[16:31]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s30
-; GFX942-NEXT: s_mov_b32 s9, s31
+; GFX942-NEXT: s_mov_b64 s[8:9], s[30:31]
; GFX942-NEXT: v_readlane_b32 s30, v0, 0
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -15127,8 +14891,7 @@ define void @s_shuffle_v2i64_v8i64__15_7() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[16:31]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s30
-; GFX942-NEXT: s_mov_b32 s13, s31
+; GFX942-NEXT: s_mov_b64 s[12:13], s[30:31]
; GFX942-NEXT: v_readlane_b32 s30, v0, 0
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
@@ -15185,10 +14948,8 @@ define void @s_shuffle_v2i64_v8i64__15_8() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -15201,18 +14962,43 @@ define void @s_shuffle_v2i64_v8i64__15_8() #0 {
}
define void @s_shuffle_v2i64_v8i64__15_9() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__15_9:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:23]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s22
-; GFX9-NEXT: s_mov_b32 s9, s23
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__15_9:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s22
+; GFX900-NEXT: s_mov_b32 s9, s23
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__15_9:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s22
+; GFX90A-NEXT: s_mov_b32 s9, s23
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__15_9:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:23]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[22:23]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%vec1 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> %vec1, <2 x i32> <i32 15, i32 9>
@@ -15257,10 +15043,8 @@ define void @s_shuffle_v2i64_v8i64__15_10() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -15273,18 +15057,43 @@ define void @s_shuffle_v2i64_v8i64__15_10() #0 {
}
define void @s_shuffle_v2i64_v8i64__15_11() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__15_11:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__15_11:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__15_11:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__15_11:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%vec1 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> %vec1, <2 x i32> <i32 15, i32 11>
@@ -15293,20 +15102,48 @@ define void @s_shuffle_v2i64_v8i64__15_11() #0 {
}
define void @s_shuffle_v2i64_v8i64__15_12() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__15_12:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__15_12:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__15_12:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__15_12:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%vec1 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> %vec1, <2 x i32> <i32 15, i32 12>
@@ -15351,8 +15188,7 @@ define void @s_shuffle_v2i64_v8i64__15_13() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -15401,10 +15237,8 @@ define void @s_shuffle_v2i64_v8i64__15_14() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -15453,8 +15287,7 @@ define void @s_shuffle_v2i64_v8i64__15_15() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
@@ -15501,8 +15334,7 @@ define void @s_shuffle_v2i64_v8i64__u_0() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -15514,18 +15346,43 @@ define void @s_shuffle_v2i64_v8i64__u_0() #0 {
}
define void @s_shuffle_v2i64_v8i64__0_0() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:23]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:23]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> zeroinitializer
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -15569,10 +15426,8 @@ define void @s_shuffle_v2i64_v8i64__1_0() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -15584,18 +15439,43 @@ define void @s_shuffle_v2i64_v8i64__1_0() #0 {
}
define void @s_shuffle_v2i64_v8i64__2_0() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__2_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__2_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__2_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__2_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 2, i32 0>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -15639,10 +15519,8 @@ define void @s_shuffle_v2i64_v8i64__3_0() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -15690,8 +15568,7 @@ define void @s_shuffle_v2i64_v8i64__4_0() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -15739,10 +15616,8 @@ define void @s_shuffle_v2i64_v8i64__5_0() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -15790,8 +15665,7 @@ define void @s_shuffle_v2i64_v8i64__6_0() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s0
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
@@ -15841,10 +15715,8 @@ define void @s_shuffle_v2i64_v8i64__7_0() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -15888,8 +15760,7 @@ define void @s_shuffle_v2i64_v8i64__8_0() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -15947,10 +15818,8 @@ define void @s_shuffle_v2i64_v8i64__9_0() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -16051,8 +15920,7 @@ define void @s_shuffle_v2i64_v8i64__10_0() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -16111,10 +15979,8 @@ define void @s_shuffle_v2i64_v8i64__11_0() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -16178,9 +16044,8 @@ define void @s_shuffle_v2i64_v8i64__12_0() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s16
+; GFX942-NEXT: s_mov_b64 s[10:11], s[16:17]
; GFX942-NEXT: v_readlane_b32 s30, v0, 0
-; GFX942-NEXT: s_mov_b32 s11, s17
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -16244,10 +16109,8 @@ define void @s_shuffle_v2i64_v8i64__13_0() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -16299,20 +16162,30 @@ define void @s_shuffle_v2i64_v8i64__14_0() #0 {
; GFX942-LABEL: s_shuffle_v2i64_v8i64__14_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: s_xor_saveexec_b64 s[0:1], -1
+; GFX942-NEXT: scratch_store_dword off, v0, s32 ; 4-byte Folded Spill
+; GFX942-NEXT: s_mov_b64 exec, s[0:1]
+; GFX942-NEXT: v_writelane_b32 v0, s30, 0
+; GFX942-NEXT: s_nop 1
+; GFX942-NEXT: v_writelane_b32 v0, s31, 1
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:15]
+; GFX942-NEXT: ; def s[16:31]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:19]
+; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s18, s0
-; GFX942-NEXT: s_mov_b32 s19, s1
-; GFX942-NEXT: s_mov_b64 s[8:9], s[16:17]
-; GFX942-NEXT: s_mov_b64 s[10:11], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
+; GFX942-NEXT: v_readlane_b32 s30, v0, 0
+; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: v_readlane_b32 s31, v0, 1
+; GFX942-NEXT: s_xor_saveexec_b64 s[0:1], -1
+; GFX942-NEXT: scratch_load_dword v0, off, s32 ; 4-byte Folded Reload
+; GFX942-NEXT: s_mov_b64 exec, s[0:1]
+; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%vec1 = call <8 x i64> asm "; def $0", "=s"()
@@ -16402,56 +16275,131 @@ define void @s_shuffle_v2i64_v8i64__0_1() #0 {
}
define void @s_shuffle_v2i64_v8i64__1_1() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:23]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <8 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 1, i32 1>
- call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v2i64_v8i64__2_1() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__2_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <8 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 2, i32 1>
- call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
- ret void
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:23]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <8 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v2i64_v8i64__2_1() #0 {
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__2_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__2_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__2_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <8 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 2, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
+ ret void
}
define void @s_shuffle_v2i64_v8i64__3_1() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__3_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:23]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__3_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__3_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__3_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:23]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 3, i32 1>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -16495,8 +16443,7 @@ define void @s_shuffle_v2i64_v8i64__4_1() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s2
-; GFX942-NEXT: s_mov_b32 s11, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -16508,18 +16455,43 @@ define void @s_shuffle_v2i64_v8i64__4_1() #0 {
}
define void @s_shuffle_v2i64_v8i64__5_1() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__5_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:23]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__5_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__5_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__5_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:23]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 5, i32 1>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -16563,8 +16535,7 @@ define void @s_shuffle_v2i64_v8i64__6_1() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s2
-; GFX942-NEXT: s_mov_b32 s15, s3
+; GFX942-NEXT: s_mov_b64 s[14:15], s[2:3]
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
@@ -16578,18 +16549,43 @@ define void @s_shuffle_v2i64_v8i64__6_1() #0 {
}
define void @s_shuffle_v2i64_v8i64__7_1() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__7_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:23]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s22
-; GFX9-NEXT: s_mov_b32 s9, s23
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__7_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s22
+; GFX900-NEXT: s_mov_b32 s9, s23
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__7_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s22
+; GFX90A-NEXT: s_mov_b32 s9, s23
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__7_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:23]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[22:23]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 7, i32 1>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -16679,8 +16675,7 @@ define void @s_shuffle_v2i64_v8i64__9_1() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:27]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -16781,8 +16776,7 @@ define void @s_shuffle_v2i64_v8i64__10_1() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s2
-; GFX942-NEXT: s_mov_b32 s11, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -16837,8 +16831,7 @@ define void @s_shuffle_v2i64_v8i64__11_1() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:27]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -16948,9 +16941,8 @@ define void @s_shuffle_v2i64_v8i64__12_1() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s18
+; GFX942-NEXT: s_mov_b64 s[10:11], s[18:19]
; GFX942-NEXT: v_readlane_b32 s30, v0, 0
-; GFX942-NEXT: s_mov_b32 s11, s19
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -17010,8 +17002,7 @@ define void @s_shuffle_v2i64_v8i64__13_1() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:27]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s22
-; GFX942-NEXT: s_mov_b32 s9, s23
+; GFX942-NEXT: s_mov_b64 s[8:9], s[22:23]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -17121,8 +17112,7 @@ define void @s_shuffle_v2i64_v8i64__14_1() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s18
-; GFX942-NEXT: s_mov_b32 s15, s19
+; GFX942-NEXT: s_mov_b64 s[14:15], s[18:19]
; GFX942-NEXT: v_readlane_b32 s30, v0, 0
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
@@ -17175,8 +17165,7 @@ define void @s_shuffle_v2i64_v8i64__u_2() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -17188,33 +17177,12 @@ define void @s_shuffle_v2i64_v8i64__u_2() #0 {
}
define void @s_shuffle_v2i64_v8i64__0_2() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__0_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:23]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <8 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 0, i32 2>
- call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v2i64_v8i64__1_2() #0 {
-; GFX900-LABEL: s_shuffle_v2i64_v8i64__1_2:
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__0_2:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:23]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
; GFX900-NEXT: s_mov_b32 s10, s12
; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: ;;#ASMSTART
@@ -17222,14 +17190,12 @@ define void @s_shuffle_v2i64_v8i64__1_2() #0 {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v2i64_v8i64__1_2:
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__0_2:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:23]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
; GFX90A-NEXT: s_mov_b32 s10, s12
; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: ;;#ASMSTART
@@ -17237,54 +17203,32 @@ define void @s_shuffle_v2i64_v8i64__1_2() #0 {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v2i64_v8i64__1_2:
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__0_2:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:15]
+; GFX942-NEXT: ; def s[8:23]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 1, i32 2>
- call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v2i64_v8i64__2_2() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <8 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 2, i32 2>
+ %shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 0, i32 2>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
ret void
}
-define void @s_shuffle_v2i64_v8i64__3_2() #0 {
-; GFX900-LABEL: s_shuffle_v2i64_v8i64__3_2:
+define void @s_shuffle_v2i64_v8i64__1_2() #0 {
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__1_2:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:23]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
; GFX900-NEXT: s_mov_b32 s10, s12
; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: ;;#ASMSTART
@@ -17292,14 +17236,14 @@ define void @s_shuffle_v2i64_v8i64__3_2() #0 {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v2i64_v8i64__3_2:
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__1_2:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:23]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s14
-; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
; GFX90A-NEXT: s_mov_b32 s10, s12
; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: ;;#ASMSTART
@@ -17307,22 +17251,113 @@ define void @s_shuffle_v2i64_v8i64__3_2() #0 {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v2i64_v8i64__3_2:
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__1_2:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 3, i32 2>
+ %shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 1, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v2i64_v8i64__2_2() #0 {
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <8 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v2i64_v8i64__3_2() #0 {
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__3_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__3_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__3_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <8 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 3, i32 2>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
ret void
}
@@ -17364,8 +17399,7 @@ define void @s_shuffle_v2i64_v8i64__4_2() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -17413,10 +17447,8 @@ define void @s_shuffle_v2i64_v8i64__5_2() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -17464,8 +17496,7 @@ define void @s_shuffle_v2i64_v8i64__6_2() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
@@ -17515,10 +17546,8 @@ define void @s_shuffle_v2i64_v8i64__7_2() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -17562,8 +17591,7 @@ define void @s_shuffle_v2i64_v8i64__8_2() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -17643,10 +17671,8 @@ define void @s_shuffle_v2i64_v8i64__9_2() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:23]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -17730,8 +17756,7 @@ define void @s_shuffle_v2i64_v8i64__10_2() #0 {
; GFX942-NEXT: ; def s[4:19]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_readlane_b32 s30, v0, 0
-; GFX942-NEXT: s_mov_b32 s10, s20
-; GFX942-NEXT: s_mov_b32 s11, s21
+; GFX942-NEXT: s_mov_b64 s[10:11], s[20:21]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -17817,10 +17842,8 @@ define void @s_shuffle_v2i64_v8i64__11_2() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:23]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -17879,8 +17902,7 @@ define void @s_shuffle_v2i64_v8i64__12_2() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s16
-; GFX942-NEXT: s_mov_b32 s11, s17
+; GFX942-NEXT: s_mov_b64 s[10:11], s[16:17]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -17961,10 +17983,8 @@ define void @s_shuffle_v2i64_v8i64__13_2() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:23]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -18017,16 +18037,15 @@ define void @s_shuffle_v2i64_v8i64__14_2() #0 {
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:15]
+; GFX942-NEXT: ; def s[12:27]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:23]
+; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s22, s4
-; GFX942-NEXT: s_mov_b32 s23, s5
-; GFX942-NEXT: s_mov_b64 s[8:9], s[20:21]
-; GFX942-NEXT: s_mov_b64 s[10:11], s[22:23]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
+; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -18079,298 +18098,421 @@ define void @s_shuffle_v2i64_v8i64__u_3() #0 {
}
define void @s_shuffle_v2i64_v8i64__0_3() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__0_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:23]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <8 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 0, i32 3>
- call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v2i64_v8i64__1_3() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__1_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s6
-; GFX9-NEXT: s_mov_b32 s9, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <8 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 1, i32 3>
- call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v2i64_v8i64__2_3() #0 {
-; GFX900-LABEL: s_shuffle_v2i64_v8i64__2_3:
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__0_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:19]
+; GFX900-NEXT: ; def s[8:23]
; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v2i64_v8i64__2_3:
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__0_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:19]
+; GFX90A-NEXT: ; def s[8:23]
; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v2i64_v8i64__2_3:
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__0_3:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:19]
+; GFX942-NEXT: ; def s[8:23]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 2, i32 3>
- call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v2i64_v8i64__3_3() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <8 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 3, i32 3>
+ %shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 0, i32 3>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
ret void
}
-define void @s_shuffle_v2i64_v8i64__4_3() #0 {
-; GFX900-LABEL: s_shuffle_v2i64_v8i64__4_3:
+define void @s_shuffle_v2i64_v8i64__1_3() #0 {
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__1_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s14, s10
-; GFX900-NEXT: s_mov_b32 s15, s11
-; GFX900-NEXT: s_mov_b64 s[8:9], s[12:13]
-; GFX900-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v2i64_v8i64__4_3:
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__1_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s14, s10
-; GFX90A-NEXT: s_mov_b32 s15, s11
-; GFX90A-NEXT: s_mov_b64 s[8:9], s[12:13]
-; GFX90A-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v2i64_v8i64__4_3:
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__1_3:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:15]
+; GFX942-NEXT: ; def s[4:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s6
-; GFX942-NEXT: s_mov_b32 s11, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 4, i32 3>
- call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v2i64_v8i64__5_3() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__5_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <8 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 5, i32 3>
+ %shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 1, i32 3>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
ret void
}
-define void @s_shuffle_v2i64_v8i64__6_3() #0 {
-; GFX900-LABEL: s_shuffle_v2i64_v8i64__6_3:
+define void @s_shuffle_v2i64_v8i64__2_3() #0 {
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__2_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s18, s10
-; GFX900-NEXT: s_mov_b32 s19, s11
-; GFX900-NEXT: s_mov_b64 s[8:9], s[16:17]
-; GFX900-NEXT: s_mov_b64 s[10:11], s[18:19]
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v2i64_v8i64__6_3:
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__2_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s18, s10
-; GFX90A-NEXT: s_mov_b32 s19, s11
-; GFX90A-NEXT: s_mov_b64 s[8:9], s[16:17]
-; GFX90A-NEXT: s_mov_b64 s[10:11], s[18:19]
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v2i64_v8i64__6_3:
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__2_3:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:15]
+; GFX942-NEXT: ; def s[4:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s6
-; GFX942-NEXT: s_mov_b32 s15, s7
-; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
-; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 6, i32 3>
- call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v2i64_v8i64__7_3() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__7_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <8 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 7, i32 3>
+ %shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 2, i32 3>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
ret void
}
-define void @s_shuffle_v2i64_v8i64__8_3() #0 {
-; GFX900-LABEL: s_shuffle_v2i64_v8i64__8_3:
+define void @s_shuffle_v2i64_v8i64__3_3() #0 {
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__3_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:19]
; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v2i64_v8i64__8_3:
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__3_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:19]
; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v2i64_v8i64__8_3:
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__3_3:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 8, i32 3>
+ %shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 3, i32 3>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
ret void
}
-define void @s_shuffle_v2i64_v8i64__9_3() #0 {
-; GFX900-LABEL: s_shuffle_v2i64_v8i64__9_3:
+define void @s_shuffle_v2i64_v8i64__4_3() #0 {
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__4_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:27]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: s_mov_b64 s[8:9], s[12:13]
+; GFX900-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v2i64_v8i64__9_3:
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__4_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: s_mov_b64 s[8:9], s[12:13]
+; GFX90A-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__4_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <8 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 4, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v2i64_v8i64__5_3() #0 {
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__5_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__5_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__5_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <8 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 5, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v2i64_v8i64__6_3() #0 {
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__6_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s18, s10
+; GFX900-NEXT: s_mov_b32 s19, s11
+; GFX900-NEXT: s_mov_b64 s[8:9], s[16:17]
+; GFX900-NEXT: s_mov_b64 s[10:11], s[18:19]
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__6_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s18, s10
+; GFX90A-NEXT: s_mov_b32 s19, s11
+; GFX90A-NEXT: s_mov_b64 s[8:9], s[16:17]
+; GFX90A-NEXT: s_mov_b64 s[10:11], s[18:19]
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__6_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <8 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 6, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v2i64_v8i64__7_3() #0 {
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__7_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__7_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__7_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <8 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 7, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v2i64_v8i64__8_3() #0 {
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__8_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__8_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__8_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <8 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 8, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v2i64_v8i64__9_3() #0 {
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__9_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:27]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__9_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
@@ -18396,8 +18538,7 @@ define void @s_shuffle_v2i64_v8i64__9_3() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:27]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -18481,8 +18622,7 @@ define void @s_shuffle_v2i64_v8i64__10_3() #0 {
; GFX942-NEXT: ; def s[4:19]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_readlane_b32 s30, v0, 0
-; GFX942-NEXT: s_mov_b32 s10, s22
-; GFX942-NEXT: s_mov_b32 s11, s23
+; GFX942-NEXT: s_mov_b64 s[10:11], s[22:23]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -18542,8 +18682,7 @@ define void @s_shuffle_v2i64_v8i64__11_3() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:27]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -18624,8 +18763,7 @@ define void @s_shuffle_v2i64_v8i64__12_3() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s18
-; GFX942-NEXT: s_mov_b32 s11, s19
+; GFX942-NEXT: s_mov_b64 s[10:11], s[18:19]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -18680,8 +18818,7 @@ define void @s_shuffle_v2i64_v8i64__13_3() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:27]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s22
-; GFX942-NEXT: s_mov_b32 s9, s23
+; GFX942-NEXT: s_mov_b64 s[8:9], s[22:23]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -18762,8 +18899,7 @@ define void @s_shuffle_v2i64_v8i64__14_3() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s18
-; GFX942-NEXT: s_mov_b32 s15, s19
+; GFX942-NEXT: s_mov_b64 s[14:15], s[18:19]
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
@@ -18810,8 +18946,7 @@ define void @s_shuffle_v2i64_v8i64__u_4() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -18823,18 +18958,43 @@ define void @s_shuffle_v2i64_v8i64__u_4() #0 {
}
define void @s_shuffle_v2i64_v8i64__0_4() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__0_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:23]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s16
-; GFX9-NEXT: s_mov_b32 s11, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__0_4:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s16
+; GFX900-NEXT: s_mov_b32 s11, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__0_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s16
+; GFX90A-NEXT: s_mov_b32 s11, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__0_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:23]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 0, i32 4>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -18842,20 +19002,48 @@ define void @s_shuffle_v2i64_v8i64__0_4() #0 {
}
define void @s_shuffle_v2i64_v8i64__1_4() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__1_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s6
-; GFX9-NEXT: s_mov_b32 s9, s7
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__1_4:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__1_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__1_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 1, i32 4>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -18863,18 +19051,43 @@ define void @s_shuffle_v2i64_v8i64__1_4() #0 {
}
define void @s_shuffle_v2i64_v8i64__2_4() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__2_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__2_4:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__2_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__2_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 2, i32 4>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -18882,20 +19095,48 @@ define void @s_shuffle_v2i64_v8i64__2_4() #0 {
}
define void @s_shuffle_v2i64_v8i64__3_4() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__3_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__3_4:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__3_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__3_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 3, i32 4>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -18939,8 +19180,7 @@ define void @s_shuffle_v2i64_v8i64__4_4() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -18952,20 +19192,48 @@ define void @s_shuffle_v2i64_v8i64__4_4() #0 {
}
define void @s_shuffle_v2i64_v8i64__5_4() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__5_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__5_4:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__5_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__5_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 5, i32 4>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -18988,56 +19256,83 @@ define void @s_shuffle_v2i64_v8i64__6_4() #0 {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v2i64_v8i64__6_4:
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__6_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s18, s12
+; GFX90A-NEXT: s_mov_b32 s19, s13
+; GFX90A-NEXT: s_mov_b64 s[8:9], s[16:17]
+; GFX90A-NEXT: s_mov_b64 s[10:11], s[18:19]
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__6_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <8 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 6, i32 4>
+ call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v2i64_v8i64__7_4() #0 {
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__7_4:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__7_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s18, s12
-; GFX90A-NEXT: s_mov_b32 s19, s13
-; GFX90A-NEXT: s_mov_b64 s[8:9], s[16:17]
-; GFX90A-NEXT: s_mov_b64 s[10:11], s[18:19]
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v2i64_v8i64__6_4:
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__7_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:15]
+; GFX942-NEXT: ; def s[4:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s8
-; GFX942-NEXT: s_mov_b32 s15, s9
-; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
-; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <8 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 6, i32 4>
- call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v2i64_v8i64__7_4() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__7_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 7, i32 4>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -19077,8 +19372,7 @@ define void @s_shuffle_v2i64_v8i64__8_4() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -19160,14 +19454,12 @@ define void @s_shuffle_v2i64_v8i64__9_4() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[16:31]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
; GFX942-NEXT: v_readlane_b32 s30, v0, 0
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s11, s13
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -19227,8 +19519,7 @@ define void @s_shuffle_v2i64_v8i64__10_4() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s20
-; GFX942-NEXT: s_mov_b32 s11, s21
+; GFX942-NEXT: s_mov_b64 s[10:11], s[20:21]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -19311,14 +19602,12 @@ define void @s_shuffle_v2i64_v8i64__11_4() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[16:31]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s22
+; GFX942-NEXT: s_mov_b64 s[8:9], s[22:23]
; GFX942-NEXT: v_readlane_b32 s30, v0, 0
-; GFX942-NEXT: s_mov_b32 s9, s23
-; GFX942-NEXT: s_mov_b32 s11, s13
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -19404,8 +19693,7 @@ define void @s_shuffle_v2i64_v8i64__12_4() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s16
-; GFX942-NEXT: s_mov_b32 s11, s17
+; GFX942-NEXT: s_mov_b64 s[10:11], s[16:17]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -19488,14 +19776,12 @@ define void @s_shuffle_v2i64_v8i64__13_4() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[16:31]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s26
+; GFX942-NEXT: s_mov_b64 s[8:9], s[26:27]
; GFX942-NEXT: v_readlane_b32 s30, v0, 0
-; GFX942-NEXT: s_mov_b32 s9, s27
-; GFX942-NEXT: s_mov_b32 s11, s13
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -19575,16 +19861,15 @@ define void @s_shuffle_v2i64_v8i64__14_4() #0 {
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:15]
+; GFX942-NEXT: ; def s[8:23]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:27]
+; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s26, s8
-; GFX942-NEXT: s_mov_b32 s27, s9
-; GFX942-NEXT: s_mov_b64 s[8:9], s[24:25]
-; GFX942-NEXT: s_mov_b64 s[10:11], s[26:27]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
+; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -19641,18 +19926,43 @@ define void @s_shuffle_v2i64_v8i64__u_5() #0 {
}
define void @s_shuffle_v2i64_v8i64__0_5() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__0_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:23]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s18
-; GFX9-NEXT: s_mov_b32 s11, s19
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__0_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s18
+; GFX900-NEXT: s_mov_b32 s11, s19
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__0_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s18
+; GFX90A-NEXT: s_mov_b32 s11, s19
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__0_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:23]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[18:19]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 0, i32 5>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -19696,8 +20006,7 @@ define void @s_shuffle_v2i64_v8i64__1_5() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -19709,18 +20018,43 @@ define void @s_shuffle_v2i64_v8i64__1_5() #0 {
}
define void @s_shuffle_v2i64_v8i64__2_5() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__2_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__2_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__2_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__2_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 2, i32 5>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -19764,8 +20098,7 @@ define void @s_shuffle_v2i64_v8i64__3_5() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -19857,8 +20190,7 @@ define void @s_shuffle_v2i64_v8i64__5_5() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -19906,8 +20238,7 @@ define void @s_shuffle_v2i64_v8i64__6_5() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
@@ -19957,8 +20288,7 @@ define void @s_shuffle_v2i64_v8i64__7_5() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -20082,8 +20412,7 @@ define void @s_shuffle_v2i64_v8i64__9_5() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:27]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -20138,8 +20467,7 @@ define void @s_shuffle_v2i64_v8i64__10_5() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s22
-; GFX942-NEXT: s_mov_b32 s11, s23
+; GFX942-NEXT: s_mov_b64 s[10:11], s[22:23]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -20220,8 +20548,7 @@ define void @s_shuffle_v2i64_v8i64__11_5() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:27]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -20280,8 +20607,7 @@ define void @s_shuffle_v2i64_v8i64__12_5() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s18
-; GFX942-NEXT: s_mov_b32 s11, s19
+; GFX942-NEXT: s_mov_b64 s[10:11], s[18:19]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -20362,8 +20688,7 @@ define void @s_shuffle_v2i64_v8i64__13_5() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:27]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s22
-; GFX942-NEXT: s_mov_b32 s9, s23
+; GFX942-NEXT: s_mov_b64 s[8:9], s[22:23]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -20422,8 +20747,7 @@ define void @s_shuffle_v2i64_v8i64__14_5() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s18
-; GFX942-NEXT: s_mov_b32 s15, s19
+; GFX942-NEXT: s_mov_b64 s[14:15], s[18:19]
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
@@ -20470,8 +20794,7 @@ define void @s_shuffle_v2i64_v8i64__u_6() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -20483,18 +20806,43 @@ define void @s_shuffle_v2i64_v8i64__u_6() #0 {
}
define void @s_shuffle_v2i64_v8i64__0_6() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__0_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:23]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s20
-; GFX9-NEXT: s_mov_b32 s11, s21
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__0_6:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s20
+; GFX900-NEXT: s_mov_b32 s11, s21
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__0_6:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s20
+; GFX90A-NEXT: s_mov_b32 s11, s21
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__0_6:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:23]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[20:21]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 0, i32 6>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -20538,10 +20886,8 @@ define void @s_shuffle_v2i64_v8i64__1_6() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -20553,18 +20899,43 @@ define void @s_shuffle_v2i64_v8i64__1_6() #0 {
}
define void @s_shuffle_v2i64_v8i64__2_6() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__2_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s16
-; GFX9-NEXT: s_mov_b32 s11, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__2_6:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s16
+; GFX900-NEXT: s_mov_b32 s11, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__2_6:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s16
+; GFX90A-NEXT: s_mov_b32 s11, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__2_6:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 2, i32 6>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -20608,10 +20979,8 @@ define void @s_shuffle_v2i64_v8i64__3_6() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -20659,8 +21028,7 @@ define void @s_shuffle_v2i64_v8i64__4_6() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -20708,10 +21076,8 @@ define void @s_shuffle_v2i64_v8i64__5_6() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -20759,8 +21125,7 @@ define void @s_shuffle_v2i64_v8i64__6_6() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
@@ -20810,10 +21175,8 @@ define void @s_shuffle_v2i64_v8i64__7_6() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -20857,8 +21220,7 @@ define void @s_shuffle_v2i64_v8i64__8_6() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -20967,11 +21329,9 @@ define void @s_shuffle_v2i64_v8i64__9_6() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
; GFX942-NEXT: v_readlane_b32 s30, v0, 0
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -21031,8 +21391,7 @@ define void @s_shuffle_v2i64_v8i64__10_6() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s20
-; GFX942-NEXT: s_mov_b32 s11, s21
+; GFX942-NEXT: s_mov_b64 s[10:11], s[20:21]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -21142,11 +21501,9 @@ define void @s_shuffle_v2i64_v8i64__11_6() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s22
+; GFX942-NEXT: s_mov_b64 s[8:9], s[22:23]
; GFX942-NEXT: v_readlane_b32 s30, v0, 0
-; GFX942-NEXT: s_mov_b32 s9, s23
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -21256,8 +21613,7 @@ define void @s_shuffle_v2i64_v8i64__12_6() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s16
-; GFX942-NEXT: s_mov_b32 s11, s17
+; GFX942-NEXT: s_mov_b64 s[10:11], s[16:17]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -21367,11 +21723,9 @@ define void @s_shuffle_v2i64_v8i64__13_6() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s26
+; GFX942-NEXT: s_mov_b64 s[8:9], s[26:27]
; GFX942-NEXT: v_readlane_b32 s30, v0, 0
-; GFX942-NEXT: s_mov_b32 s9, s27
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -21474,31 +21828,19 @@ define void @s_shuffle_v2i64_v8i64__14_6() #0 {
; GFX942-LABEL: s_shuffle_v2i64_v8i64__14_6:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX942-NEXT: s_xor_saveexec_b64 s[0:1], -1
-; GFX942-NEXT: scratch_store_dword off, v0, s32 ; 4-byte Folded Spill
-; GFX942-NEXT: s_mov_b64 exec, s[0:1]
-; GFX942-NEXT: v_writelane_b32 v0, s30, 0
-; GFX942-NEXT: s_nop 1
-; GFX942-NEXT: v_writelane_b32 v0, s31, 1
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[16:31]
+; GFX942-NEXT: ; def s[4:19]
; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s30, s12
-; GFX942-NEXT: s_mov_b32 s31, s13
-; GFX942-NEXT: s_mov_b64 s[8:9], s[28:29]
-; GFX942-NEXT: s_mov_b64 s[10:11], s[30:31]
-; GFX942-NEXT: v_readlane_b32 s30, v0, 0
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
+; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: v_readlane_b32 s31, v0, 1
-; GFX942-NEXT: s_xor_saveexec_b64 s[0:1], -1
-; GFX942-NEXT: scratch_load_dword v0, off, s32 ; 4-byte Folded Reload
-; GFX942-NEXT: s_mov_b64 exec, s[0:1]
-; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%vec1 = call <8 x i64> asm "; def $0", "=s"()
@@ -21553,18 +21895,43 @@ define void @s_shuffle_v2i64_v8i64__u_7() #0 {
}
define void @s_shuffle_v2i64_v8i64__0_7() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__0_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:23]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s22
-; GFX9-NEXT: s_mov_b32 s11, s23
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__0_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s22
+; GFX900-NEXT: s_mov_b32 s11, s23
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__0_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s22
+; GFX90A-NEXT: s_mov_b32 s11, s23
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__0_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:23]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[22:23]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 0, i32 7>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -21608,8 +21975,7 @@ define void @s_shuffle_v2i64_v8i64__1_7() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
@@ -21623,18 +21989,43 @@ define void @s_shuffle_v2i64_v8i64__1_7() #0 {
}
define void @s_shuffle_v2i64_v8i64__2_7() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__2_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s18
-; GFX9-NEXT: s_mov_b32 s11, s19
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__2_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s18
+; GFX900-NEXT: s_mov_b32 s11, s19
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__2_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s18
+; GFX90A-NEXT: s_mov_b32 s11, s19
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__2_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[18:19]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> poison, <2 x i32> <i32 2, i32 7>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
@@ -21678,8 +22069,7 @@ define void @s_shuffle_v2i64_v8i64__3_7() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
@@ -21729,8 +22119,7 @@ define void @s_shuffle_v2i64_v8i64__4_7() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -21778,8 +22167,7 @@ define void @s_shuffle_v2i64_v8i64__5_7() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
@@ -21874,8 +22262,7 @@ define void @s_shuffle_v2i64_v8i64__7_7() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
@@ -22031,8 +22418,7 @@ define void @s_shuffle_v2i64_v8i64__9_7() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[16:31]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s18
-; GFX942-NEXT: s_mov_b32 s13, s19
+; GFX942-NEXT: s_mov_b64 s[12:13], s[18:19]
; GFX942-NEXT: v_readlane_b32 s30, v0, 0
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
@@ -22095,8 +22481,7 @@ define void @s_shuffle_v2i64_v8i64__10_7() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s22
-; GFX942-NEXT: s_mov_b32 s11, s23
+; GFX942-NEXT: s_mov_b64 s[10:11], s[22:23]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -22206,8 +22591,7 @@ define void @s_shuffle_v2i64_v8i64__11_7() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[16:31]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s22
-; GFX942-NEXT: s_mov_b32 s13, s23
+; GFX942-NEXT: s_mov_b64 s[12:13], s[22:23]
; GFX942-NEXT: v_readlane_b32 s30, v0, 0
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
@@ -22274,8 +22658,7 @@ define void @s_shuffle_v2i64_v8i64__12_7() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s18
-; GFX942-NEXT: s_mov_b32 s11, s19
+; GFX942-NEXT: s_mov_b64 s[10:11], s[18:19]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -22385,8 +22768,7 @@ define void @s_shuffle_v2i64_v8i64__13_7() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[16:31]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s26
-; GFX942-NEXT: s_mov_b32 s13, s27
+; GFX942-NEXT: s_mov_b64 s[12:13], s[26:27]
; GFX942-NEXT: v_readlane_b32 s30, v0, 0
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
@@ -22453,8 +22835,7 @@ define void @s_shuffle_v2i64_v8i64__14_7() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s18
-; GFX942-NEXT: s_mov_b32 s15, s19
+; GFX942-NEXT: s_mov_b64 s[14:15], s[18:19]
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
@@ -22555,8 +22936,7 @@ define void @s_shuffle_v2i64_v8i64__1_8() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -22640,8 +23020,7 @@ define void @s_shuffle_v2i64_v8i64__3_8() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -22729,8 +23108,7 @@ define void @s_shuffle_v2i64_v8i64__5_8() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -22819,8 +23197,7 @@ define void @s_shuffle_v2i64_v8i64__7_8() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -22882,10 +23259,8 @@ define void @s_shuffle_v2i64_v8i64__9_8() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -22898,18 +23273,43 @@ define void @s_shuffle_v2i64_v8i64__9_8() #0 {
}
define void @s_shuffle_v2i64_v8i64__10_8() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__10_8:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__10_8:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__10_8:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__10_8:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%vec1 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> %vec1, <2 x i32> <i32 10, i32 8>
@@ -22954,10 +23354,8 @@ define void @s_shuffle_v2i64_v8i64__11_8() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -23006,8 +23404,7 @@ define void @s_shuffle_v2i64_v8i64__12_8() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -23056,10 +23453,8 @@ define void @s_shuffle_v2i64_v8i64__13_8() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -23108,8 +23503,7 @@ define void @s_shuffle_v2i64_v8i64__14_8() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s0
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
@@ -23207,8 +23601,7 @@ define void @s_shuffle_v2i64_v8i64__0_9() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:27]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -23263,8 +23656,7 @@ define void @s_shuffle_v2i64_v8i64__1_9() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:23]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -23319,8 +23711,7 @@ define void @s_shuffle_v2i64_v8i64__2_9() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:27]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -23421,8 +23812,7 @@ define void @s_shuffle_v2i64_v8i64__3_9() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:23]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -23503,8 +23893,7 @@ define void @s_shuffle_v2i64_v8i64__4_9() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:27]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -23588,8 +23977,7 @@ define void @s_shuffle_v2i64_v8i64__5_9() #0 {
; GFX942-NEXT: ; def s[8:23]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_readlane_b32 s30, v0, 0
-; GFX942-NEXT: s_mov_b32 s8, s26
-; GFX942-NEXT: s_mov_b32 s9, s27
+; GFX942-NEXT: s_mov_b64 s[8:9], s[26:27]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -23704,8 +24092,7 @@ define void @s_shuffle_v2i64_v8i64__6_9() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[16:31]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s18
-; GFX942-NEXT: s_mov_b32 s15, s19
+; GFX942-NEXT: s_mov_b64 s[14:15], s[18:19]
; GFX942-NEXT: v_readlane_b32 s30, v0, 0
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
@@ -23768,8 +24155,7 @@ define void @s_shuffle_v2i64_v8i64__7_9() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:23]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s26
-; GFX942-NEXT: s_mov_b32 s9, s27
+; GFX942-NEXT: s_mov_b64 s[8:9], s[26:27]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -23823,18 +24209,43 @@ define void @s_shuffle_v2i64_v8i64__8_9() #0 {
}
define void @s_shuffle_v2i64_v8i64__9_9() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__9_9:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:23]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__9_9:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__9_9:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__9_9:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:23]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%vec1 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> %vec1, <2 x i32> <i32 9, i32 9>
@@ -23843,18 +24254,43 @@ define void @s_shuffle_v2i64_v8i64__9_9() #0 {
}
define void @s_shuffle_v2i64_v8i64__10_9() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__10_9:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__10_9:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__10_9:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__10_9:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%vec1 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> %vec1, <2 x i32> <i32 10, i32 9>
@@ -23863,18 +24299,43 @@ define void @s_shuffle_v2i64_v8i64__10_9() #0 {
}
define void @s_shuffle_v2i64_v8i64__11_9() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__11_9:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:23]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__11_9:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__11_9:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__11_9:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:23]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%vec1 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> %vec1, <2 x i32> <i32 11, i32 9>
@@ -23919,8 +24380,7 @@ define void @s_shuffle_v2i64_v8i64__12_9() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s2
-; GFX942-NEXT: s_mov_b32 s11, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -23933,18 +24393,43 @@ define void @s_shuffle_v2i64_v8i64__12_9() #0 {
}
define void @s_shuffle_v2i64_v8i64__13_9() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__13_9:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:23]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__13_9:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__13_9:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__13_9:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:23]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%vec1 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> %vec1, <2 x i32> <i32 13, i32 9>
@@ -23989,8 +24474,7 @@ define void @s_shuffle_v2i64_v8i64__14_9() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s2
-; GFX942-NEXT: s_mov_b32 s15, s3
+; GFX942-NEXT: s_mov_b64 s[14:15], s[2:3]
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
@@ -24037,8 +24521,7 @@ define void @s_shuffle_v2i64_v8i64__u_10() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -24093,8 +24576,7 @@ define void @s_shuffle_v2i64_v8i64__0_10() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:27]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s16
-; GFX942-NEXT: s_mov_b32 s11, s17
+; GFX942-NEXT: s_mov_b64 s[10:11], s[16:17]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -24158,11 +24640,9 @@ define void @s_shuffle_v2i64_v8i64__1_10() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
; GFX942-NEXT: v_readlane_b32 s30, v0, 0
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -24222,8 +24702,7 @@ define void @s_shuffle_v2i64_v8i64__2_10() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:27]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s16
-; GFX942-NEXT: s_mov_b32 s11, s17
+; GFX942-NEXT: s_mov_b64 s[10:11], s[16:17]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -24328,10 +24807,8 @@ define void @s_shuffle_v2i64_v8i64__3_10() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -24412,8 +24889,7 @@ define void @s_shuffle_v2i64_v8i64__4_10() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:27]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s16
-; GFX942-NEXT: s_mov_b32 s11, s17
+; GFX942-NEXT: s_mov_b64 s[10:11], s[16:17]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -24494,10 +24970,8 @@ define void @s_shuffle_v2i64_v8i64__5_10() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -24607,8 +25081,7 @@ define void @s_shuffle_v2i64_v8i64__6_10() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[16:31]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s20
-; GFX942-NEXT: s_mov_b32 s15, s21
+; GFX942-NEXT: s_mov_b64 s[14:15], s[20:21]
; GFX942-NEXT: v_readlane_b32 s30, v0, 0
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
@@ -24675,10 +25148,8 @@ define void @s_shuffle_v2i64_v8i64__7_10() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -24691,18 +25162,43 @@ define void @s_shuffle_v2i64_v8i64__7_10() #0 {
}
define void @s_shuffle_v2i64_v8i64__8_10() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__8_10:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:23]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__8_10:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__8_10:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__8_10:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:23]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%vec1 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> %vec1, <2 x i32> <i32 8, i32 10>
@@ -24747,10 +25243,8 @@ define void @s_shuffle_v2i64_v8i64__9_10() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -24763,18 +25257,43 @@ define void @s_shuffle_v2i64_v8i64__9_10() #0 {
}
define void @s_shuffle_v2i64_v8i64__10_10() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__10_10:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__10_10:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__10_10:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__10_10:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%vec1 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> %vec1, <2 x i32> <i32 10, i32 10>
@@ -24819,10 +25338,8 @@ define void @s_shuffle_v2i64_v8i64__11_10() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -24871,8 +25388,7 @@ define void @s_shuffle_v2i64_v8i64__12_10() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -24921,10 +25437,8 @@ define void @s_shuffle_v2i64_v8i64__13_10() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -24973,8 +25487,7 @@ define void @s_shuffle_v2i64_v8i64__14_10() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
@@ -25072,8 +25585,7 @@ define void @s_shuffle_v2i64_v8i64__0_11() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:27]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s18
-; GFX942-NEXT: s_mov_b32 s11, s19
+; GFX942-NEXT: s_mov_b64 s[10:11], s[18:19]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -25174,8 +25686,7 @@ define void @s_shuffle_v2i64_v8i64__1_11() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -25230,8 +25741,7 @@ define void @s_shuffle_v2i64_v8i64__2_11() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:27]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s18
-; GFX942-NEXT: s_mov_b32 s11, s19
+; GFX942-NEXT: s_mov_b64 s[10:11], s[18:19]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -25315,8 +25825,7 @@ define void @s_shuffle_v2i64_v8i64__3_11() #0 {
; GFX942-NEXT: ; def s[4:19]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_readlane_b32 s30, v0, 0
-; GFX942-NEXT: s_mov_b32 s8, s22
-; GFX942-NEXT: s_mov_b32 s9, s23
+; GFX942-NEXT: s_mov_b64 s[8:9], s[22:23]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -25402,8 +25911,7 @@ define void @s_shuffle_v2i64_v8i64__4_11() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:27]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s18
-; GFX942-NEXT: s_mov_b32 s11, s19
+; GFX942-NEXT: s_mov_b64 s[10:11], s[18:19]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -25458,8 +25966,7 @@ define void @s_shuffle_v2i64_v8i64__5_11() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s22
-; GFX942-NEXT: s_mov_b32 s9, s23
+; GFX942-NEXT: s_mov_b64 s[8:9], s[22:23]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -25569,8 +26076,7 @@ define void @s_shuffle_v2i64_v8i64__6_11() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[16:31]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s22
-; GFX942-NEXT: s_mov_b32 s15, s23
+; GFX942-NEXT: s_mov_b64 s[14:15], s[22:23]
; GFX942-NEXT: v_readlane_b32 s30, v0, 0
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
@@ -25633,8 +26139,7 @@ define void @s_shuffle_v2i64_v8i64__7_11() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s22
-; GFX942-NEXT: s_mov_b32 s9, s23
+; GFX942-NEXT: s_mov_b64 s[8:9], s[22:23]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -25647,18 +26152,43 @@ define void @s_shuffle_v2i64_v8i64__7_11() #0 {
}
define void @s_shuffle_v2i64_v8i64__8_11() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__8_11:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:23]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__8_11:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__8_11:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__8_11:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:23]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%vec1 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> %vec1, <2 x i32> <i32 8, i32 11>
@@ -25667,18 +26197,43 @@ define void @s_shuffle_v2i64_v8i64__8_11() #0 {
}
define void @s_shuffle_v2i64_v8i64__9_11() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__9_11:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s6
-; GFX9-NEXT: s_mov_b32 s9, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__9_11:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__9_11:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__9_11:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%vec1 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> %vec1, <2 x i32> <i32 9, i32 11>
@@ -25728,88 +26283,137 @@ define void @s_shuffle_v2i64_v8i64__10_11() #0 {
}
define void @s_shuffle_v2i64_v8i64__11_11() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__11_11:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__11_11:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__11_11:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__11_11:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <8 x i64> asm "; def $0", "=s"()
+ %vec1 = call <8 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <8 x i64> %vec0, <8 x i64> %vec1, <2 x i32> <i32 11, i32 11>
+ call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v2i64_v8i64__12_11() #0 {
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__12_11:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: s_mov_b64 s[8:9], s[12:13]
+; GFX900-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__12_11:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: s_mov_b64 s[8:9], s[12:13]
+; GFX90A-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__12_11:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%vec1 = call <8 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <8 x i64> %vec0, <8 x i64> %vec1, <2 x i32> <i32 11, i32 11>
+ %shuf = shufflevector <8 x i64> %vec0, <8 x i64> %vec1, <2 x i32> <i32 12, i32 11>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
ret void
}
-define void @s_shuffle_v2i64_v8i64__12_11() #0 {
-; GFX900-LABEL: s_shuffle_v2i64_v8i64__12_11:
+define void @s_shuffle_v2i64_v8i64__13_11() #0 {
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__13_11:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s14, s10
-; GFX900-NEXT: s_mov_b32 s15, s11
-; GFX900-NEXT: s_mov_b64 s[8:9], s[12:13]
-; GFX900-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v2i64_v8i64__12_11:
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__13_11:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s14, s10
-; GFX90A-NEXT: s_mov_b32 s15, s11
-; GFX90A-NEXT: s_mov_b64 s[8:9], s[12:13]
-; GFX90A-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v2i64_v8i64__12_11:
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__13_11:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:15]
+; GFX942-NEXT: ; def s[4:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s6
-; GFX942-NEXT: s_mov_b32 s11, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <8 x i64> asm "; def $0", "=s"()
- %vec1 = call <8 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <8 x i64> %vec0, <8 x i64> %vec1, <2 x i32> <i32 12, i32 11>
- call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v2i64_v8i64__13_11() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__13_11:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%vec1 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> %vec1, <2 x i32> <i32 13, i32 11>
@@ -25854,8 +26458,7 @@ define void @s_shuffle_v2i64_v8i64__14_11() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s6
-; GFX942-NEXT: s_mov_b32 s15, s7
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
@@ -25902,8 +26505,7 @@ define void @s_shuffle_v2i64_v8i64__u_12() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -25958,8 +26560,7 @@ define void @s_shuffle_v2i64_v8i64__0_12() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:27]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s20
-; GFX942-NEXT: s_mov_b32 s11, s21
+; GFX942-NEXT: s_mov_b64 s[10:11], s[20:21]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -26064,10 +26665,8 @@ define void @s_shuffle_v2i64_v8i64__1_12() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -26122,8 +26721,7 @@ define void @s_shuffle_v2i64_v8i64__2_12() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:27]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s20
-; GFX942-NEXT: s_mov_b32 s11, s21
+; GFX942-NEXT: s_mov_b64 s[10:11], s[20:21]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -26211,10 +26809,8 @@ define void @s_shuffle_v2i64_v8i64__3_12() #0 {
; GFX942-NEXT: ; def s[4:19]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_readlane_b32 s30, v0, 0
-; GFX942-NEXT: s_mov_b32 s8, s22
-; GFX942-NEXT: s_mov_b32 s9, s23
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[22:23]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -26300,8 +26896,7 @@ define void @s_shuffle_v2i64_v8i64__4_12() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:27]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s20
-; GFX942-NEXT: s_mov_b32 s11, s21
+; GFX942-NEXT: s_mov_b64 s[10:11], s[20:21]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -26360,10 +26955,8 @@ define void @s_shuffle_v2i64_v8i64__5_12() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s22
-; GFX942-NEXT: s_mov_b32 s9, s23
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[22:23]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -26473,8 +27066,7 @@ define void @s_shuffle_v2i64_v8i64__6_12() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[16:31]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s24
-; GFX942-NEXT: s_mov_b32 s15, s25
+; GFX942-NEXT: s_mov_b64 s[14:15], s[24:25]
; GFX942-NEXT: v_readlane_b32 s30, v0, 0
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
@@ -26541,10 +27133,8 @@ define void @s_shuffle_v2i64_v8i64__7_12() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s22
-; GFX942-NEXT: s_mov_b32 s9, s23
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[22:23]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -26557,18 +27147,43 @@ define void @s_shuffle_v2i64_v8i64__7_12() #0 {
}
define void @s_shuffle_v2i64_v8i64__8_12() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__8_12:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:23]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s16
-; GFX9-NEXT: s_mov_b32 s11, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__8_12:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s16
+; GFX900-NEXT: s_mov_b32 s11, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__8_12:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s16
+; GFX90A-NEXT: s_mov_b32 s11, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__8_12:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:23]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%vec1 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> %vec1, <2 x i32> <i32 8, i32 12>
@@ -26577,20 +27192,48 @@ define void @s_shuffle_v2i64_v8i64__8_12() #0 {
}
define void @s_shuffle_v2i64_v8i64__9_12() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__9_12:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s6
-; GFX9-NEXT: s_mov_b32 s9, s7
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__9_12:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__9_12:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__9_12:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%vec1 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> %vec1, <2 x i32> <i32 9, i32 12>
@@ -26599,18 +27242,43 @@ define void @s_shuffle_v2i64_v8i64__9_12() #0 {
}
define void @s_shuffle_v2i64_v8i64__10_12() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__10_12:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__10_12:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__10_12:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__10_12:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%vec1 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> %vec1, <2 x i32> <i32 10, i32 12>
@@ -26619,20 +27287,48 @@ define void @s_shuffle_v2i64_v8i64__10_12() #0 {
}
define void @s_shuffle_v2i64_v8i64__11_12() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__11_12:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__11_12:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__11_12:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__11_12:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%vec1 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> %vec1, <2 x i32> <i32 11, i32 12>
@@ -26677,8 +27373,7 @@ define void @s_shuffle_v2i64_v8i64__12_12() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -26691,20 +27386,48 @@ define void @s_shuffle_v2i64_v8i64__12_12() #0 {
}
define void @s_shuffle_v2i64_v8i64__13_12() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__13_12:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__13_12:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__13_12:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__13_12:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%vec1 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> %vec1, <2 x i32> <i32 13, i32 12>
@@ -26749,8 +27472,7 @@ define void @s_shuffle_v2i64_v8i64__14_12() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s8
-; GFX942-NEXT: s_mov_b32 s15, s9
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
@@ -26852,8 +27574,7 @@ define void @s_shuffle_v2i64_v8i64__0_13() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:27]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s22
-; GFX942-NEXT: s_mov_b32 s11, s23
+; GFX942-NEXT: s_mov_b64 s[10:11], s[22:23]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -26963,9 +27684,8 @@ define void @s_shuffle_v2i64_v8i64__1_13() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
; GFX942-NEXT: v_readlane_b32 s30, v0, 0
-; GFX942-NEXT: s_mov_b32 s9, s19
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -27025,8 +27745,7 @@ define void @s_shuffle_v2i64_v8i64__2_13() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:27]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s22
-; GFX942-NEXT: s_mov_b32 s11, s23
+; GFX942-NEXT: s_mov_b64 s[10:11], s[22:23]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -27107,8 +27826,7 @@ define void @s_shuffle_v2i64_v8i64__3_13() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -27189,8 +27907,7 @@ define void @s_shuffle_v2i64_v8i64__4_13() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:27]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s22
-; GFX942-NEXT: s_mov_b32 s11, s23
+; GFX942-NEXT: s_mov_b64 s[10:11], s[22:23]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -27249,8 +27966,7 @@ define void @s_shuffle_v2i64_v8i64__5_13() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -27360,8 +28076,7 @@ define void @s_shuffle_v2i64_v8i64__6_13() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[16:31]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s26
-; GFX942-NEXT: s_mov_b32 s15, s27
+; GFX942-NEXT: s_mov_b64 s[14:15], s[26:27]
; GFX942-NEXT: v_readlane_b32 s30, v0, 0
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
@@ -27428,8 +28143,7 @@ define void @s_shuffle_v2i64_v8i64__7_13() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -27442,18 +28156,43 @@ define void @s_shuffle_v2i64_v8i64__7_13() #0 {
}
define void @s_shuffle_v2i64_v8i64__8_13() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__8_13:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:23]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s18
-; GFX9-NEXT: s_mov_b32 s11, s19
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__8_13:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s18
+; GFX900-NEXT: s_mov_b32 s11, s19
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__8_13:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s18
+; GFX90A-NEXT: s_mov_b32 s11, s19
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__8_13:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:23]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[18:19]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%vec1 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> %vec1, <2 x i32> <i32 8, i32 13>
@@ -27498,8 +28237,7 @@ define void @s_shuffle_v2i64_v8i64__9_13() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -27512,18 +28250,43 @@ define void @s_shuffle_v2i64_v8i64__9_13() #0 {
}
define void @s_shuffle_v2i64_v8i64__10_13() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__10_13:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__10_13:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__10_13:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__10_13:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%vec1 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> %vec1, <2 x i32> <i32 10, i32 13>
@@ -27568,8 +28331,7 @@ define void @s_shuffle_v2i64_v8i64__11_13() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -27663,8 +28425,7 @@ define void @s_shuffle_v2i64_v8i64__13_13() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -27713,8 +28474,7 @@ define void @s_shuffle_v2i64_v8i64__14_13() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
@@ -27761,8 +28521,7 @@ define void @s_shuffle_v2i64_v8i64__u_14() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -27817,8 +28576,7 @@ define void @s_shuffle_v2i64_v8i64__0_14() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:27]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s24
-; GFX942-NEXT: s_mov_b32 s11, s25
+; GFX942-NEXT: s_mov_b64 s[10:11], s[24:25]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -27928,11 +28686,9 @@ define void @s_shuffle_v2i64_v8i64__1_14() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
; GFX942-NEXT: v_readlane_b32 s30, v0, 0
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -27992,8 +28748,7 @@ define void @s_shuffle_v2i64_v8i64__2_14() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:27]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s24
-; GFX942-NEXT: s_mov_b32 s11, s25
+; GFX942-NEXT: s_mov_b64 s[10:11], s[24:25]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -28074,10 +28829,8 @@ define void @s_shuffle_v2i64_v8i64__3_14() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -28158,8 +28911,7 @@ define void @s_shuffle_v2i64_v8i64__4_14() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:27]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s24
-; GFX942-NEXT: s_mov_b32 s11, s25
+; GFX942-NEXT: s_mov_b64 s[10:11], s[24:25]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -28218,10 +28970,8 @@ define void @s_shuffle_v2i64_v8i64__5_14() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -28331,8 +29081,7 @@ define void @s_shuffle_v2i64_v8i64__6_14() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[16:31]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s28
-; GFX942-NEXT: s_mov_b32 s15, s29
+; GFX942-NEXT: s_mov_b64 s[14:15], s[28:29]
; GFX942-NEXT: v_readlane_b32 s30, v0, 0
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
@@ -28399,10 +29148,8 @@ define void @s_shuffle_v2i64_v8i64__7_14() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -28415,18 +29162,43 @@ define void @s_shuffle_v2i64_v8i64__7_14() #0 {
}
define void @s_shuffle_v2i64_v8i64__8_14() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__8_14:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:23]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s20
-; GFX9-NEXT: s_mov_b32 s11, s21
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__8_14:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s20
+; GFX900-NEXT: s_mov_b32 s11, s21
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__8_14:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s20
+; GFX90A-NEXT: s_mov_b32 s11, s21
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__8_14:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:23]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[20:21]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%vec1 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> %vec1, <2 x i32> <i32 8, i32 14>
@@ -28471,10 +29243,8 @@ define void @s_shuffle_v2i64_v8i64__9_14() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -28487,18 +29257,43 @@ define void @s_shuffle_v2i64_v8i64__9_14() #0 {
}
define void @s_shuffle_v2i64_v8i64__10_14() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__10_14:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s16
-; GFX9-NEXT: s_mov_b32 s11, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__10_14:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s16
+; GFX900-NEXT: s_mov_b32 s11, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__10_14:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s16
+; GFX90A-NEXT: s_mov_b32 s11, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__10_14:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%vec1 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> %vec1, <2 x i32> <i32 10, i32 14>
@@ -28543,10 +29338,8 @@ define void @s_shuffle_v2i64_v8i64__11_14() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -28595,8 +29388,7 @@ define void @s_shuffle_v2i64_v8i64__12_14() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -28645,10 +29437,8 @@ define void @s_shuffle_v2i64_v8i64__13_14() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -28697,8 +29487,7 @@ define void @s_shuffle_v2i64_v8i64__14_14() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
@@ -28801,8 +29590,7 @@ define void @s_shuffle_v2i64_v8i64__0_15() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:27]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s26
-; GFX942-NEXT: s_mov_b32 s11, s27
+; GFX942-NEXT: s_mov_b64 s[10:11], s[26:27]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -28912,8 +29700,7 @@ define void @s_shuffle_v2i64_v8i64__1_15() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s18
-; GFX942-NEXT: s_mov_b32 s13, s19
+; GFX942-NEXT: s_mov_b64 s[12:13], s[18:19]
; GFX942-NEXT: v_readlane_b32 s30, v0, 0
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
@@ -28976,8 +29763,7 @@ define void @s_shuffle_v2i64_v8i64__2_15() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:27]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s26
-; GFX942-NEXT: s_mov_b32 s11, s27
+; GFX942-NEXT: s_mov_b64 s[10:11], s[26:27]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -29058,8 +29844,7 @@ define void @s_shuffle_v2i64_v8i64__3_15() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s18
-; GFX942-NEXT: s_mov_b32 s13, s19
+; GFX942-NEXT: s_mov_b64 s[12:13], s[18:19]
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
@@ -29142,8 +29927,7 @@ define void @s_shuffle_v2i64_v8i64__4_15() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:27]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s26
-; GFX942-NEXT: s_mov_b32 s11, s27
+; GFX942-NEXT: s_mov_b64 s[10:11], s[26:27]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -29202,8 +29986,7 @@ define void @s_shuffle_v2i64_v8i64__5_15() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s18
-; GFX942-NEXT: s_mov_b32 s13, s19
+; GFX942-NEXT: s_mov_b64 s[12:13], s[18:19]
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
@@ -29315,8 +30098,7 @@ define void @s_shuffle_v2i64_v8i64__6_15() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[16:31]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s30
-; GFX942-NEXT: s_mov_b32 s15, s31
+; GFX942-NEXT: s_mov_b64 s[14:15], s[30:31]
; GFX942-NEXT: v_readlane_b32 s30, v0, 0
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
@@ -29383,8 +30165,7 @@ define void @s_shuffle_v2i64_v8i64__7_15() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s18
-; GFX942-NEXT: s_mov_b32 s13, s19
+; GFX942-NEXT: s_mov_b64 s[12:13], s[18:19]
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
@@ -29399,18 +30180,43 @@ define void @s_shuffle_v2i64_v8i64__7_15() #0 {
}
define void @s_shuffle_v2i64_v8i64__8_15() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__8_15:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:23]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s22
-; GFX9-NEXT: s_mov_b32 s11, s23
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__8_15:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s22
+; GFX900-NEXT: s_mov_b32 s11, s23
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__8_15:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s22
+; GFX90A-NEXT: s_mov_b32 s11, s23
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__8_15:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:23]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[22:23]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%vec1 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> %vec1, <2 x i32> <i32 8, i32 15>
@@ -29455,8 +30261,7 @@ define void @s_shuffle_v2i64_v8i64__9_15() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
@@ -29471,18 +30276,43 @@ define void @s_shuffle_v2i64_v8i64__9_15() #0 {
}
define void @s_shuffle_v2i64_v8i64__10_15() #0 {
-; GFX9-LABEL: s_shuffle_v2i64_v8i64__10_15:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s18
-; GFX9-NEXT: s_mov_b32 s11, s19
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2i64_v8i64__10_15:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s18
+; GFX900-NEXT: s_mov_b32 s11, s19
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2i64_v8i64__10_15:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s18
+; GFX90A-NEXT: s_mov_b32 s11, s19
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2i64_v8i64__10_15:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[18:19]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <8 x i64> asm "; def $0", "=s"()
%vec1 = call <8 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <8 x i64> %vec0, <8 x i64> %vec1, <2 x i32> <i32 10, i32 15>
@@ -29527,8 +30357,7 @@ define void @s_shuffle_v2i64_v8i64__11_15() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
@@ -29579,8 +30408,7 @@ define void @s_shuffle_v2i64_v8i64__12_15() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -29629,8 +30457,7 @@ define void @s_shuffle_v2i64_v8i64__13_15() #0 {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: s_mov_b64 s[8:9], s[12:13]
; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
diff --git a/llvm/test/CodeGen/AMDGPU/shufflevector.v2p0.v2p0.ll b/llvm/test/CodeGen/AMDGPU/shufflevector.v2p0.v2p0.ll
index 849059d733b19..b0e2c444723dd 100644
--- a/llvm/test/CodeGen/AMDGPU/shufflevector.v2p0.v2p0.ll
+++ b/llvm/test/CodeGen/AMDGPU/shufflevector.v2p0.v2p0.ll
@@ -278,8 +278,7 @@ define void @v_shuffle_v2p0_v2p0__3_2(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:3]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v0
-; GFX942-NEXT: v_mov_b32_e32 v5, v1
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -325,8 +324,7 @@ define void @v_shuffle_v2p0_v2p0__3_3(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:3]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v2
-; GFX942-NEXT: v_mov_b32_e32 v5, v3
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -410,8 +408,7 @@ define void @v_shuffle_v2p0_v2p0__0_0(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:3]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v4, 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v0
-; GFX942-NEXT: v_mov_b32_e32 v3, v1
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -456,8 +453,7 @@ define void @v_shuffle_v2p0_v2p0__1_0(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:3]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v0
-; GFX942-NEXT: v_mov_b32_e32 v5, v1
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -619,8 +615,7 @@ define void @v_shuffle_v2p0_v2p0__1_1(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:3]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v2
-; GFX942-NEXT: v_mov_b32_e32 v5, v3
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -853,8 +848,7 @@ define void @v_shuffle_v2p0_v2p0__0_3(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[2:5]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v4
-; GFX942-NEXT: v_mov_b32_e32 v3, v5
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v6, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -905,8 +899,7 @@ define void @v_shuffle_v2p0_v2p0__1_3(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[4:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v6
-; GFX942-NEXT: v_mov_b32_e32 v5, v7
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def v[0:3]
; GFX942-NEXT: ;;#ASMEND
@@ -1047,8 +1040,7 @@ define void @s_shuffle_v2p0_v2p0__1_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -1106,8 +1098,7 @@ define void @s_shuffle_v2p0_v2p0__3_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -1165,10 +1156,8 @@ define void @s_shuffle_v2p0_v2p0__3_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -1222,8 +1211,7 @@ define void @s_shuffle_v2p0_v2p0__3_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -1272,10 +1260,8 @@ define void @s_shuffle_v2p0_v2p0__3_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -1288,18 +1274,43 @@ define void @s_shuffle_v2p0_v2p0__3_2() {
}
define void @s_shuffle_v2p0_v2p0__3_3() {
-; GFX9-LABEL: s_shuffle_v2p0_v2p0__3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2p0_v2p0__3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2p0_v2p0__3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2p0_v2p0__3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%vec1 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <2 x i32> <i32 3, i32 3>
@@ -1340,8 +1351,7 @@ define void @s_shuffle_v2p0_v2p0__u_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -1353,18 +1363,43 @@ define void @s_shuffle_v2p0_v2p0__u_0() {
}
define void @s_shuffle_v2p0_v2p0__0_0() {
-; GFX9-LABEL: s_shuffle_v2p0_v2p0__0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2p0_v2p0__0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2p0_v2p0__0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2p0_v2p0__0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <2 x i32> zeroinitializer
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x ptr> %shuf)
@@ -1408,10 +1443,8 @@ define void @s_shuffle_v2p0_v2p0__1_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -1455,8 +1488,7 @@ define void @s_shuffle_v2p0_v2p0__2_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -1548,18 +1580,43 @@ define void @s_shuffle_v2p0_v2p0__0_1() {
}
define void @s_shuffle_v2p0_v2p0__1_1() {
-; GFX9-LABEL: s_shuffle_v2p0_v2p0__1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2p0_v2p0__1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2p0_v2p0__1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2p0_v2p0__1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <2 x i32> <i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x ptr> %shuf)
@@ -1693,8 +1750,7 @@ define void @s_shuffle_v2p0_v2p0__1_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -1802,8 +1858,7 @@ define void @s_shuffle_v2p0_v2p0__0_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s2
-; GFX942-NEXT: s_mov_b32 s11, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -1857,8 +1912,7 @@ define void @s_shuffle_v2p0_v2p0__1_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
diff --git a/llvm/test/CodeGen/AMDGPU/shufflevector.v2p0.v3p0.ll b/llvm/test/CodeGen/AMDGPU/shufflevector.v2p0.v3p0.ll
index f1c4a355e15e5..2372168b2a1af 100644
--- a/llvm/test/CodeGen/AMDGPU/shufflevector.v2p0.v3p0.ll
+++ b/llvm/test/CodeGen/AMDGPU/shufflevector.v2p0.v3p0.ll
@@ -407,8 +407,7 @@ define void @v_shuffle_v2p0_v3p0__5_3(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:5]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v0
-; GFX942-NEXT: v_mov_b32_e32 v7, v1
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -454,8 +453,7 @@ define void @v_shuffle_v2p0_v3p0__5_4(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:5]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v2
-; GFX942-NEXT: v_mov_b32_e32 v7, v3
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -501,8 +499,7 @@ define void @v_shuffle_v2p0_v3p0__5_5(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:5]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v4
-; GFX942-NEXT: v_mov_b32_e32 v7, v5
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -586,8 +583,7 @@ define void @v_shuffle_v2p0_v3p0__0_0(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:5]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v6, 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v0
-; GFX942-NEXT: v_mov_b32_e32 v3, v1
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v6, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -631,8 +627,7 @@ define void @v_shuffle_v2p0_v3p0__1_0(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:5]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v6, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v0
-; GFX942-NEXT: v_mov_b32_e32 v5, v1
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -677,8 +672,7 @@ define void @v_shuffle_v2p0_v3p0__2_0(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:5]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v0
-; GFX942-NEXT: v_mov_b32_e32 v7, v1
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -771,8 +765,7 @@ define void @v_shuffle_v2p0_v3p0__4_0(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[2:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v0
-; GFX942-NEXT: v_mov_b32_e32 v7, v1
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -895,8 +888,7 @@ define void @v_shuffle_v2p0_v3p0__1_1(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:5]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v6, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v2
-; GFX942-NEXT: v_mov_b32_e32 v5, v3
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -941,8 +933,7 @@ define void @v_shuffle_v2p0_v3p0__2_1(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:5]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v2
-; GFX942-NEXT: v_mov_b32_e32 v7, v3
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1035,8 +1026,7 @@ define void @v_shuffle_v2p0_v3p0__4_1(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[4:9]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v2
-; GFX942-NEXT: v_mov_b32_e32 v9, v3
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v10, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1120,8 +1110,7 @@ define void @v_shuffle_v2p0_v3p0__0_2(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:5]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v6, 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v4
-; GFX942-NEXT: v_mov_b32_e32 v3, v5
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v6, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1205,8 +1194,7 @@ define void @v_shuffle_v2p0_v3p0__2_2(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:5]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v4
-; GFX942-NEXT: v_mov_b32_e32 v7, v5
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1299,8 +1287,7 @@ define void @v_shuffle_v2p0_v3p0__4_2(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:5]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v4
-; GFX942-NEXT: v_mov_b32_e32 v11, v5
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v12, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1484,8 +1471,7 @@ define void @v_shuffle_v2p0_v3p0__4_3(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:5]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v6, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v0
-; GFX942-NEXT: v_mov_b32_e32 v5, v1
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1580,8 +1566,7 @@ define void @v_shuffle_v2p0_v3p0__0_4(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[2:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v4
-; GFX942-NEXT: v_mov_b32_e32 v3, v5
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v8, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1636,8 +1621,7 @@ define void @v_shuffle_v2p0_v3p0__1_4(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[4:9]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v6
-; GFX942-NEXT: v_mov_b32_e32 v5, v7
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v10, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1688,8 +1672,7 @@ define void @v_shuffle_v2p0_v3p0__2_4(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[6:11]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v12, 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v8
-; GFX942-NEXT: v_mov_b32_e32 v7, v9
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def v[0:5]
; GFX942-NEXT: ;;#ASMEND
@@ -1777,8 +1760,7 @@ define void @v_shuffle_v2p0_v3p0__4_4(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:5]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v6, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v2
-; GFX942-NEXT: v_mov_b32_e32 v5, v3
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1873,8 +1855,7 @@ define void @v_shuffle_v2p0_v3p0__0_5(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[2:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v6
-; GFX942-NEXT: v_mov_b32_e32 v3, v7
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v8, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1929,8 +1910,7 @@ define void @v_shuffle_v2p0_v3p0__1_5(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[4:9]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v8
-; GFX942-NEXT: v_mov_b32_e32 v5, v9
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[8:9]
; GFX942-NEXT: global_store_dwordx4 v10, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1981,8 +1961,7 @@ define void @v_shuffle_v2p0_v3p0__2_5(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[6:11]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v12, 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v10
-; GFX942-NEXT: v_mov_b32_e32 v7, v11
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def v[0:5]
; GFX942-NEXT: ;;#ASMEND
@@ -2030,8 +2009,7 @@ define void @v_shuffle_v2p0_v3p0__3_5(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:5]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v6, 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v4
-; GFX942-NEXT: v_mov_b32_e32 v3, v5
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v6, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2169,8 +2147,7 @@ define void @s_shuffle_v2p0_v3p0__1_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -2268,8 +2245,7 @@ define void @s_shuffle_v2p0_v3p0__4_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -2361,11 +2337,11 @@ define void @s_shuffle_v2p0_v3p0__5_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -2467,11 +2443,11 @@ define void @s_shuffle_v2p0_v3p0__5_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -2484,18 +2460,43 @@ define void @s_shuffle_v2p0_v3p0__5_2() {
}
define void @s_shuffle_v2p0_v3p0__5_3() {
-; GFX9-LABEL: s_shuffle_v2p0_v3p0__5_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2p0_v3p0__5_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2p0_v3p0__5_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2p0_v3p0__5_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <2 x i32> <i32 5, i32 3>
@@ -2504,18 +2505,43 @@ define void @s_shuffle_v2p0_v3p0__5_3() {
}
define void @s_shuffle_v2p0_v3p0__5_4() {
-; GFX9-LABEL: s_shuffle_v2p0_v3p0__5_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2p0_v3p0__5_4:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2p0_v3p0__5_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2p0_v3p0__5_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <2 x i32> <i32 5, i32 4>
@@ -2524,18 +2550,43 @@ define void @s_shuffle_v2p0_v3p0__5_4() {
}
define void @s_shuffle_v2p0_v3p0__5_5() {
-; GFX9-LABEL: s_shuffle_v2p0_v3p0__5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2p0_v3p0__5_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2p0_v3p0__5_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2p0_v3p0__5_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <2 x i32> <i32 5, i32 5>
@@ -2576,8 +2627,7 @@ define void @s_shuffle_v2p0_v3p0__u_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -2589,18 +2639,43 @@ define void @s_shuffle_v2p0_v3p0__u_0() {
}
define void @s_shuffle_v2p0_v3p0__0_0() {
-; GFX9-LABEL: s_shuffle_v2p0_v3p0__0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2p0_v3p0__0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2p0_v3p0__0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2p0_v3p0__0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <2 x i32> zeroinitializer
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x ptr> %shuf)
@@ -2644,10 +2719,8 @@ define void @s_shuffle_v2p0_v3p0__1_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -2659,18 +2732,43 @@ define void @s_shuffle_v2p0_v3p0__1_0() {
}
define void @s_shuffle_v2p0_v3p0__2_0() {
-; GFX9-LABEL: s_shuffle_v2p0_v3p0__2_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2p0_v3p0__2_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2p0_v3p0__2_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2p0_v3p0__2_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <2 x i32> <i32 2, i32 0>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x ptr> %shuf)
@@ -2710,8 +2808,7 @@ define void @s_shuffle_v2p0_v3p0__3_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -2765,13 +2862,11 @@ define void @s_shuffle_v2p0_v3p0__4_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -2864,18 +2959,43 @@ define void @s_shuffle_v2p0_v3p0__0_1() {
}
define void @s_shuffle_v2p0_v3p0__1_1() {
-; GFX9-LABEL: s_shuffle_v2p0_v3p0__1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2p0_v3p0__1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2p0_v3p0__1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2p0_v3p0__1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <2 x i32> <i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x ptr> %shuf)
@@ -2883,18 +3003,43 @@ define void @s_shuffle_v2p0_v3p0__1_1() {
}
define void @s_shuffle_v2p0_v3p0__2_1() {
-; GFX9-LABEL: s_shuffle_v2p0_v3p0__2_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2p0_v3p0__2_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2p0_v3p0__2_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2p0_v3p0__2_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <2 x i32> <i32 2, i32 1>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x ptr> %shuf)
@@ -2983,8 +3128,7 @@ define void @s_shuffle_v2p0_v3p0__4_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3029,8 +3173,7 @@ define void @s_shuffle_v2p0_v3p0__u_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3042,18 +3185,43 @@ define void @s_shuffle_v2p0_v3p0__u_2() {
}
define void @s_shuffle_v2p0_v3p0__0_2() {
-; GFX9-LABEL: s_shuffle_v2p0_v3p0__0_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2p0_v3p0__0_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2p0_v3p0__0_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2p0_v3p0__0_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <2 x i32> <i32 0, i32 2>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x ptr> %shuf)
@@ -3097,10 +3265,8 @@ define void @s_shuffle_v2p0_v3p0__1_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3112,18 +3278,43 @@ define void @s_shuffle_v2p0_v3p0__1_2() {
}
define void @s_shuffle_v2p0_v3p0__2_2() {
-; GFX9-LABEL: s_shuffle_v2p0_v3p0__2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2p0_v3p0__2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2p0_v3p0__2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2p0_v3p0__2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <2 x i32> <i32 2, i32 2>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x ptr> %shuf)
@@ -3163,8 +3354,7 @@ define void @s_shuffle_v2p0_v3p0__3_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3221,10 +3411,8 @@ define void @s_shuffle_v2p0_v3p0__4_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3323,8 +3511,7 @@ define void @s_shuffle_v2p0_v3p0__1_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3426,10 +3613,8 @@ define void @s_shuffle_v2p0_v3p0__4_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3524,8 +3709,7 @@ define void @s_shuffle_v2p0_v3p0__0_4() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s2
-; GFX942-NEXT: s_mov_b32 s11, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3579,8 +3763,7 @@ define void @s_shuffle_v2p0_v3p0__1_4() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3635,8 +3818,7 @@ define void @s_shuffle_v2p0_v3p0__2_4() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s2
-; GFX942-NEXT: s_mov_b32 s11, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3690,18 +3872,43 @@ define void @s_shuffle_v2p0_v3p0__3_4() {
}
define void @s_shuffle_v2p0_v3p0__4_4() {
-; GFX9-LABEL: s_shuffle_v2p0_v3p0__4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2p0_v3p0__4_4:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2p0_v3p0__4_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2p0_v3p0__4_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <2 x i32> <i32 4, i32 4>
@@ -3742,8 +3949,7 @@ define void @s_shuffle_v2p0_v3p0__u_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3797,8 +4003,7 @@ define void @s_shuffle_v2p0_v3p0__0_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3856,10 +4061,8 @@ define void @s_shuffle_v2p0_v3p0__1_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3914,8 +4117,7 @@ define void @s_shuffle_v2p0_v3p0__2_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3928,18 +4130,43 @@ define void @s_shuffle_v2p0_v3p0__2_5() {
}
define void @s_shuffle_v2p0_v3p0__3_5() {
-; GFX9-LABEL: s_shuffle_v2p0_v3p0__3_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2p0_v3p0__3_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2p0_v3p0__3_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2p0_v3p0__3_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <2 x i32> <i32 3, i32 5>
@@ -3984,10 +4211,8 @@ define void @s_shuffle_v2p0_v3p0__4_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
diff --git a/llvm/test/CodeGen/AMDGPU/shufflevector.v2p0.v4p0.ll b/llvm/test/CodeGen/AMDGPU/shufflevector.v2p0.v4p0.ll
index b96f7826488f5..22c2ec725442a 100644
--- a/llvm/test/CodeGen/AMDGPU/shufflevector.v2p0.v4p0.ll
+++ b/llvm/test/CodeGen/AMDGPU/shufflevector.v2p0.v4p0.ll
@@ -536,8 +536,7 @@ define void @v_shuffle_v2p0_v4p0__7_4(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v0
-; GFX942-NEXT: v_mov_b32_e32 v9, v1
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v10, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -583,8 +582,7 @@ define void @v_shuffle_v2p0_v4p0__7_5(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v2
-; GFX942-NEXT: v_mov_b32_e32 v9, v3
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v10, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -630,8 +628,7 @@ define void @v_shuffle_v2p0_v4p0__7_6(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v4
-; GFX942-NEXT: v_mov_b32_e32 v9, v5
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v10, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -677,8 +674,7 @@ define void @v_shuffle_v2p0_v4p0__7_7(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v6
-; GFX942-NEXT: v_mov_b32_e32 v9, v7
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v10, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -762,8 +758,7 @@ define void @v_shuffle_v2p0_v4p0__0_0(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v0
-; GFX942-NEXT: v_mov_b32_e32 v3, v1
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v8, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -807,8 +802,7 @@ define void @v_shuffle_v2p0_v4p0__1_0(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v0
-; GFX942-NEXT: v_mov_b32_e32 v5, v1
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v8, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -852,8 +846,7 @@ define void @v_shuffle_v2p0_v4p0__2_0(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v0
-; GFX942-NEXT: v_mov_b32_e32 v7, v1
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -898,8 +891,7 @@ define void @v_shuffle_v2p0_v4p0__3_0(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v0
-; GFX942-NEXT: v_mov_b32_e32 v9, v1
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v10, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -992,8 +984,7 @@ define void @v_shuffle_v2p0_v4p0__5_0(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[2:9]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v0
-; GFX942-NEXT: v_mov_b32_e32 v7, v1
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v10, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1048,8 +1039,7 @@ define void @v_shuffle_v2p0_v4p0__6_0(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[2:9]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v0
-; GFX942-NEXT: v_mov_b32_e32 v9, v1
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v10, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1172,8 +1162,7 @@ define void @v_shuffle_v2p0_v4p0__1_1(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v2
-; GFX942-NEXT: v_mov_b32_e32 v5, v3
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v8, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1217,8 +1206,7 @@ define void @v_shuffle_v2p0_v4p0__2_1(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v2
-; GFX942-NEXT: v_mov_b32_e32 v7, v3
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1263,8 +1251,7 @@ define void @v_shuffle_v2p0_v4p0__3_1(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v2
-; GFX942-NEXT: v_mov_b32_e32 v9, v3
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v10, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1357,8 +1344,7 @@ define void @v_shuffle_v2p0_v4p0__5_1(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[4:11]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v2
-; GFX942-NEXT: v_mov_b32_e32 v9, v3
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v12, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1413,8 +1399,7 @@ define void @v_shuffle_v2p0_v4p0__6_1(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[4:11]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v2
-; GFX942-NEXT: v_mov_b32_e32 v11, v3
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v12, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1498,8 +1483,7 @@ define void @v_shuffle_v2p0_v4p0__0_2(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v4
-; GFX942-NEXT: v_mov_b32_e32 v3, v5
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v8, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1582,8 +1566,7 @@ define void @v_shuffle_v2p0_v4p0__2_2(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v4
-; GFX942-NEXT: v_mov_b32_e32 v7, v5
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1628,8 +1611,7 @@ define void @v_shuffle_v2p0_v4p0__3_2(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v4
-; GFX942-NEXT: v_mov_b32_e32 v9, v5
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v10, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1722,8 +1704,7 @@ define void @v_shuffle_v2p0_v4p0__5_2(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[6:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v10, v4
-; GFX942-NEXT: v_mov_b32_e32 v11, v5
+; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v14, v[8:11], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1778,8 +1759,7 @@ define void @v_shuffle_v2p0_v4p0__6_2(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[6:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v12, v4
-; GFX942-NEXT: v_mov_b32_e32 v13, v5
+; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v14, v[10:13], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1863,8 +1843,7 @@ define void @v_shuffle_v2p0_v4p0__0_3(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v6
-; GFX942-NEXT: v_mov_b32_e32 v3, v7
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v8, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1908,8 +1887,7 @@ define void @v_shuffle_v2p0_v4p0__1_3(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v6
-; GFX942-NEXT: v_mov_b32_e32 v5, v7
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v8, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -1993,8 +1971,7 @@ define void @v_shuffle_v2p0_v4p0__3_3(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v6
-; GFX942-NEXT: v_mov_b32_e32 v9, v7
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v10, v[6:9], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2087,8 +2064,7 @@ define void @v_shuffle_v2p0_v4p0__5_3(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v12, v6
-; GFX942-NEXT: v_mov_b32_e32 v13, v7
+; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v16, v[10:13], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2143,8 +2119,7 @@ define void @v_shuffle_v2p0_v4p0__6_3(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v14, v6
-; GFX942-NEXT: v_mov_b32_e32 v15, v7
+; GFX942-NEXT: v_mov_b64_e32 v[14:15], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v16, v[12:15], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2367,8 +2342,7 @@ define void @v_shuffle_v2p0_v4p0__5_4(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v0
-; GFX942-NEXT: v_mov_b32_e32 v5, v1
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v8, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2413,8 +2387,7 @@ define void @v_shuffle_v2p0_v4p0__6_4(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v0
-; GFX942-NEXT: v_mov_b32_e32 v7, v1
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[0:1]
; GFX942-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2509,8 +2482,7 @@ define void @v_shuffle_v2p0_v4p0__0_5(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[2:9]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v4
-; GFX942-NEXT: v_mov_b32_e32 v3, v5
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v10, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2565,8 +2537,7 @@ define void @v_shuffle_v2p0_v4p0__1_5(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[4:11]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v6
-; GFX942-NEXT: v_mov_b32_e32 v5, v7
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v12, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2621,8 +2592,7 @@ define void @v_shuffle_v2p0_v4p0__2_5(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[6:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v8
-; GFX942-NEXT: v_mov_b32_e32 v7, v9
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[8:9]
; GFX942-NEXT: global_store_dwordx4 v14, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2673,8 +2643,7 @@ define void @v_shuffle_v2p0_v4p0__3_5(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v10
-; GFX942-NEXT: v_mov_b32_e32 v9, v11
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
@@ -2762,8 +2731,7 @@ define void @v_shuffle_v2p0_v4p0__5_5(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v2
-; GFX942-NEXT: v_mov_b32_e32 v5, v3
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v8, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2808,8 +2776,7 @@ define void @v_shuffle_v2p0_v4p0__6_5(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v2
-; GFX942-NEXT: v_mov_b32_e32 v7, v3
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[2:3]
; GFX942-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2904,8 +2871,7 @@ define void @v_shuffle_v2p0_v4p0__0_6(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[2:9]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v6
-; GFX942-NEXT: v_mov_b32_e32 v3, v7
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v10, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -2960,8 +2926,7 @@ define void @v_shuffle_v2p0_v4p0__1_6(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[4:11]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v8
-; GFX942-NEXT: v_mov_b32_e32 v5, v9
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[8:9]
; GFX942-NEXT: global_store_dwordx4 v12, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3016,8 +2981,7 @@ define void @v_shuffle_v2p0_v4p0__2_6(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[6:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v10
-; GFX942-NEXT: v_mov_b32_e32 v7, v11
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[10:11]
; GFX942-NEXT: global_store_dwordx4 v14, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3068,8 +3032,7 @@ define void @v_shuffle_v2p0_v4p0__3_6(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v12
-; GFX942-NEXT: v_mov_b32_e32 v9, v13
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
@@ -3117,8 +3080,7 @@ define void @v_shuffle_v2p0_v4p0__4_6(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v4
-; GFX942-NEXT: v_mov_b32_e32 v3, v5
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v8, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3203,8 +3165,7 @@ define void @v_shuffle_v2p0_v4p0__6_6(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v4
-; GFX942-NEXT: v_mov_b32_e32 v7, v5
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[4:5]
; GFX942-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3299,8 +3260,7 @@ define void @v_shuffle_v2p0_v4p0__0_7(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[2:9]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v8
-; GFX942-NEXT: v_mov_b32_e32 v3, v9
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[8:9]
; GFX942-NEXT: global_store_dwordx4 v10, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3355,8 +3315,7 @@ define void @v_shuffle_v2p0_v4p0__1_7(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[4:11]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v10
-; GFX942-NEXT: v_mov_b32_e32 v5, v11
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[10:11]
; GFX942-NEXT: global_store_dwordx4 v12, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3411,8 +3370,7 @@ define void @v_shuffle_v2p0_v4p0__2_7(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[6:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: v_mov_b32_e32 v6, v12
-; GFX942-NEXT: v_mov_b32_e32 v7, v13
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[12:13]
; GFX942-NEXT: global_store_dwordx4 v14, v[4:7], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3463,8 +3421,7 @@ define void @v_shuffle_v2p0_v4p0__3_7(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v16, 0
-; GFX942-NEXT: v_mov_b32_e32 v8, v14
-; GFX942-NEXT: v_mov_b32_e32 v9, v15
+; GFX942-NEXT: v_mov_b64_e32 v[8:9], v[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
@@ -3512,8 +3469,7 @@ define void @v_shuffle_v2p0_v4p0__4_7(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v2, v6
-; GFX942-NEXT: v_mov_b32_e32 v3, v7
+; GFX942-NEXT: v_mov_b64_e32 v[2:3], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v8, v[0:3], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3558,8 +3514,7 @@ define void @v_shuffle_v2p0_v4p0__5_7(ptr addrspace(1) inreg %ptr) {
; GFX942-NEXT: ; def v[0:7]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: v_mov_b32_e32 v8, 0
-; GFX942-NEXT: v_mov_b32_e32 v4, v6
-; GFX942-NEXT: v_mov_b32_e32 v5, v7
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], v[6:7]
; GFX942-NEXT: global_store_dwordx4 v8, v[2:5], s[0:1]
; GFX942-NEXT: s_waitcnt vmcnt(0)
; GFX942-NEXT: s_setpc_b64 s[30:31]
@@ -3697,8 +3652,7 @@ define void @s_shuffle_v2p0_v4p0__1_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3782,8 +3736,7 @@ define void @s_shuffle_v2p0_v4p0__3_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3841,8 +3794,7 @@ define void @s_shuffle_v2p0_v4p0__5_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3928,8 +3880,7 @@ define void @s_shuffle_v2p0_v4p0__7_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -3988,10 +3939,8 @@ define void @s_shuffle_v2p0_v4p0__7_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -4045,8 +3994,7 @@ define void @s_shuffle_v2p0_v4p0__7_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -4104,10 +4052,8 @@ define void @s_shuffle_v2p0_v4p0__7_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -4162,8 +4108,7 @@ define void @s_shuffle_v2p0_v4p0__7_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -4212,10 +4157,8 @@ define void @s_shuffle_v2p0_v4p0__7_4() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -4228,18 +4171,43 @@ define void @s_shuffle_v2p0_v4p0__7_4() {
}
define void @s_shuffle_v2p0_v4p0__7_5() {
-; GFX9-LABEL: s_shuffle_v2p0_v4p0__7_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2p0_v4p0__7_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2p0_v4p0__7_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2p0_v4p0__7_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <2 x i32> <i32 7, i32 5>
@@ -4284,10 +4252,8 @@ define void @s_shuffle_v2p0_v4p0__7_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -4300,18 +4266,43 @@ define void @s_shuffle_v2p0_v4p0__7_6() {
}
define void @s_shuffle_v2p0_v4p0__7_7() {
-; GFX9-LABEL: s_shuffle_v2p0_v4p0__7_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2p0_v4p0__7_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2p0_v4p0__7_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2p0_v4p0__7_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <2 x i32> <i32 7, i32 7>
@@ -4352,8 +4343,7 @@ define void @s_shuffle_v2p0_v4p0__u_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -4365,18 +4355,43 @@ define void @s_shuffle_v2p0_v4p0__u_0() {
}
define void @s_shuffle_v2p0_v4p0__0_0() {
-; GFX9-LABEL: s_shuffle_v2p0_v4p0__0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2p0_v4p0__0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2p0_v4p0__0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2p0_v4p0__0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <2 x i32> zeroinitializer
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x ptr> %shuf)
@@ -4420,10 +4435,8 @@ define void @s_shuffle_v2p0_v4p0__1_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -4435,18 +4448,43 @@ define void @s_shuffle_v2p0_v4p0__1_0() {
}
define void @s_shuffle_v2p0_v4p0__2_0() {
-; GFX9-LABEL: s_shuffle_v2p0_v4p0__2_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2p0_v4p0__2_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2p0_v4p0__2_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2p0_v4p0__2_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <2 x i32> <i32 2, i32 0>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x ptr> %shuf)
@@ -4490,10 +4528,8 @@ define void @s_shuffle_v2p0_v4p0__3_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -4537,8 +4573,7 @@ define void @s_shuffle_v2p0_v4p0__4_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -4596,10 +4631,8 @@ define void @s_shuffle_v2p0_v4p0__5_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -4654,8 +4687,7 @@ define void @s_shuffle_v2p0_v4p0__6_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -4748,18 +4780,43 @@ define void @s_shuffle_v2p0_v4p0__0_1() {
}
define void @s_shuffle_v2p0_v4p0__1_1() {
-; GFX9-LABEL: s_shuffle_v2p0_v4p0__1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2p0_v4p0__1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2p0_v4p0__1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2p0_v4p0__1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <2 x i32> <i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x ptr> %shuf)
@@ -4767,18 +4824,43 @@ define void @s_shuffle_v2p0_v4p0__1_1() {
}
define void @s_shuffle_v2p0_v4p0__2_1() {
-; GFX9-LABEL: s_shuffle_v2p0_v4p0__2_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2p0_v4p0__2_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2p0_v4p0__2_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2p0_v4p0__2_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <2 x i32> <i32 2, i32 1>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x ptr> %shuf)
@@ -4786,18 +4868,43 @@ define void @s_shuffle_v2p0_v4p0__2_1() {
}
define void @s_shuffle_v2p0_v4p0__3_1() {
-; GFX9-LABEL: s_shuffle_v2p0_v4p0__3_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2p0_v4p0__3_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2p0_v4p0__3_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2p0_v4p0__3_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <2 x i32> <i32 3, i32 1>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x ptr> %shuf)
@@ -4886,8 +4993,7 @@ define void @s_shuffle_v2p0_v4p0__5_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -4942,8 +5048,7 @@ define void @s_shuffle_v2p0_v4p0__6_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s2
-; GFX942-NEXT: s_mov_b32 s11, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -4988,8 +5093,7 @@ define void @s_shuffle_v2p0_v4p0__u_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -5001,18 +5105,43 @@ define void @s_shuffle_v2p0_v4p0__u_2() {
}
define void @s_shuffle_v2p0_v4p0__0_2() {
-; GFX9-LABEL: s_shuffle_v2p0_v4p0__0_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2p0_v4p0__0_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2p0_v4p0__0_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2p0_v4p0__0_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <2 x i32> <i32 0, i32 2>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x ptr> %shuf)
@@ -5056,10 +5185,8 @@ define void @s_shuffle_v2p0_v4p0__1_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -5071,18 +5198,43 @@ define void @s_shuffle_v2p0_v4p0__1_2() {
}
define void @s_shuffle_v2p0_v4p0__2_2() {
-; GFX9-LABEL: s_shuffle_v2p0_v4p0__2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2p0_v4p0__2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2p0_v4p0__2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2p0_v4p0__2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <2 x i32> <i32 2, i32 2>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x ptr> %shuf)
@@ -5126,10 +5278,8 @@ define void @s_shuffle_v2p0_v4p0__3_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -5173,8 +5323,7 @@ define void @s_shuffle_v2p0_v4p0__4_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -5231,10 +5380,8 @@ define void @s_shuffle_v2p0_v4p0__5_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -5289,8 +5436,7 @@ define void @s_shuffle_v2p0_v4p0__6_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -5343,18 +5489,43 @@ define void @s_shuffle_v2p0_v4p0__u_3() {
}
define void @s_shuffle_v2p0_v4p0__0_3() {
-; GFX9-LABEL: s_shuffle_v2p0_v4p0__0_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2p0_v4p0__0_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2p0_v4p0__0_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2p0_v4p0__0_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <2 x i32> <i32 0, i32 3>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x ptr> %shuf)
@@ -5362,18 +5533,43 @@ define void @s_shuffle_v2p0_v4p0__0_3() {
}
define void @s_shuffle_v2p0_v4p0__1_3() {
-; GFX9-LABEL: s_shuffle_v2p0_v4p0__1_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s6
-; GFX9-NEXT: s_mov_b32 s9, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2p0_v4p0__1_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2p0_v4p0__1_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2p0_v4p0__1_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <2 x i32> <i32 1, i32 3>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x ptr> %shuf)
@@ -5421,18 +5617,43 @@ define void @s_shuffle_v2p0_v4p0__2_3() {
}
define void @s_shuffle_v2p0_v4p0__3_3() {
-; GFX9-LABEL: s_shuffle_v2p0_v4p0__3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2p0_v4p0__3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2p0_v4p0__3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2p0_v4p0__3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <2 x i32> <i32 3, i32 3>
call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x ptr> %shuf)
@@ -5522,8 +5743,7 @@ define void @s_shuffle_v2p0_v4p0__5_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -5578,8 +5798,7 @@ define void @s_shuffle_v2p0_v4p0__6_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -5678,8 +5897,7 @@ define void @s_shuffle_v2p0_v4p0__1_4() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -5763,8 +5981,7 @@ define void @s_shuffle_v2p0_v4p0__3_4() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -5826,10 +6043,8 @@ define void @s_shuffle_v2p0_v4p0__5_4() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -5842,18 +6057,43 @@ define void @s_shuffle_v2p0_v4p0__5_4() {
}
define void @s_shuffle_v2p0_v4p0__6_4() {
-; GFX9-LABEL: s_shuffle_v2p0_v4p0__6_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2p0_v4p0__6_4:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2p0_v4p0__6_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2p0_v4p0__6_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <2 x i32> <i32 6, i32 4>
@@ -5944,8 +6184,7 @@ define void @s_shuffle_v2p0_v4p0__0_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s2
-; GFX942-NEXT: s_mov_b32 s11, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -5999,8 +6238,7 @@ define void @s_shuffle_v2p0_v4p0__1_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -6055,8 +6293,7 @@ define void @s_shuffle_v2p0_v4p0__2_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s2
-; GFX942-NEXT: s_mov_b32 s11, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -6110,8 +6347,7 @@ define void @s_shuffle_v2p0_v4p0__3_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -6165,18 +6401,43 @@ define void @s_shuffle_v2p0_v4p0__4_5() {
}
define void @s_shuffle_v2p0_v4p0__5_5() {
-; GFX9-LABEL: s_shuffle_v2p0_v4p0__5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2p0_v4p0__5_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2p0_v4p0__5_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2p0_v4p0__5_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <2 x i32> <i32 5, i32 5>
@@ -6185,18 +6446,43 @@ define void @s_shuffle_v2p0_v4p0__5_5() {
}
define void @s_shuffle_v2p0_v4p0__6_5() {
-; GFX9-LABEL: s_shuffle_v2p0_v4p0__6_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2p0_v4p0__6_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2p0_v4p0__6_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2p0_v4p0__6_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <2 x i32> <i32 6, i32 5>
@@ -6237,8 +6523,7 @@ define void @s_shuffle_v2p0_v4p0__u_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -6292,8 +6577,7 @@ define void @s_shuffle_v2p0_v4p0__0_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -6351,10 +6635,8 @@ define void @s_shuffle_v2p0_v4p0__1_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -6409,8 +6691,7 @@ define void @s_shuffle_v2p0_v4p0__2_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -6468,10 +6749,8 @@ define void @s_shuffle_v2p0_v4p0__3_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -6484,18 +6763,43 @@ define void @s_shuffle_v2p0_v4p0__3_6() {
}
define void @s_shuffle_v2p0_v4p0__4_6() {
-; GFX9-LABEL: s_shuffle_v2p0_v4p0__4_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2p0_v4p0__4_6:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2p0_v4p0__4_6:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2p0_v4p0__4_6:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <2 x i32> <i32 4, i32 6>
@@ -6540,10 +6844,8 @@ define void @s_shuffle_v2p0_v4p0__5_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -6556,18 +6858,43 @@ define void @s_shuffle_v2p0_v4p0__5_6() {
}
define void @s_shuffle_v2p0_v4p0__6_6() {
-; GFX9-LABEL: s_shuffle_v2p0_v4p0__6_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2p0_v4p0__6_6:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2p0_v4p0__6_6:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2p0_v4p0__6_6:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <2 x i32> <i32 6, i32 6>
@@ -6658,8 +6985,7 @@ define void @s_shuffle_v2p0_v4p0__0_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s6
-; GFX942-NEXT: s_mov_b32 s11, s7
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -6714,8 +7040,7 @@ define void @s_shuffle_v2p0_v4p0__1_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -6770,8 +7095,7 @@ define void @s_shuffle_v2p0_v4p0__2_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s6
-; GFX942-NEXT: s_mov_b32 s11, s7
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -6826,8 +7150,7 @@ define void @s_shuffle_v2p0_v4p0__3_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:11]
; GFX942-NEXT: ;;#ASMEND
@@ -6840,18 +7163,43 @@ define void @s_shuffle_v2p0_v4p0__3_7() {
}
define void @s_shuffle_v2p0_v4p0__4_7() {
-; GFX9-LABEL: s_shuffle_v2p0_v4p0__4_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2p0_v4p0__4_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2p0_v4p0__4_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2p0_v4p0__4_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <2 x i32> <i32 4, i32 7>
@@ -6860,18 +7208,43 @@ define void @s_shuffle_v2p0_v4p0__4_7() {
}
define void @s_shuffle_v2p0_v4p0__5_7() {
-; GFX9-LABEL: s_shuffle_v2p0_v4p0__5_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s6
-; GFX9-NEXT: s_mov_b32 s9, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v2p0_v4p0__5_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v2p0_v4p0__5_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v2p0_v4p0__5_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <2 x i32> <i32 5, i32 7>
diff --git a/llvm/test/CodeGen/AMDGPU/shufflevector.v3i64.v2i64.ll b/llvm/test/CodeGen/AMDGPU/shufflevector.v3i64.v2i64.ll
index 137fedb3d9100..7e5df14207bde 100644
--- a/llvm/test/CodeGen/AMDGPU/shufflevector.v3i64.v2i64.ll
+++ b/llvm/test/CodeGen/AMDGPU/shufflevector.v3i64.v2i64.ll
@@ -2124,8 +2124,7 @@ define void @s_shuffle_v3i64_v2i64__1_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -2183,8 +2182,7 @@ define void @s_shuffle_v3i64_v2i64__3_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -2242,10 +2240,8 @@ define void @s_shuffle_v3i64_v2i64__3_0_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -2299,8 +2295,7 @@ define void @s_shuffle_v3i64_v2i64__3_1_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -2349,10 +2344,8 @@ define void @s_shuffle_v3i64_v2i64__3_2_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -2365,18 +2358,43 @@ define void @s_shuffle_v3i64_v2i64__3_2_u() {
}
define void @s_shuffle_v3i64_v2i64__3_3_u() {
-; GFX9-LABEL: s_shuffle_v3i64_v2i64__3_3_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v2i64__3_3_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v2i64__3_3_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v2i64__3_3_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%vec1 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <3 x i32> <i32 3, i32 3, i32 poison>
@@ -2385,21 +2403,52 @@ define void @s_shuffle_v3i64_v2i64__3_3_u() {
}
define void @s_shuffle_v3i64_v2i64__3_3_0() {
-; GFX9-LABEL: s_shuffle_v3i64_v2i64__3_3_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v2i64__3_3_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v2i64__3_3_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v2i64__3_3_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%vec1 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <3 x i32> <i32 3, i32 3, i32 0>
@@ -2453,10 +2502,8 @@ define void @s_shuffle_v3i64_v2i64__3_3_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -2469,20 +2516,48 @@ define void @s_shuffle_v3i64_v2i64__3_3_1() {
}
define void @s_shuffle_v3i64_v2i64__3_3_2() {
-; GFX9-LABEL: s_shuffle_v3i64_v2i64__3_3_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v2i64__3_3_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v2i64__3_3_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v2i64__3_3_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%vec1 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <3 x i32> <i32 3, i32 3, i32 2>
@@ -2491,20 +2566,48 @@ define void @s_shuffle_v3i64_v2i64__3_3_2() {
}
define void @s_shuffle_v3i64_v2i64__3_3_3() {
-; GFX9-LABEL: s_shuffle_v3i64_v2i64__3_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v2i64__3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v2i64__3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v2i64__3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%vec1 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <3 x i32> <i32 3, i32 3, i32 3>
@@ -2513,18 +2616,43 @@ define void @s_shuffle_v3i64_v2i64__3_3_3() {
}
define void @s_shuffle_v3i64_v2i64__u_0_0() {
-; GFX9-LABEL: s_shuffle_v3i64_v2i64__u_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v2i64__u_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v2i64__u_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v2i64__u_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <3 x i32> <i32 poison, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
@@ -2532,20 +2660,48 @@ define void @s_shuffle_v3i64_v2i64__u_0_0() {
}
define void @s_shuffle_v3i64_v2i64__0_0_0() {
-; GFX9-LABEL: s_shuffle_v3i64_v2i64__0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v2i64__0_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v2i64__0_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v2i64__0_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <3 x i32> zeroinitializer
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
@@ -2553,20 +2709,48 @@ define void @s_shuffle_v3i64_v2i64__0_0_0() {
}
define void @s_shuffle_v3i64_v2i64__1_0_0() {
-; GFX9-LABEL: s_shuffle_v3i64_v2i64__1_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v2i64__1_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v2i64__1_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v2i64__1_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <3 x i32> <i32 1, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
@@ -2574,18 +2758,43 @@ define void @s_shuffle_v3i64_v2i64__1_0_0() {
}
define void @s_shuffle_v3i64_v2i64__2_0_0() {
-; GFX9-LABEL: s_shuffle_v3i64_v2i64__2_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v2i64__2_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v2i64__2_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v2i64__2_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <3 x i32> <i32 2, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
@@ -2638,10 +2847,8 @@ define void @s_shuffle_v3i64_v2i64__3_0_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -2695,8 +2902,7 @@ define void @s_shuffle_v3i64_v2i64__3_u_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -2754,10 +2960,8 @@ define void @s_shuffle_v3i64_v2i64__3_1_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -2815,10 +3019,8 @@ define void @s_shuffle_v3i64_v2i64__3_2_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -2831,18 +3033,43 @@ define void @s_shuffle_v3i64_v2i64__3_2_0() {
}
define void @s_shuffle_v3i64_v2i64__u_1_1() {
-; GFX9-LABEL: s_shuffle_v3i64_v2i64__u_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v2i64__u_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v2i64__u_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v2i64__u_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <3 x i32> <i32 poison, i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
@@ -2850,18 +3077,43 @@ define void @s_shuffle_v3i64_v2i64__u_1_1() {
}
define void @s_shuffle_v3i64_v2i64__0_1_1() {
-; GFX9-LABEL: s_shuffle_v3i64_v2i64__0_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v2i64__0_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v2i64__0_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v2i64__0_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <3 x i32> <i32 0, i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
@@ -2869,39 +3121,92 @@ define void @s_shuffle_v3i64_v2i64__0_1_1() {
}
define void @s_shuffle_v3i64_v2i64__1_1_1() {
-; GFX9-LABEL: s_shuffle_v3i64_v2i64__1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v2i64__1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v2i64__1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v2i64__1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <3 x i32> <i32 1, i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
-}
-
-define void @s_shuffle_v3i64_v2i64__2_1_1() {
-; GFX9-LABEL: s_shuffle_v3i64_v2i64__2_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+}
+
+define void @s_shuffle_v3i64_v2i64__2_1_1() {
+; GFX900-LABEL: s_shuffle_v3i64_v2i64__2_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v2i64__2_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v2i64__2_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <3 x i32> <i32 2, i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
@@ -2954,10 +3259,8 @@ define void @s_shuffle_v3i64_v2i64__3_1_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -3015,10 +3318,8 @@ define void @s_shuffle_v3i64_v2i64__3_u_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -3080,12 +3381,9 @@ define void @s_shuffle_v3i64_v2i64__3_0_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -3147,12 +3445,9 @@ define void @s_shuffle_v3i64_v2i64__3_2_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -3251,8 +3546,7 @@ define void @s_shuffle_v3i64_v2i64__1_2_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -3278,20 +3572,48 @@ define void @s_shuffle_v3i64_v2i64__2_2_2() {
}
define void @s_shuffle_v3i64_v2i64__3_2_2() {
-; GFX9-LABEL: s_shuffle_v3i64_v2i64__3_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v2i64__3_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v2i64__3_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v2i64__3_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%vec1 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <3 x i32> <i32 3, i32 2, i32 2>
@@ -3300,18 +3622,43 @@ define void @s_shuffle_v3i64_v2i64__3_2_2() {
}
define void @s_shuffle_v3i64_v2i64__3_u_2() {
-; GFX9-LABEL: s_shuffle_v3i64_v2i64__3_u_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v2i64__3_u_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v2i64__3_u_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v2i64__3_u_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%vec1 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <3 x i32> <i32 3, i32 poison, i32 2>
@@ -3365,10 +3712,8 @@ define void @s_shuffle_v3i64_v2i64__3_0_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -3381,21 +3726,52 @@ define void @s_shuffle_v3i64_v2i64__3_0_2() {
}
define void @s_shuffle_v3i64_v2i64__3_1_2() {
-; GFX9-LABEL: s_shuffle_v3i64_v2i64__3_1_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v2i64__3_1_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v2i64__3_1_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v2i64__3_1_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%vec1 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <3 x i32> <i32 3, i32 1, i32 2>
@@ -3404,18 +3780,43 @@ define void @s_shuffle_v3i64_v2i64__3_1_2() {
}
define void @s_shuffle_v3i64_v2i64__u_3_3() {
-; GFX9-LABEL: s_shuffle_v3i64_v2i64__u_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v2i64__u_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v2i64__u_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v2i64__u_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%vec1 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <3 x i32> <i32 poison, i32 3, i32 3>
@@ -3469,10 +3870,8 @@ define void @s_shuffle_v3i64_v2i64__0_3_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s2
-; GFX942-NEXT: s_mov_b32 s11, s3
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -3530,10 +3929,8 @@ define void @s_shuffle_v3i64_v2i64__1_3_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -3546,18 +3943,43 @@ define void @s_shuffle_v3i64_v2i64__1_3_3() {
}
define void @s_shuffle_v3i64_v2i64__2_3_3() {
-; GFX9-LABEL: s_shuffle_v3i64_v2i64__2_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v2i64__2_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v2i64__2_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v2i64__2_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%vec1 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <3 x i32> <i32 2, i32 3, i32 3>
@@ -3602,10 +4024,8 @@ define void @s_shuffle_v3i64_v2i64__3_u_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -3667,12 +4087,9 @@ define void @s_shuffle_v3i64_v2i64__3_0_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -3730,10 +4147,8 @@ define void @s_shuffle_v3i64_v2i64__3_1_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -3786,12 +4201,9 @@ define void @s_shuffle_v3i64_v2i64__3_2_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
diff --git a/llvm/test/CodeGen/AMDGPU/shufflevector.v3i64.v3i64.ll b/llvm/test/CodeGen/AMDGPU/shufflevector.v3i64.v3i64.ll
index 3b3bd8b380195..68b21b12a3a0a 100644
--- a/llvm/test/CodeGen/AMDGPU/shufflevector.v3i64.v3i64.ll
+++ b/llvm/test/CodeGen/AMDGPU/shufflevector.v3i64.v3i64.ll
@@ -4471,8 +4471,7 @@ define void @s_shuffle_v3i64_v3i64__1_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -4570,8 +4569,7 @@ define void @s_shuffle_v3i64_v3i64__4_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -4663,11 +4661,11 @@ define void @s_shuffle_v3i64_v3i64__5_0_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -4769,11 +4767,11 @@ define void @s_shuffle_v3i64_v3i64__5_2_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -4786,18 +4784,43 @@ define void @s_shuffle_v3i64_v3i64__5_2_u() {
}
define void @s_shuffle_v3i64_v3i64__5_3_u() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__5_3_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_3_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_3_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_3_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 3, i32 poison>
@@ -4806,18 +4829,43 @@ define void @s_shuffle_v3i64_v3i64__5_3_u() {
}
define void @s_shuffle_v3i64_v3i64__5_4_u() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__5_4_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_4_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_4_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_4_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 4, i32 poison>
@@ -4826,18 +4874,43 @@ define void @s_shuffle_v3i64_v3i64__5_4_u() {
}
define void @s_shuffle_v3i64_v3i64__5_5_u() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__5_5_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_5_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_5_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_5_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 5, i32 poison>
@@ -4846,21 +4919,52 @@ define void @s_shuffle_v3i64_v3i64__5_5_u() {
}
define void @s_shuffle_v3i64_v3i64__5_5_0() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__5_5_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_5_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_5_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_5_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 5, i32 0>
@@ -4911,13 +5015,11 @@ define void @s_shuffle_v3i64_v3i64__5_5_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -4972,8 +5074,7 @@ define void @s_shuffle_v3i64_v3i64__5_5_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -4986,20 +5087,48 @@ define void @s_shuffle_v3i64_v3i64__5_5_2() {
}
define void @s_shuffle_v3i64_v3i64__5_5_3() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__5_5_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_5_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_5_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_5_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 5, i32 3>
@@ -5008,162 +5137,112 @@ define void @s_shuffle_v3i64_v3i64__5_5_3() {
}
define void @s_shuffle_v3i64_v3i64__5_5_4() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__5_5_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 5, i32 4>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v3i64__5_5_5() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__5_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v3i64__u_0_0() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__u_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <3 x i32> <i32 poison, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v3i64__0_0_0() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <3 x i32> zeroinitializer
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v3i64__1_0_0() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__1_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <3 x i32> <i32 1, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v3i64__2_0_0() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__2_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_5_4:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_5_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_5_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <3 x i32> <i32 2, i32 0, i32 0>
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 5, i32 4>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v3i64__3_0_0() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__3_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v3i64_v3i64__5_5_5() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_5_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_5_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_5_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <3 x i32> <i32 3, i32 0, i32 0>
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v3i64__4_0_0() {
-; GFX900-LABEL: s_shuffle_v3i64_v3i64__4_0_0:
+define void @s_shuffle_v3i64_v3i64__u_0_0() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__u_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:9]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:17]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s6
-; GFX900-NEXT: s_mov_b32 s9, s7
; GFX900-NEXT: s_mov_b32 s10, s12
; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: ;;#ASMSTART
@@ -5171,17 +5250,12 @@ define void @s_shuffle_v3i64_v3i64__4_0_0() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v3i64__4_0_0:
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__u_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:9]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:17]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s6
-; GFX90A-NEXT: s_mov_b32 s9, s7
; GFX90A-NEXT: s_mov_b32 s10, s12
; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: ;;#ASMSTART
@@ -5189,766 +5263,1452 @@ define void @s_shuffle_v3i64_v3i64__4_0_0() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v3i64__4_0_0:
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__u_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:17]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 4, i32 0, i32 0>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <3 x i32> <i32 poison, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v3i64__5_0_0() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__5_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v3i64_v3i64__0_0_0() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__0_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__0_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__0_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 0, i32 0>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <3 x i32> zeroinitializer
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v3i64__5_u_0() {
-; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_u_0:
+define void @s_shuffle_v3i64_v3i64__1_0_0() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__1_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:17]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:9]
-; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_u_0:
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__1_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:17]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:9]
-; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_u_0:
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__1_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:17]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:9]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 poison, i32 0>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v3i64__5_1_0() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__5_1_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 1, i32 0>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <3 x i32> <i32 1, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v3i64__5_2_0() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__5_2_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s16
-; GFX9-NEXT: s_mov_b32 s11, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v3i64_v3i64__2_0_0() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__2_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__2_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__2_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 2, i32 0>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <3 x i32> <i32 2, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v3i64__5_3_0() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__5_3_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v3i64_v3i64__3_0_0() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__3_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__3_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__3_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <3 x i32> <i32 3, i32 0, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v3i64__4_0_0() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__4_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__4_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__4_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 3, i32 0>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 4, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v3i64__5_4_0() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__5_4_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v3i64_v3i64__5_0_0() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 4, i32 0>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v3i64__u_1_1() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__u_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v3i64_v3i64__5_u_0() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_u_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_u_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_u_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 poison, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v3i64__5_1_0() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_1_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_1_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_1_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 1, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v3i64__5_2_0() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_2_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s16
+; GFX900-NEXT: s_mov_b32 s11, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_2_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s16
+; GFX90A-NEXT: s_mov_b32 s11, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_2_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 2, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v3i64__5_3_0() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_3_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_3_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_3_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 3, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v3i64__5_4_0() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_4_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_4_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_4_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 4, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v3i64__u_1_1() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__u_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__u_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__u_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <3 x i32> <i32 poison, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v3i64__0_1_1() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__0_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__0_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__0_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <3 x i32> <i32 0, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v3i64__1_1_1() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <3 x i32> <i32 1, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v3i64__2_1_1() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__2_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__2_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__2_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <3 x i32> <i32 2, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v3i64__3_1_1() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__3_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__3_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__3_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <3 x i32> <i32 poison, i32 1, i32 1>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <3 x i32> <i32 3, i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v3i64__0_1_1() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__0_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v3i64_v3i64__4_1_1() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__4_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__4_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__4_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <3 x i32> <i32 0, i32 1, i32 1>
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 4, i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v3i64__1_1_1() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v3i64_v3i64__5_1_1() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <3 x i32> <i32 1, i32 1, i32 1>
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v3i64__2_1_1() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__2_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v3i64_v3i64__5_u_1() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_u_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_u_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_u_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <3 x i32> <i32 2, i32 1, i32 1>
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 poison, i32 1>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v3i64__3_1_1() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__3_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v3i64_v3i64__5_0_1() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_0_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_0_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_0_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <3 x i32> <i32 3, i32 1, i32 1>
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 0, i32 1>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v3i64__4_1_1() {
-; GFX900-LABEL: s_shuffle_v3i64_v3i64__4_1_1:
+define void @s_shuffle_v3i64_v3i64__5_2_1() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_2_1:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ; def s[12:17]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s6
-; GFX900-NEXT: s_mov_b32 s9, s7
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s10, s16
+; GFX900-NEXT: s_mov_b32 s11, s17
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v3i64__4_1_1:
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_2_1:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ; def s[12:17]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s6
-; GFX90A-NEXT: s_mov_b32 s9, s7
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s10, s16
+; GFX90A-NEXT: s_mov_b32 s11, s17
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v3i64__4_1_1:
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_2_1:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ; def s[12:17]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
+; GFX942-NEXT: s_mov_b64 s[10:11], s[16:17]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 4, i32 1, i32 1>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 2, i32 1>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v3i64__5_1_1() {
-; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_1_1:
+define void @s_shuffle_v3i64_v3i64__5_3_1() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_3_1:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ; def s[12:17]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_1_1:
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_3_1:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ; def s[12:17]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_1_1:
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_3_1:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s10
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s13, s11
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 1, i32 1>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 3, i32 1>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v3i64__5_u_1() {
-; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_u_1:
+define void @s_shuffle_v3i64_v3i64__5_4_1() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_4_1:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ; def s[12:17]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_u_1:
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_4_1:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ; def s[12:17]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_u_1:
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_4_1:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 poison, i32 1>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 4, i32 1>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v3i64__5_0_1() {
-; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_0_1:
+define void @s_shuffle_v3i64_v3i64__u_2_2() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__u_2_2:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:17]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ; def s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s10, s12
; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_0_1:
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__u_2_2:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:17]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ; def s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s10, s12
; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_0_1:
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__u_2_2:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 0, i32 1>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <3 x i32> <i32 poison, i32 2, i32 2>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v3i64__5_2_1() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__5_2_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s16
-; GFX9-NEXT: s_mov_b32 s11, s17
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v3i64_v3i64__0_2_2() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__0_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__0_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__0_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 2, i32 1>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <3 x i32> <i32 0, i32 2, i32 2>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v3i64__5_3_1() {
-; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_3_1:
+define void @s_shuffle_v3i64_v3i64__1_2_2() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__1_2_2:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__1_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__1_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <3 x i32> <i32 1, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v3i64__2_2_2() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s4
-; GFX900-NEXT: s_mov_b32 s11, s5
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_3_1:
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__2_2_2:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:17]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s4
-; GFX90A-NEXT: s_mov_b32 s11, s5
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_3_1:
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__2_2_2:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 3, i32 1>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <3 x i32> <i32 2, i32 2, i32 2>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v3i64__5_4_1() {
-; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_4_1:
+define void @s_shuffle_v3i64_v3i64__3_2_2() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__3_2_2:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:17]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ; def s[8:13]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s6
-; GFX900-NEXT: s_mov_b32 s11, s7
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_4_1:
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__3_2_2:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:17]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ; def s[8:13]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s6
-; GFX90A-NEXT: s_mov_b32 s11, s7
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_4_1:
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__3_2_2:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s6
-; GFX942-NEXT: s_mov_b32 s11, s7
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 4, i32 1>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v3i64__u_2_2() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__u_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <3 x i32> <i32 poison, i32 2, i32 2>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v3i64__0_2_2() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__0_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <3 x i32> <i32 0, i32 2, i32 2>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v3i64__1_2_2() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__1_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <3 x i32> <i32 1, i32 2, i32 2>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v3i64__2_2_2() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__2_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <3 x i32> <i32 2, i32 2, i32 2>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v3i64__3_2_2() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__3_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <3 x i32> <i32 3, i32 2, i32 2>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
@@ -6001,10 +6761,8 @@ define void @s_shuffle_v3i64_v3i64__4_2_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -6055,11 +6813,11 @@ define void @s_shuffle_v3i64_v3i64__5_2_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -6123,23 +6881,57 @@ define void @s_shuffle_v3i64_v3i64__5_u_2() {
}
define void @s_shuffle_v3i64_v3i64__5_0_2() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__5_0_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s12, s16
-; GFX9-NEXT: s_mov_b32 s13, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_0_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s16
+; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_0_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s16
+; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_0_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 0, i32 2>
@@ -6241,8 +7033,7 @@ define void @s_shuffle_v3i64_v3i64__5_3_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -6297,8 +7088,7 @@ define void @s_shuffle_v3i64_v3i64__5_4_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s6
-; GFX942-NEXT: s_mov_b32 s11, s7
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -6397,8 +7187,7 @@ define void @s_shuffle_v3i64_v3i64__1_3_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -6464,20 +7253,48 @@ define void @s_shuffle_v3i64_v3i64__3_3_3() {
}
define void @s_shuffle_v3i64_v3i64__4_3_3() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__4_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__4_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__4_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__4_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 4, i32 3, i32 3>
@@ -6486,20 +7303,48 @@ define void @s_shuffle_v3i64_v3i64__4_3_3() {
}
define void @s_shuffle_v3i64_v3i64__5_3_3() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__5_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 3, i32 3>
@@ -6508,18 +7353,43 @@ define void @s_shuffle_v3i64_v3i64__5_3_3() {
}
define void @s_shuffle_v3i64_v3i64__5_u_3() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__5_u_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_u_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_u_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_u_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 poison, i32 3>
@@ -6570,13 +7440,11 @@ define void @s_shuffle_v3i64_v3i64__5_0_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -6631,8 +7499,7 @@ define void @s_shuffle_v3i64_v3i64__5_1_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -6687,13 +7554,11 @@ define void @s_shuffle_v3i64_v3i64__5_2_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -6706,20 +7571,48 @@ define void @s_shuffle_v3i64_v3i64__5_2_3() {
}
define void @s_shuffle_v3i64_v3i64__5_4_3() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__5_4_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_4_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_4_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_4_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 4, i32 3>
@@ -6728,18 +7621,43 @@ define void @s_shuffle_v3i64_v3i64__5_4_3() {
}
define void @s_shuffle_v3i64_v3i64__u_4_4() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__u_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__u_4_4:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__u_4_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__u_4_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 poison, i32 4, i32 4>
@@ -6766,60 +7684,219 @@ define void @s_shuffle_v3i64_v3i64__0_4_4() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v3i64__0_4_4:
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__0_4_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__0_4_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 0, i32 4, i32 4>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v3i64__1_4_4() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__1_4_4:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__1_4_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__1_4_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 1, i32 4, i32 4>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v3i64__2_4_4() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__2_4_4:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__2_4_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__2_4_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 2, i32 4, i32 4>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v3i64__3_4_4() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__3_4_4:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__3_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:13]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:17]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s14
-; GFX90A-NEXT: s_mov_b32 s11, s15
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v3i64__0_4_4:
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__3_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s2
-; GFX942-NEXT: s_mov_b32 s11, s3
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 0, i32 4, i32 4>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 3, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v3i64__1_4_4() {
-; GFX900-LABEL: s_shuffle_v3i64_v3i64__1_4_4:
+define void @s_shuffle_v3i64_v3i64__4_4_4() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__4_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:9]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:13]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s6
-; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
; GFX900-NEXT: s_mov_b32 s12, s10
; GFX900-NEXT: s_mov_b32 s13, s11
; GFX900-NEXT: ;;#ASMSTART
@@ -6827,17 +7904,14 @@ define void @s_shuffle_v3i64_v3i64__1_4_4() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v3i64__1_4_4:
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__4_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:9]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:13]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s6
-; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
; GFX90A-NEXT: s_mov_b32 s12, s10
; GFX90A-NEXT: s_mov_b32 s13, s11
; GFX90A-NEXT: ;;#ASMSTART
@@ -6845,149 +7919,68 @@ define void @s_shuffle_v3i64_v3i64__1_4_4() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v3i64__1_4_4:
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__4_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 1, i32 4, i32 4>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 4, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v3i64__2_4_4() {
-; GFX900-LABEL: s_shuffle_v3i64_v3i64__2_4_4:
+define void @s_shuffle_v3i64_v3i64__5_4_4() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:17]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s14
-; GFX900-NEXT: s_mov_b32 s11, s15
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v3i64__2_4_4:
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:17]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s14
-; GFX90A-NEXT: s_mov_b32 s11, s15
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v3i64__2_4_4:
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s2
-; GFX942-NEXT: s_mov_b32 s11, s3
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 2, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v3i64__3_4_4() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__3_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 3, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v3i64__4_4_4() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__4_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 4, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v3i64__5_4_4() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__5_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 4, i32 4>
@@ -6996,18 +7989,43 @@ define void @s_shuffle_v3i64_v3i64__5_4_4() {
}
define void @s_shuffle_v3i64_v3i64__5_u_4() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__5_u_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_u_4:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_u_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_u_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 poison, i32 4>
@@ -7058,13 +8076,11 @@ define void @s_shuffle_v3i64_v3i64__5_0_4() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -7119,8 +8135,7 @@ define void @s_shuffle_v3i64_v3i64__5_1_4() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -7151,83 +8166,134 @@ define void @s_shuffle_v3i64_v3i64__5_2_4() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_2_4:
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_2_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_2_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 2, i32 4>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v3i64__5_3_4() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_3_4:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_3_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_3_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 3, i32 4>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v3i64__u_5_5() {
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__u_5_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__u_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:13]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:9]
-; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s10, s12
; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s6
-; GFX90A-NEXT: s_mov_b32 s13, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_2_4:
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__u_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:9]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 2, i32 4>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v3i64__5_3_4() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__5_3_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 3, i32 4>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v3i64__u_5_5() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__u_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 poison, i32 5, i32 5>
@@ -7281,10 +8347,8 @@ define void @s_shuffle_v3i64_v3i64__0_5_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -7342,10 +8406,8 @@ define void @s_shuffle_v3i64_v3i64__1_5_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -7404,10 +8466,8 @@ define void @s_shuffle_v3i64_v3i64__2_5_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -7420,18 +8480,43 @@ define void @s_shuffle_v3i64_v3i64__2_5_5() {
}
define void @s_shuffle_v3i64_v3i64__3_5_5() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__3_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__3_5_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__3_5_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__3_5_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 3, i32 5, i32 5>
@@ -7440,20 +8525,48 @@ define void @s_shuffle_v3i64_v3i64__3_5_5() {
}
define void @s_shuffle_v3i64_v3i64__4_5_5() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__4_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__4_5_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__4_5_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__4_5_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 4, i32 5, i32 5>
@@ -7462,18 +8575,43 @@ define void @s_shuffle_v3i64_v3i64__4_5_5() {
}
define void @s_shuffle_v3i64_v3i64__5_u_5() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__5_u_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_u_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_u_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_u_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 poison, i32 5>
@@ -7524,13 +8662,11 @@ define void @s_shuffle_v3i64_v3i64__5_0_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s8
-; GFX942-NEXT: s_mov_b32 s13, s9
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -7585,8 +8721,7 @@ define void @s_shuffle_v3i64_v3i64__5_1_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s8
-; GFX942-NEXT: s_mov_b32 s13, s9
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -7641,13 +8776,11 @@ define void @s_shuffle_v3i64_v3i64__5_2_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s12, s8
-; GFX942-NEXT: s_mov_b32 s13, s9
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -7660,20 +8793,48 @@ define void @s_shuffle_v3i64_v3i64__5_2_5() {
}
define void @s_shuffle_v3i64_v3i64__5_3_5() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__5_3_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_3_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_3_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_3_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 3, i32 5>
@@ -7682,20 +8843,48 @@ define void @s_shuffle_v3i64_v3i64__5_3_5() {
}
define void @s_shuffle_v3i64_v3i64__5_4_5() {
-; GFX9-LABEL: s_shuffle_v3i64_v3i64__5_4_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v3i64__5_4_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v3i64__5_4_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v3i64__5_4_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <3 x i32> <i32 5, i32 4, i32 5>
diff --git a/llvm/test/CodeGen/AMDGPU/shufflevector.v3i64.v4i64.ll b/llvm/test/CodeGen/AMDGPU/shufflevector.v3i64.v4i64.ll
index 4b3bf9bacacd4..e10319abec6dc 100644
--- a/llvm/test/CodeGen/AMDGPU/shufflevector.v3i64.v4i64.ll
+++ b/llvm/test/CodeGen/AMDGPU/shufflevector.v3i64.v4i64.ll
@@ -7669,8 +7669,7 @@ define void @s_shuffle_v3i64_v4i64__1_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -7754,8 +7753,7 @@ define void @s_shuffle_v3i64_v4i64__3_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -7813,8 +7811,7 @@ define void @s_shuffle_v3i64_v4i64__5_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -7900,8 +7897,7 @@ define void @s_shuffle_v3i64_v4i64__7_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -7960,10 +7956,8 @@ define void @s_shuffle_v3i64_v4i64__7_0_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -8017,8 +8011,7 @@ define void @s_shuffle_v3i64_v4i64__7_1_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -8076,10 +8069,8 @@ define void @s_shuffle_v3i64_v4i64__7_2_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -8134,8 +8125,7 @@ define void @s_shuffle_v3i64_v4i64__7_3_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -8184,10 +8174,8 @@ define void @s_shuffle_v3i64_v4i64__7_4_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -8200,18 +8188,43 @@ define void @s_shuffle_v3i64_v4i64__7_4_u() {
}
define void @s_shuffle_v3i64_v4i64__7_5_u() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__7_5_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_5_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_5_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_5_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 5, i32 poison>
@@ -8256,10 +8269,8 @@ define void @s_shuffle_v3i64_v4i64__7_6_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -8272,18 +8283,43 @@ define void @s_shuffle_v3i64_v4i64__7_6_u() {
}
define void @s_shuffle_v3i64_v4i64__7_7_u() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__7_7_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_7_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_7_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_7_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 7, i32 poison>
@@ -8292,21 +8328,52 @@ define void @s_shuffle_v3i64_v4i64__7_7_u() {
}
define void @s_shuffle_v3i64_v4i64__7_7_0() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__7_7_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_7_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_7_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_7_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 7, i32 0>
@@ -8357,13 +8424,11 @@ define void @s_shuffle_v3i64_v4i64__7_7_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -8418,8 +8483,7 @@ define void @s_shuffle_v3i64_v4i64__7_7_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -8474,13 +8538,11 @@ define void @s_shuffle_v3i64_v4i64__7_7_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s14
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -8493,20 +8555,48 @@ define void @s_shuffle_v3i64_v4i64__7_7_3() {
}
define void @s_shuffle_v3i64_v4i64__7_7_4() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__7_7_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_7_4:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_7_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_7_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 7, i32 4>
@@ -8515,20 +8605,48 @@ define void @s_shuffle_v3i64_v4i64__7_7_4() {
}
define void @s_shuffle_v3i64_v4i64__7_7_5() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__7_7_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_7_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_7_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_7_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 7, i32 5>
@@ -8537,1226 +8655,735 @@ define void @s_shuffle_v3i64_v4i64__7_7_5() {
}
define void @s_shuffle_v3i64_v4i64__7_7_6() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__7_7_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 7, i32 6>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__7_7_7() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__7_7_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 7, i32 7>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__u_0_0() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__u_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 poison, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__0_0_0() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> zeroinitializer
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__1_0_0() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__1_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 1, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__2_0_0() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__2_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 2, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__3_0_0() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__3_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 3, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__4_0_0() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__4_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 4, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__5_0_0() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__5_0_0:
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_7_6:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s6
-; GFX900-NEXT: s_mov_b32 s9, s7
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__5_0_0:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_7_6:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s6
-; GFX90A-NEXT: s_mov_b32 s9, s7
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__5_0_0:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_7_6:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:19]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 5, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__6_0_0() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__6_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 6, i32 0, i32 0>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 7, i32 6>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__7_0_0() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_0_0:
+define void @s_shuffle_v3i64_v4i64__7_7_7() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_7_7:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
-; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_0_0:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_7_7:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_0_0:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_7_7:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:19]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 0, i32 0>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 7, i32 7>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__7_u_0() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_u_0:
+define void @s_shuffle_v3i64_v4i64__u_0_0() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__u_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_u_0:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__u_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_u_0:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__u_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 poison, i32 0>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 poison, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__7_1_0() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_1_0:
+define void @s_shuffle_v3i64_v4i64__0_0_0() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__0_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s14
-; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_1_0:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__0_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s14
-; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_1_0:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__0_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:19]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 1, i32 0>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> zeroinitializer
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__7_2_0() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_2_0:
+define void @s_shuffle_v3i64_v4i64__1_0_0() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__1_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s16
-; GFX900-NEXT: s_mov_b32 s11, s17
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_2_0:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__1_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s16
-; GFX90A-NEXT: s_mov_b32 s11, s17
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_2_0:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__1_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s16
-; GFX942-NEXT: s_mov_b32 s11, s17
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 2, i32 0>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__7_3_0() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__7_3_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 3, i32 0>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 1, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__7_4_0() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_4_0:
+define void @s_shuffle_v3i64_v4i64__2_0_0() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__2_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
; GFX900-NEXT: s_mov_b32 s10, s4
; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_4_0:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__2_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
; GFX90A-NEXT: s_mov_b32 s10, s4
; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_4_0:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__2_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:19]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 4, i32 0>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 2, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__7_5_0() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_5_0:
+define void @s_shuffle_v3i64_v4i64__3_0_0() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__3_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s12, s4
-; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_5_0:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__3_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s14
-; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s12, s4
-; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_5_0:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__3_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s12, s0
-; GFX942-NEXT: s_mov_b32 s13, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 5, i32 0>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 3, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__7_6_0() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_6_0:
+define void @s_shuffle_v3i64_v4i64__4_0_0() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__4_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s22
-; GFX900-NEXT: s_mov_b32 s9, s23
-; GFX900-NEXT: s_mov_b32 s10, s20
-; GFX900-NEXT: s_mov_b32 s11, s21
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_6_0:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__4_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s22
-; GFX90A-NEXT: s_mov_b32 s9, s23
-; GFX90A-NEXT: s_mov_b32 s10, s20
-; GFX90A-NEXT: s_mov_b32 s11, s21
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_6_0:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__4_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 6, i32 0>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__u_1_1() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__u_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 poison, i32 1, i32 1>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__0_1_1() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__0_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 0, i32 1, i32 1>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__1_1_1() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 1, i32 1, i32 1>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__2_1_1() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__2_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 2, i32 1, i32 1>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__3_1_1() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__3_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 3, i32 1, i32 1>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__4_1_1() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__4_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 4, i32 1, i32 1>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 4, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__5_1_1() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__5_1_1:
+define void @s_shuffle_v3i64_v4i64__5_0_0() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__5_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__5_1_1:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__5_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s14
-; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__5_1_1:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__5_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 5, i32 1, i32 1>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 5, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__6_1_1() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__6_1_1:
+define void @s_shuffle_v3i64_v4i64__6_0_0() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__6_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s14
-; GFX900-NEXT: s_mov_b32 s11, s15
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__6_1_1:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__6_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s14
-; GFX90A-NEXT: s_mov_b32 s11, s15
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__6_1_1:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__6_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s2
-; GFX942-NEXT: s_mov_b32 s11, s3
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 6, i32 1, i32 1>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 6, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__7_1_1() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_1_1:
+define void @s_shuffle_v3i64_v4i64__7_0_0() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s18
-; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_1_1:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s18
-; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_1_1:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 1, i32 1>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__7_u_1() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_u_1:
+define void @s_shuffle_v3i64_v4i64__7_u_0() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_u_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s12, s6
-; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_u_1:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_u_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s14
-; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s12, s6
-; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_u_1:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_u_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 poison, i32 1>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 poison, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__7_0_1() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_0_1:
+define void @s_shuffle_v3i64_v4i64__7_1_0() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_1_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s10, s4
-; GFX900-NEXT: s_mov_b32 s11, s5
-; GFX900-NEXT: s_mov_b32 s12, s6
-; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_0_1:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_1_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s14
-; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s10, s4
-; GFX90A-NEXT: s_mov_b32 s11, s5
-; GFX90A-NEXT: s_mov_b32 s12, s6
-; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_0_1:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_1_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 0, i32 1>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 1, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__7_2_1() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_2_1:
+define void @s_shuffle_v3i64_v4i64__7_2_0() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_2_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
; GFX900-NEXT: s_mov_b32 s10, s16
; GFX900-NEXT: s_mov_b32 s11, s17
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_2_1:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_2_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
; GFX90A-NEXT: s_mov_b32 s10, s16
; GFX90A-NEXT: s_mov_b32 s11, s17
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_2_1:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_2_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[16:17]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 2, i32 1>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__7_3_1() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__7_3_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 3, i32 1>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 2, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__7_4_1() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_4_1:
+define void @s_shuffle_v3i64_v4i64__7_3_0() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_3_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
@@ -9767,16 +9394,14 @@ define void @s_shuffle_v3i64_v4i64__7_4_1() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s18
; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s12, s6
-; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_4_1:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_3_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
@@ -9787,104 +9412,96 @@ define void @s_shuffle_v3i64_v4i64__7_4_1() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s18
; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s6
-; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_4_1:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_3_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 4, i32 1>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 3, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__7_5_1() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_5_1:
+define void @s_shuffle_v3i64_v4i64__7_4_0() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_4_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s12, s6
-; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_5_1:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_4_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s14
-; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s12, s6
-; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_5_1:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_4_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 5, i32 1>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 4, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__7_6_1() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_6_1:
+define void @s_shuffle_v3i64_v4i64__7_5_0() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_5_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
@@ -9895,16 +9512,14 @@ define void @s_shuffle_v3i64_v4i64__7_6_1() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s14
; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s12, s6
-; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_6_1:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_5_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
@@ -9915,16 +9530,14 @@ define void @s_shuffle_v3i64_v4i64__7_6_1() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s14
; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s6
-; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_6_1:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_5_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
@@ -9933,323 +9546,2167 @@ define void @s_shuffle_v3i64_v4i64__7_6_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 6, i32 1>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__u_2_2() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__u_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 poison, i32 2, i32 2>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 5, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__0_2_2() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__0_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v3i64_v4i64__7_6_0() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_6_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s22
+; GFX900-NEXT: s_mov_b32 s9, s23
+; GFX900-NEXT: s_mov_b32 s10, s20
+; GFX900-NEXT: s_mov_b32 s11, s21
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_6_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s22
+; GFX90A-NEXT: s_mov_b32 s9, s23
+; GFX90A-NEXT: s_mov_b32 s10, s20
+; GFX90A-NEXT: s_mov_b32 s11, s21
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_6_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 0, i32 2, i32 2>
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 6, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__1_2_2() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__1_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v3i64_v4i64__u_1_1() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__u_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__u_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__u_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 1, i32 2, i32 2>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 poison, i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__2_2_2() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__2_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v3i64_v4i64__0_1_1() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__0_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__0_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__0_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 2, i32 2, i32 2>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 0, i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__3_2_2() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__3_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v3i64_v4i64__1_1_1() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 3, i32 2, i32 2>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 1, i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__4_2_2() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__4_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v3i64_v4i64__2_1_1() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__2_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__2_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__2_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 4, i32 2, i32 2>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 2, i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__5_2_2() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__5_2_2:
+define void @s_shuffle_v3i64_v4i64__3_1_1() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__3_1_1:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s6
-; GFX900-NEXT: s_mov_b32 s9, s7
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__5_2_2:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__3_1_1:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__3_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 3, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__4_1_1() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__4_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__4_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__4_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 4, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__5_1_1() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__5_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__5_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__5_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 5, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__6_1_1() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__6_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__6_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__6_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[2:3]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 6, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__7_1_1() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__7_u_1() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_u_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_u_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_u_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 poison, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__7_0_1() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_0_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_0_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_0_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 0, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__7_2_1() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_2_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s16
+; GFX900-NEXT: s_mov_b32 s11, s17
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_2_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s16
+; GFX90A-NEXT: s_mov_b32 s11, s17
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_2_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 2, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__7_3_1() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_3_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_3_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_3_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 3, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__7_4_1() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_4_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_4_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_4_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 4, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__7_5_1() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_5_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_5_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_5_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 5, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__7_6_1() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_6_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_6_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_6_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 6, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__u_2_2() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__u_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__u_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__u_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 poison, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__0_2_2() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__0_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__0_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__0_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 0, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__1_2_2() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__1_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__1_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__1_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 1, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__2_2_2() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 2, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__3_2_2() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__3_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__3_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__3_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 3, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__4_2_2() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__4_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__4_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__4_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 4, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__5_2_2() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__5_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__5_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__5_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 5, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__6_2_2() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__6_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__6_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__6_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 6, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__7_2_2() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__7_u_2() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_u_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_u_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_u_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 poison, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__7_0_2() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_0_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s16
+; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_0_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s16
+; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_0_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 0, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__7_1_2() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_1_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s22
+; GFX900-NEXT: s_mov_b32 s9, s23
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_1_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s22
+; GFX90A-NEXT: s_mov_b32 s9, s23
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_1_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 1, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__7_3_2() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_3_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_3_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_3_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 3, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__7_4_2() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_4_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_4_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_4_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 4, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__7_5_2() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_5_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s16
+; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_5_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s16
+; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_5_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 5, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__7_6_2() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_6_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s22
+; GFX900-NEXT: s_mov_b32 s9, s23
+; GFX900-NEXT: s_mov_b32 s10, s20
+; GFX900-NEXT: s_mov_b32 s11, s21
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_6_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s22
+; GFX90A-NEXT: s_mov_b32 s9, s23
+; GFX90A-NEXT: s_mov_b32 s10, s20
+; GFX90A-NEXT: s_mov_b32 s11, s21
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_6_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 6, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__u_3_3() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__u_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__u_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__u_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 poison, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__0_3_3() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__0_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__0_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__0_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 0, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__1_3_3() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__1_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__1_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__1_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 1, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__2_3_3() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__2_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__2_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__2_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 2, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__3_3_3() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s6
-; GFX90A-NEXT: s_mov_b32 s9, s7
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__5_2_2:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__3_3_3:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 5, i32 2, i32 2>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 3, i32 3, i32 3>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__6_2_2() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__6_2_2:
+define void @s_shuffle_v3i64_v4i64__4_3_3() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__4_3_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__6_2_2:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__4_3_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__6_2_2:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__4_3_3:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 6, i32 2, i32 2>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 4, i32 3, i32 3>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__7_2_2() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_2_2:
+define void @s_shuffle_v3i64_v4i64__5_3_3() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__5_3_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_2_2:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__5_3_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_2_2:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__5_3_3:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 2, i32 2>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 5, i32 3, i32 3>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__7_u_2() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_u_2:
+define void @s_shuffle_v3i64_v4i64__6_3_3() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__6_3_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
@@ -10258,14 +11715,16 @@ define void @s_shuffle_v3i64_v4i64__7_u_2() {
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_u_2:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__6_3_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
@@ -10274,136 +11733,134 @@ define void @s_shuffle_v3i64_v4i64__7_u_2() {
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_u_2:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__6_3_3:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 poison, i32 2>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 6, i32 3, i32 3>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__7_0_2() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_0_2:
+define void @s_shuffle_v3i64_v4i64__7_3_3() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_3_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s12, s16
-; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_0_2:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_3_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s16
-; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_0_2:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_3_3:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 0, i32 2>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 3, i32 3>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__7_1_2() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_1_2:
+define void @s_shuffle_v3i64_v4i64__7_u_3() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_u_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s22
-; GFX900-NEXT: s_mov_b32 s9, s23
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_1_2:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_u_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s22
-; GFX90A-NEXT: s_mov_b32 s9, s23
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_1_2:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_u_3:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
@@ -10412,57 +11869,61 @@ define void @s_shuffle_v3i64_v4i64__7_1_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 1, i32 2>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 poison, i32 3>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__7_3_2() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_3_2:
+define void @s_shuffle_v3i64_v4i64__7_0_3() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_0_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s14
-; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s18
+; GFX900-NEXT: s_mov_b32 s13, s19
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_3_2:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_0_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s14
-; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s18
+; GFX90A-NEXT: s_mov_b32 s13, s19
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_3_2:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_0_3:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
@@ -10471,59 +11932,58 @@ define void @s_shuffle_v3i64_v4i64__7_3_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 3, i32 2>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 0, i32 3>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__7_4_2() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_4_2:
+define void @s_shuffle_v3i64_v4i64__7_1_3() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_1_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[16:23]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s4
-; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s8, s22
+; GFX900-NEXT: s_mov_b32 s9, s23
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_4_2:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_1_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[16:23]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s4
-; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s8, s22
+; GFX90A-NEXT: s_mov_b32 s9, s23
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_4_2:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_1_3:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
@@ -10532,59 +11992,61 @@ define void @s_shuffle_v3i64_v4i64__7_4_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 4, i32 2>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 1, i32 3>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__7_5_2() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_5_2:
+define void @s_shuffle_v3i64_v4i64__7_2_3() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_2_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s12, s16
-; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_5_2:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_2_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s14
-; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s12, s16
-; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_5_2:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_2_3:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
@@ -10593,275 +12055,157 @@ define void @s_shuffle_v3i64_v4i64__7_5_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 5, i32 2>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 2, i32 3>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__7_6_2() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_6_2:
+define void @s_shuffle_v3i64_v4i64__7_4_3() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_4_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s22
-; GFX900-NEXT: s_mov_b32 s9, s23
-; GFX900-NEXT: s_mov_b32 s10, s20
-; GFX900-NEXT: s_mov_b32 s11, s21
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_6_2:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_4_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s22
-; GFX90A-NEXT: s_mov_b32 s9, s23
-; GFX90A-NEXT: s_mov_b32 s10, s20
-; GFX90A-NEXT: s_mov_b32 s11, s21
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_6_2:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_4_3:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 6, i32 2>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__u_3_3() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__u_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 poison, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__0_3_3() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__0_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 0, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__1_3_3() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__1_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s6
-; GFX9-NEXT: s_mov_b32 s9, s7
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 1, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__2_3_3() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__2_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 2, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__3_3_3() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__3_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 3, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__4_3_3() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__4_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 4, i32 3, i32 3>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 4, i32 3>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__5_3_3() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__5_3_3:
+define void @s_shuffle_v3i64_v4i64__7_5_3() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_5_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s14
; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s12, s18
+; GFX900-NEXT: s_mov_b32 s13, s19
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__5_3_3:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_5_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s14
; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s12, s18
+; GFX90A-NEXT: s_mov_b32 s13, s19
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__5_3_3:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_5_3:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s10
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s13, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 5, i32 3, i32 3>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 5, i32 3>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__6_3_3() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__6_3_3:
+define void @s_shuffle_v3i64_v4i64__7_6_3() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_6_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[16:23]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s14
-; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s8, s22
+; GFX900-NEXT: s_mov_b32 s9, s23
+; GFX900-NEXT: s_mov_b32 s10, s20
+; GFX900-NEXT: s_mov_b32 s11, s21
; GFX900-NEXT: s_mov_b32 s12, s14
; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
@@ -10869,17 +12213,19 @@ define void @s_shuffle_v3i64_v4i64__6_3_3() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__6_3_3:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_6_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[16:23]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s14
-; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s8, s22
+; GFX90A-NEXT: s_mov_b32 s9, s23
+; GFX90A-NEXT: s_mov_b32 s10, s20
+; GFX90A-NEXT: s_mov_b32 s11, s21
; GFX90A-NEXT: s_mov_b32 s12, s14
; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
@@ -10887,1084 +12233,785 @@ define void @s_shuffle_v3i64_v4i64__6_3_3() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__6_3_3:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_6_3:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s14
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 6, i32 3, i32 3>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 6, i32 3>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__7_3_3() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_3_3:
+define void @s_shuffle_v3i64_v4i64__u_4_4() {
+; GFX9-LABEL: s_shuffle_v3i64_v4i64__u_4_4:
+; GFX9: ; %bb.0:
+; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX9-NEXT: ;;#ASMSTART
+; GFX9-NEXT: ; use s[8:13]
+; GFX9-NEXT: ;;#ASMEND
+; GFX9-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 poison, i32 4, i32 4>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__0_4_4() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__0_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s18
-; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_3_3:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__0_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s18
-; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_3_3:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__0_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s13, s11
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 3, i32 3>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 0, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__7_u_3() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_u_3:
+define void @s_shuffle_v3i64_v4i64__1_4_4() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__1_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s18
-; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_u_3:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__1_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s18
-; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_u_3:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__1_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 poison, i32 3>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 1, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__7_0_3() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_0_3:
+define void @s_shuffle_v3i64_v4i64__2_4_4() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__2_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s12, s18
-; GFX900-NEXT: s_mov_b32 s13, s19
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_0_3:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__2_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s18
-; GFX90A-NEXT: s_mov_b32 s13, s19
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_0_3:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__2_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 0, i32 3>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 2, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__7_1_3() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_1_3:
+define void @s_shuffle_v3i64_v4i64__3_4_4() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__3_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s22
-; GFX900-NEXT: s_mov_b32 s9, s23
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_1_3:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__3_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s22
-; GFX90A-NEXT: s_mov_b32 s9, s23
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_1_3:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__3_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 1, i32 3>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 3, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__7_2_3() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_2_3:
+define void @s_shuffle_v3i64_v4i64__4_4_4() {
+; GFX9-LABEL: s_shuffle_v3i64_v4i64__4_4_4:
+; GFX9: ; %bb.0:
+; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX9-NEXT: ;;#ASMSTART
+; GFX9-NEXT: ; use s[8:13]
+; GFX9-NEXT: ;;#ASMEND
+; GFX9-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 4, i32 4, i32 4>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__5_4_4() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__5_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
; GFX900-NEXT: s_mov_b32 s10, s12
; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_2_3:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__5_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
; GFX90A-NEXT: s_mov_b32 s10, s12
; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_2_3:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__5_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 2, i32 3>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 5, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__7_4_3() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_4_3:
+define void @s_shuffle_v3i64_v4i64__6_4_4() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__6_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
; GFX900-NEXT: s_mov_b32 s10, s4
; GFX900-NEXT: s_mov_b32 s11, s5
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_4_3:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__6_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
; GFX90A-NEXT: s_mov_b32 s10, s4
; GFX90A-NEXT: s_mov_b32 s11, s5
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_4_3:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__6_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:19]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 4, i32 3>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 6, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__7_5_3() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_5_3:
+define void @s_shuffle_v3i64_v4i64__7_4_4() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s12, s18
-; GFX900-NEXT: s_mov_b32 s13, s19
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_5_3:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s14
-; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s12, s18
-; GFX90A-NEXT: s_mov_b32 s13, s19
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_5_3:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 5, i32 3>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__7_6_3() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_6_3:
+define void @s_shuffle_v3i64_v4i64__7_u_4() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_u_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s22
-; GFX900-NEXT: s_mov_b32 s9, s23
-; GFX900-NEXT: s_mov_b32 s10, s20
-; GFX900-NEXT: s_mov_b32 s11, s21
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_6_3:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_u_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s22
-; GFX90A-NEXT: s_mov_b32 s9, s23
-; GFX90A-NEXT: s_mov_b32 s10, s20
-; GFX90A-NEXT: s_mov_b32 s11, s21
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_6_3:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_u_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 6, i32 3>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__u_4_4() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__u_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 poison, i32 4, i32 4>
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 poison, i32 4>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__0_4_4() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__0_4_4:
+define void @s_shuffle_v3i64_v4i64__7_0_4() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_0_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__0_4_4:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_0_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__0_4_4:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_0_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 0, i32 4, i32 4>
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 0, i32 4>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__1_4_4() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__1_4_4:
+define void @s_shuffle_v3i64_v4i64__7_1_4() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_1_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s6
-; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__1_4_4:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_1_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s6
-; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__1_4_4:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_1_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 1, i32 4, i32 4>
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 1, i32 4>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__2_4_4() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__2_4_4:
+define void @s_shuffle_v3i64_v4i64__7_2_4() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_2_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s20
+; GFX900-NEXT: s_mov_b32 s11, s21
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__2_4_4:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_2_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s20
+; GFX90A-NEXT: s_mov_b32 s11, s21
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__2_4_4:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_2_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 2, i32 4, i32 4>
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 2, i32 4>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__3_4_4() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__3_4_4:
+define void @s_shuffle_v3i64_v4i64__7_3_4() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_3_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__3_4_4:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_3_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__3_4_4:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_3_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 3, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__4_4_4() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__4_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <3 x i32> <i32 4, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__5_4_4() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__5_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 5, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__6_4_4() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__6_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 6, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__7_4_4() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__7_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__7_u_4() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__7_u_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 poison, i32 4>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 3, i32 4>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__7_0_4() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_0_4:
+define void @s_shuffle_v3i64_v4i64__7_5_4() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_5_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s18
; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s10, s4
-; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_0_4:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_5_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s18
; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s10, s4
-; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_0_4:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_5_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 0, i32 4>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 5, i32 4>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__7_1_4() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_1_4:
+define void @s_shuffle_v3i64_v4i64__7_6_4() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_6_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s18
; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s16
+; GFX900-NEXT: s_mov_b32 s11, s17
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_1_4:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_6_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s18
; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s16
+; GFX90A-NEXT: s_mov_b32 s11, s17
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_1_4:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_6_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[16:17]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 1, i32 4>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 6, i32 4>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__7_2_4() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_2_4:
+define void @s_shuffle_v3i64_v4i64__u_5_5() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__u_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s18
-; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s10, s20
-; GFX900-NEXT: s_mov_b32 s11, s21
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_2_4:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__u_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s18
-; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s10, s20
-; GFX90A-NEXT: s_mov_b32 s11, s21
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_2_4:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__u_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 2, i32 4>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__7_3_4() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__7_3_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 3, i32 4>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__7_5_4() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__7_5_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 5, i32 4>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__7_6_4() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__7_6_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s10, s16
-; GFX9-NEXT: s_mov_b32 s11, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 6, i32 4>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__u_5_5() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__u_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 poison, i32 5, i32 5>
@@ -12018,10 +13065,8 @@ define void @s_shuffle_v3i64_v4i64__0_5_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s2
-; GFX942-NEXT: s_mov_b32 s11, s3
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -12079,10 +13124,8 @@ define void @s_shuffle_v3i64_v4i64__1_5_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -12141,10 +13184,8 @@ define void @s_shuffle_v3i64_v4i64__2_5_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s2
-; GFX942-NEXT: s_mov_b32 s11, s3
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -12202,10 +13243,8 @@ define void @s_shuffle_v3i64_v4i64__3_5_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -12218,18 +13257,43 @@ define void @s_shuffle_v3i64_v4i64__3_5_5() {
}
define void @s_shuffle_v3i64_v4i64__4_5_5() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__4_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__4_5_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__4_5_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__4_5_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 4, i32 5, i32 5>
@@ -12238,20 +13302,48 @@ define void @s_shuffle_v3i64_v4i64__4_5_5() {
}
define void @s_shuffle_v3i64_v4i64__5_5_5() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__5_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__5_5_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__5_5_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__5_5_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 5, i32 5, i32 5>
@@ -12260,20 +13352,48 @@ define void @s_shuffle_v3i64_v4i64__5_5_5() {
}
define void @s_shuffle_v3i64_v4i64__6_5_5() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__6_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__6_5_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__6_5_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__6_5_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 6, i32 5, i32 5>
@@ -12282,20 +13402,48 @@ define void @s_shuffle_v3i64_v4i64__6_5_5() {
}
define void @s_shuffle_v3i64_v4i64__7_5_5() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__7_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_5_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_5_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_5_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 5, i32 5>
@@ -12340,10 +13488,8 @@ define void @s_shuffle_v3i64_v4i64__7_u_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -12406,12 +13552,9 @@ define void @s_shuffle_v3i64_v4i64__7_0_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -12469,10 +13612,8 @@ define void @s_shuffle_v3i64_v4i64__7_1_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -12534,12 +13675,9 @@ define void @s_shuffle_v3i64_v4i64__7_2_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -12598,10 +13736,8 @@ define void @s_shuffle_v3i64_v4i64__7_3_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -12654,12 +13790,9 @@ define void @s_shuffle_v3i64_v4i64__7_4_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -12712,12 +13845,9 @@ define void @s_shuffle_v3i64_v4i64__7_6_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -12730,18 +13860,43 @@ define void @s_shuffle_v3i64_v4i64__7_6_5() {
}
define void @s_shuffle_v3i64_v4i64__u_6_6() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__u_6_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__u_6_6:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__u_6_6:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__u_6_6:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 poison, i32 6, i32 6>
@@ -12795,10 +13950,8 @@ define void @s_shuffle_v3i64_v4i64__0_6_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -12856,10 +14009,8 @@ define void @s_shuffle_v3i64_v4i64__1_6_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -12871,80 +14022,279 @@ define void @s_shuffle_v3i64_v4i64__1_6_6() {
ret void
}
-define void @s_shuffle_v3i64_v4i64__2_6_6() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__2_6_6:
+define void @s_shuffle_v3i64_v4i64__2_6_6() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__2_6_6:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s16
+; GFX900-NEXT: s_mov_b32 s11, s17
+; GFX900-NEXT: s_mov_b32 s12, s16
+; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__2_6_6:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s16
+; GFX90A-NEXT: s_mov_b32 s11, s17
+; GFX90A-NEXT: s_mov_b32 s12, s16
+; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__2_6_6:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 2, i32 6, i32 6>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__3_6_6() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__3_6_6:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__3_6_6:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__3_6_6:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 3, i32 6, i32 6>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__4_6_6() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__4_6_6:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__4_6_6:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__4_6_6:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 4, i32 6, i32 6>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__5_6_6() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__5_6_6:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__5_6_6:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__5_6_6:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 5, i32 6, i32 6>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__6_6_6() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__6_6_6:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s16
-; GFX900-NEXT: s_mov_b32 s11, s17
-; GFX900-NEXT: s_mov_b32 s12, s16
-; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__2_6_6:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__6_6_6:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s16
-; GFX90A-NEXT: s_mov_b32 s11, s17
-; GFX90A-NEXT: s_mov_b32 s12, s16
-; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__2_6_6:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__6_6_6:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 2, i32 6, i32 6>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 6, i32 6, i32 6>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__3_6_6() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__3_6_6:
+define void @s_shuffle_v3i64_v4i64__7_6_6() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_6_6:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s18
-; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
; GFX900-NEXT: s_mov_b32 s10, s12
; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: ;;#ASMSTART
@@ -12952,17 +14302,14 @@ define void @s_shuffle_v3i64_v4i64__3_6_6() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__3_6_6:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_6_6:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s18
-; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
; GFX90A-NEXT: s_mov_b32 s10, s12
; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: ;;#ASMSTART
@@ -12970,109 +14317,18 @@ define void @s_shuffle_v3i64_v4i64__3_6_6() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__3_6_6:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_6_6:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 3, i32 6, i32 6>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__4_6_6() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__4_6_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 4, i32 6, i32 6>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__5_6_6() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__5_6_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 5, i32 6, i32 6>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__6_6_6() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__6_6_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 6, i32 6, i32 6>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__7_6_6() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__7_6_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 6, i32 6>
@@ -13081,18 +14337,43 @@ define void @s_shuffle_v3i64_v4i64__7_6_6() {
}
define void @s_shuffle_v3i64_v4i64__7_u_6() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__7_u_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_u_6:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_u_6:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_u_6:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 poison, i32 6>
@@ -13146,10 +14427,8 @@ define void @s_shuffle_v3i64_v4i64__7_0_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -13207,10 +14486,8 @@ define void @s_shuffle_v3i64_v4i64__7_1_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -13268,10 +14545,8 @@ define void @s_shuffle_v3i64_v4i64__7_2_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -13302,140 +14577,185 @@ define void @s_shuffle_v3i64_v4i64__7_3_6() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_3_6:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_3_6:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s12, s16
+; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_3_6:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 3, i32 6>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__7_4_6() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_4_6:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s16
+; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_4_6:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s16
+; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_4_6:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 4, i32 6>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3i64_v4i64__7_5_6() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_5_6:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_5_6:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s18
-; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s12, s16
-; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_3_6:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_5_6:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 3, i32 6>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 5, i32 6>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
ret void
}
-define void @s_shuffle_v3i64_v4i64__7_4_6() {
-; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_4_6:
+define void @s_shuffle_v3i64_v4i64__u_7_7() {
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__u_7_7:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s18
-; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s12, s16
-; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_4_6:
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__u_7_7:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s18
-; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s16
-; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_4_6:
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__u_7_7:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 4, i32 6>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__7_5_6() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__7_5_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 5, i32 6>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3i64_v4i64__u_7_7() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__u_7_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 poison, i32 7, i32 7>
@@ -13489,10 +14809,8 @@ define void @s_shuffle_v3i64_v4i64__0_7_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s6
-; GFX942-NEXT: s_mov_b32 s11, s7
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -13551,10 +14869,8 @@ define void @s_shuffle_v3i64_v4i64__1_7_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -13613,10 +14929,8 @@ define void @s_shuffle_v3i64_v4i64__2_7_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s6
-; GFX942-NEXT: s_mov_b32 s11, s7
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -13675,10 +14989,8 @@ define void @s_shuffle_v3i64_v4i64__3_7_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -13691,20 +15003,48 @@ define void @s_shuffle_v3i64_v4i64__3_7_7() {
}
define void @s_shuffle_v3i64_v4i64__4_7_7() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__4_7_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__4_7_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__4_7_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__4_7_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 4, i32 7, i32 7>
@@ -13713,20 +15053,48 @@ define void @s_shuffle_v3i64_v4i64__4_7_7() {
}
define void @s_shuffle_v3i64_v4i64__5_7_7() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__5_7_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s6
-; GFX9-NEXT: s_mov_b32 s9, s7
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__5_7_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__5_7_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__5_7_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 5, i32 7, i32 7>
@@ -13735,18 +15103,43 @@ define void @s_shuffle_v3i64_v4i64__5_7_7() {
}
define void @s_shuffle_v3i64_v4i64__6_7_7() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__6_7_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__6_7_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__6_7_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__6_7_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 6, i32 7, i32 7>
@@ -13791,10 +15184,8 @@ define void @s_shuffle_v3i64_v4i64__7_u_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -13856,12 +15247,9 @@ define void @s_shuffle_v3i64_v4i64__7_0_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -13919,10 +15307,8 @@ define void @s_shuffle_v3i64_v4i64__7_1_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -13984,12 +15370,9 @@ define void @s_shuffle_v3i64_v4i64__7_2_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -14048,10 +15431,8 @@ define void @s_shuffle_v3i64_v4i64__7_3_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -14104,12 +15485,9 @@ define void @s_shuffle_v3i64_v4i64__7_4_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -14122,20 +15500,48 @@ define void @s_shuffle_v3i64_v4i64__7_4_7() {
}
define void @s_shuffle_v3i64_v4i64__7_5_7() {
-; GFX9-LABEL: s_shuffle_v3i64_v4i64__7_5_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3i64_v4i64__7_5_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3i64_v4i64__7_5_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3i64_v4i64__7_5_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <3 x i32> <i32 7, i32 5, i32 7>
@@ -14184,12 +15590,9 @@ define void @s_shuffle_v3i64_v4i64__7_6_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
diff --git a/llvm/test/CodeGen/AMDGPU/shufflevector.v3p0.v2p0.ll b/llvm/test/CodeGen/AMDGPU/shufflevector.v3p0.v2p0.ll
index 51ac07a2624dc..d599a46266b81 100644
--- a/llvm/test/CodeGen/AMDGPU/shufflevector.v3p0.v2p0.ll
+++ b/llvm/test/CodeGen/AMDGPU/shufflevector.v3p0.v2p0.ll
@@ -2124,8 +2124,7 @@ define void @s_shuffle_v3p0_v2p0__1_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -2183,8 +2182,7 @@ define void @s_shuffle_v3p0_v2p0__3_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -2242,10 +2240,8 @@ define void @s_shuffle_v3p0_v2p0__3_0_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -2299,8 +2295,7 @@ define void @s_shuffle_v3p0_v2p0__3_1_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -2349,10 +2344,8 @@ define void @s_shuffle_v3p0_v2p0__3_2_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -2365,18 +2358,43 @@ define void @s_shuffle_v3p0_v2p0__3_2_u() {
}
define void @s_shuffle_v3p0_v2p0__3_3_u() {
-; GFX9-LABEL: s_shuffle_v3p0_v2p0__3_3_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_3_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_3_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v2p0__3_3_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%vec1 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 3, i32 poison>
@@ -2385,21 +2403,52 @@ define void @s_shuffle_v3p0_v2p0__3_3_u() {
}
define void @s_shuffle_v3p0_v2p0__3_3_0() {
-; GFX9-LABEL: s_shuffle_v3p0_v2p0__3_3_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_3_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_3_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v2p0__3_3_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%vec1 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 3, i32 0>
@@ -2453,10 +2502,8 @@ define void @s_shuffle_v3p0_v2p0__3_3_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -2469,20 +2516,48 @@ define void @s_shuffle_v3p0_v2p0__3_3_1() {
}
define void @s_shuffle_v3p0_v2p0__3_3_2() {
-; GFX9-LABEL: s_shuffle_v3p0_v2p0__3_3_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_3_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_3_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v2p0__3_3_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%vec1 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 3, i32 2>
@@ -2491,20 +2566,48 @@ define void @s_shuffle_v3p0_v2p0__3_3_2() {
}
define void @s_shuffle_v3p0_v2p0__3_3_3() {
-; GFX9-LABEL: s_shuffle_v3p0_v2p0__3_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v2p0__3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%vec1 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 3, i32 3>
@@ -2513,18 +2616,43 @@ define void @s_shuffle_v3p0_v2p0__3_3_3() {
}
define void @s_shuffle_v3p0_v2p0__u_0_0() {
-; GFX9-LABEL: s_shuffle_v3p0_v2p0__u_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v2p0__u_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v2p0__u_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v2p0__u_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 poison, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
@@ -2532,20 +2660,48 @@ define void @s_shuffle_v3p0_v2p0__u_0_0() {
}
define void @s_shuffle_v3p0_v2p0__0_0_0() {
-; GFX9-LABEL: s_shuffle_v3p0_v2p0__0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v2p0__0_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v2p0__0_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v2p0__0_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> zeroinitializer
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
@@ -2553,20 +2709,48 @@ define void @s_shuffle_v3p0_v2p0__0_0_0() {
}
define void @s_shuffle_v3p0_v2p0__1_0_0() {
-; GFX9-LABEL: s_shuffle_v3p0_v2p0__1_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v2p0__1_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v2p0__1_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v2p0__1_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 1, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
@@ -2574,18 +2758,43 @@ define void @s_shuffle_v3p0_v2p0__1_0_0() {
}
define void @s_shuffle_v3p0_v2p0__2_0_0() {
-; GFX9-LABEL: s_shuffle_v3p0_v2p0__2_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v2p0__2_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v2p0__2_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v2p0__2_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 2, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
@@ -2638,10 +2847,8 @@ define void @s_shuffle_v3p0_v2p0__3_0_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -2695,8 +2902,7 @@ define void @s_shuffle_v3p0_v2p0__3_u_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -2754,10 +2960,8 @@ define void @s_shuffle_v3p0_v2p0__3_1_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -2815,10 +3019,8 @@ define void @s_shuffle_v3p0_v2p0__3_2_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -2831,18 +3033,43 @@ define void @s_shuffle_v3p0_v2p0__3_2_0() {
}
define void @s_shuffle_v3p0_v2p0__u_1_1() {
-; GFX9-LABEL: s_shuffle_v3p0_v2p0__u_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v2p0__u_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v2p0__u_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v2p0__u_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 poison, i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
@@ -2850,18 +3077,43 @@ define void @s_shuffle_v3p0_v2p0__u_1_1() {
}
define void @s_shuffle_v3p0_v2p0__0_1_1() {
-; GFX9-LABEL: s_shuffle_v3p0_v2p0__0_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v2p0__0_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v2p0__0_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v2p0__0_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 0, i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
@@ -2869,39 +3121,92 @@ define void @s_shuffle_v3p0_v2p0__0_1_1() {
}
define void @s_shuffle_v3p0_v2p0__1_1_1() {
-; GFX9-LABEL: s_shuffle_v3p0_v2p0__1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v2p0__1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v2p0__1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v2p0__1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 1, i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
-}
-
-define void @s_shuffle_v3p0_v2p0__2_1_1() {
-; GFX9-LABEL: s_shuffle_v3p0_v2p0__2_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+}
+
+define void @s_shuffle_v3p0_v2p0__2_1_1() {
+; GFX900-LABEL: s_shuffle_v3p0_v2p0__2_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v2p0__2_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v2p0__2_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 2, i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
@@ -2954,10 +3259,8 @@ define void @s_shuffle_v3p0_v2p0__3_1_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -3015,10 +3318,8 @@ define void @s_shuffle_v3p0_v2p0__3_u_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -3080,12 +3381,9 @@ define void @s_shuffle_v3p0_v2p0__3_0_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -3147,12 +3445,9 @@ define void @s_shuffle_v3p0_v2p0__3_2_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -3251,8 +3546,7 @@ define void @s_shuffle_v3p0_v2p0__1_2_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -3278,20 +3572,48 @@ define void @s_shuffle_v3p0_v2p0__2_2_2() {
}
define void @s_shuffle_v3p0_v2p0__3_2_2() {
-; GFX9-LABEL: s_shuffle_v3p0_v2p0__3_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v2p0__3_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%vec1 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 2, i32 2>
@@ -3300,18 +3622,43 @@ define void @s_shuffle_v3p0_v2p0__3_2_2() {
}
define void @s_shuffle_v3p0_v2p0__3_u_2() {
-; GFX9-LABEL: s_shuffle_v3p0_v2p0__3_u_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_u_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_u_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v2p0__3_u_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%vec1 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 poison, i32 2>
@@ -3365,10 +3712,8 @@ define void @s_shuffle_v3p0_v2p0__3_0_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -3381,21 +3726,52 @@ define void @s_shuffle_v3p0_v2p0__3_0_2() {
}
define void @s_shuffle_v3p0_v2p0__3_1_2() {
-; GFX9-LABEL: s_shuffle_v3p0_v2p0__3_1_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_1_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_1_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v2p0__3_1_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%vec1 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 1, i32 2>
@@ -3404,18 +3780,43 @@ define void @s_shuffle_v3p0_v2p0__3_1_2() {
}
define void @s_shuffle_v3p0_v2p0__u_3_3() {
-; GFX9-LABEL: s_shuffle_v3p0_v2p0__u_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v2p0__u_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v2p0__u_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v2p0__u_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%vec1 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 poison, i32 3, i32 3>
@@ -3469,10 +3870,8 @@ define void @s_shuffle_v3p0_v2p0__0_3_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s2
-; GFX942-NEXT: s_mov_b32 s11, s3
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -3530,10 +3929,8 @@ define void @s_shuffle_v3p0_v2p0__1_3_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -3546,18 +3943,43 @@ define void @s_shuffle_v3p0_v2p0__1_3_3() {
}
define void @s_shuffle_v3p0_v2p0__2_3_3() {
-; GFX9-LABEL: s_shuffle_v3p0_v2p0__2_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v2p0__2_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v2p0__2_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v2p0__2_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%vec1 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 2, i32 3, i32 3>
@@ -3602,10 +4024,8 @@ define void @s_shuffle_v3p0_v2p0__3_u_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -3667,12 +4087,9 @@ define void @s_shuffle_v3p0_v2p0__3_0_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -3730,10 +4147,8 @@ define void @s_shuffle_v3p0_v2p0__3_1_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -3786,12 +4201,9 @@ define void @s_shuffle_v3p0_v2p0__3_2_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
diff --git a/llvm/test/CodeGen/AMDGPU/shufflevector.v3p0.v3p0.ll b/llvm/test/CodeGen/AMDGPU/shufflevector.v3p0.v3p0.ll
index 45df4805b3c10..6aeb74d0ae91e 100644
--- a/llvm/test/CodeGen/AMDGPU/shufflevector.v3p0.v3p0.ll
+++ b/llvm/test/CodeGen/AMDGPU/shufflevector.v3p0.v3p0.ll
@@ -4471,8 +4471,7 @@ define void @s_shuffle_v3p0_v3p0__1_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -4570,8 +4569,7 @@ define void @s_shuffle_v3p0_v3p0__4_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -4663,11 +4661,11 @@ define void @s_shuffle_v3p0_v3p0__5_0_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -4769,11 +4767,11 @@ define void @s_shuffle_v3p0_v3p0__5_2_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -4786,18 +4784,43 @@ define void @s_shuffle_v3p0_v3p0__5_2_u() {
}
define void @s_shuffle_v3p0_v3p0__5_3_u() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__5_3_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_3_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_3_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_3_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 3, i32 poison>
@@ -4806,18 +4829,43 @@ define void @s_shuffle_v3p0_v3p0__5_3_u() {
}
define void @s_shuffle_v3p0_v3p0__5_4_u() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__5_4_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_4_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_4_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_4_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 4, i32 poison>
@@ -4826,18 +4874,43 @@ define void @s_shuffle_v3p0_v3p0__5_4_u() {
}
define void @s_shuffle_v3p0_v3p0__5_5_u() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__5_5_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_5_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_5_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_5_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 5, i32 poison>
@@ -4846,21 +4919,52 @@ define void @s_shuffle_v3p0_v3p0__5_5_u() {
}
define void @s_shuffle_v3p0_v3p0__5_5_0() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__5_5_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_5_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_5_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_5_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 5, i32 0>
@@ -4911,13 +5015,11 @@ define void @s_shuffle_v3p0_v3p0__5_5_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -4972,8 +5074,7 @@ define void @s_shuffle_v3p0_v3p0__5_5_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -4986,20 +5087,48 @@ define void @s_shuffle_v3p0_v3p0__5_5_2() {
}
define void @s_shuffle_v3p0_v3p0__5_5_3() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__5_5_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_5_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_5_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_5_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 5, i32 3>
@@ -5008,162 +5137,112 @@ define void @s_shuffle_v3p0_v3p0__5_5_3() {
}
define void @s_shuffle_v3p0_v3p0__5_5_4() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__5_5_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 5, i32 4>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v3p0__5_5_5() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__5_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v3p0__u_0_0() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__u_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <3 x i32> <i32 poison, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v3p0__0_0_0() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <3 x i32> zeroinitializer
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v3p0__1_0_0() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__1_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <3 x i32> <i32 1, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v3p0__2_0_0() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__2_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_5_4:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_5_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_5_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <3 x i32> <i32 2, i32 0, i32 0>
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 5, i32 4>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v3p0__3_0_0() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__3_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v3p0_v3p0__5_5_5() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_5_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_5_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_5_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <3 x i32> <i32 3, i32 0, i32 0>
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v3p0__4_0_0() {
-; GFX900-LABEL: s_shuffle_v3p0_v3p0__4_0_0:
+define void @s_shuffle_v3p0_v3p0__u_0_0() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__u_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:9]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:17]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s6
-; GFX900-NEXT: s_mov_b32 s9, s7
; GFX900-NEXT: s_mov_b32 s10, s12
; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: ;;#ASMSTART
@@ -5171,17 +5250,12 @@ define void @s_shuffle_v3p0_v3p0__4_0_0() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v3p0__4_0_0:
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__u_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:9]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:17]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s6
-; GFX90A-NEXT: s_mov_b32 s9, s7
; GFX90A-NEXT: s_mov_b32 s10, s12
; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: ;;#ASMSTART
@@ -5189,766 +5263,1452 @@ define void @s_shuffle_v3p0_v3p0__4_0_0() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v3p0__4_0_0:
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__u_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:17]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 4, i32 0, i32 0>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <3 x i32> <i32 poison, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v3p0__5_0_0() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__5_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v3p0_v3p0__0_0_0() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__0_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__0_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__0_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 0, i32 0>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <3 x i32> zeroinitializer
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v3p0__5_u_0() {
-; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_u_0:
+define void @s_shuffle_v3p0_v3p0__1_0_0() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__1_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:17]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:9]
-; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_u_0:
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__1_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:17]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:9]
-; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_u_0:
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__1_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:17]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:9]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 poison, i32 0>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v3p0__5_1_0() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__5_1_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 1, i32 0>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <3 x i32> <i32 1, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v3p0__5_2_0() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__5_2_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s16
-; GFX9-NEXT: s_mov_b32 s11, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v3p0_v3p0__2_0_0() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__2_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__2_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__2_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 2, i32 0>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <3 x i32> <i32 2, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v3p0__5_3_0() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__5_3_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v3p0_v3p0__3_0_0() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__3_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__3_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__3_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <3 x i32> <i32 3, i32 0, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v3p0__4_0_0() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__4_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__4_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__4_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 3, i32 0>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 4, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v3p0__5_4_0() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__5_4_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v3p0_v3p0__5_0_0() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 4, i32 0>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v3p0__u_1_1() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__u_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v3p0_v3p0__5_u_0() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_u_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_u_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_u_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 poison, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v3p0__5_1_0() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_1_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_1_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_1_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 1, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v3p0__5_2_0() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_2_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s16
+; GFX900-NEXT: s_mov_b32 s11, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_2_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s16
+; GFX90A-NEXT: s_mov_b32 s11, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_2_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 2, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v3p0__5_3_0() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_3_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_3_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_3_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 3, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v3p0__5_4_0() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_4_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_4_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_4_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 4, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v3p0__u_1_1() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__u_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__u_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__u_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <3 x i32> <i32 poison, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v3p0__0_1_1() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__0_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__0_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__0_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <3 x i32> <i32 0, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v3p0__1_1_1() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <3 x i32> <i32 1, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v3p0__2_1_1() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__2_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__2_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__2_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <3 x i32> <i32 2, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v3p0__3_1_1() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__3_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__3_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__3_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <3 x i32> <i32 poison, i32 1, i32 1>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <3 x i32> <i32 3, i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v3p0__0_1_1() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__0_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v3p0_v3p0__4_1_1() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__4_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__4_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__4_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <3 x i32> <i32 0, i32 1, i32 1>
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 4, i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v3p0__1_1_1() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v3p0_v3p0__5_1_1() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <3 x i32> <i32 1, i32 1, i32 1>
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v3p0__2_1_1() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__2_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v3p0_v3p0__5_u_1() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_u_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_u_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_u_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <3 x i32> <i32 2, i32 1, i32 1>
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 poison, i32 1>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v3p0__3_1_1() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__3_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v3p0_v3p0__5_0_1() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_0_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_0_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_0_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <3 x i32> <i32 3, i32 1, i32 1>
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 0, i32 1>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v3p0__4_1_1() {
-; GFX900-LABEL: s_shuffle_v3p0_v3p0__4_1_1:
+define void @s_shuffle_v3p0_v3p0__5_2_1() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_2_1:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ; def s[12:17]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s6
-; GFX900-NEXT: s_mov_b32 s9, s7
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s10, s16
+; GFX900-NEXT: s_mov_b32 s11, s17
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v3p0__4_1_1:
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_2_1:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ; def s[12:17]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s6
-; GFX90A-NEXT: s_mov_b32 s9, s7
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s10, s16
+; GFX90A-NEXT: s_mov_b32 s11, s17
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v3p0__4_1_1:
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_2_1:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ; def s[12:17]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
+; GFX942-NEXT: s_mov_b64 s[10:11], s[16:17]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 4, i32 1, i32 1>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 2, i32 1>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v3p0__5_1_1() {
-; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_1_1:
+define void @s_shuffle_v3p0_v3p0__5_3_1() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_3_1:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ; def s[12:17]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_1_1:
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_3_1:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ; def s[12:17]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_1_1:
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_3_1:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s10
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s13, s11
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 1, i32 1>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 3, i32 1>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v3p0__5_u_1() {
-; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_u_1:
+define void @s_shuffle_v3p0_v3p0__5_4_1() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_4_1:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ; def s[12:17]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_u_1:
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_4_1:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ; def s[12:17]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_u_1:
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_4_1:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 poison, i32 1>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 4, i32 1>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v3p0__5_0_1() {
-; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_0_1:
+define void @s_shuffle_v3p0_v3p0__u_2_2() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__u_2_2:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:17]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ; def s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s10, s12
; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_0_1:
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__u_2_2:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:17]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ; def s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s10, s12
; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_0_1:
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__u_2_2:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 0, i32 1>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <3 x i32> <i32 poison, i32 2, i32 2>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v3p0__5_2_1() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__5_2_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s16
-; GFX9-NEXT: s_mov_b32 s11, s17
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v3p0_v3p0__0_2_2() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__0_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__0_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__0_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 2, i32 1>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <3 x i32> <i32 0, i32 2, i32 2>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v3p0__5_3_1() {
-; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_3_1:
+define void @s_shuffle_v3p0_v3p0__1_2_2() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__1_2_2:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__1_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__1_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <3 x i32> <i32 1, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v3p0__2_2_2() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s4
-; GFX900-NEXT: s_mov_b32 s11, s5
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_3_1:
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__2_2_2:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:17]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s4
-; GFX90A-NEXT: s_mov_b32 s11, s5
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_3_1:
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__2_2_2:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 3, i32 1>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <3 x i32> <i32 2, i32 2, i32 2>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v3p0__5_4_1() {
-; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_4_1:
+define void @s_shuffle_v3p0_v3p0__3_2_2() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__3_2_2:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:17]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ; def s[8:13]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s6
-; GFX900-NEXT: s_mov_b32 s11, s7
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_4_1:
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__3_2_2:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:17]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ; def s[8:13]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s6
-; GFX90A-NEXT: s_mov_b32 s11, s7
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_4_1:
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__3_2_2:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s6
-; GFX942-NEXT: s_mov_b32 s11, s7
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 4, i32 1>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v3p0__u_2_2() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__u_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <3 x i32> <i32 poison, i32 2, i32 2>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v3p0__0_2_2() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__0_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <3 x i32> <i32 0, i32 2, i32 2>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v3p0__1_2_2() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__1_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <3 x i32> <i32 1, i32 2, i32 2>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v3p0__2_2_2() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__2_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <3 x i32> <i32 2, i32 2, i32 2>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v3p0__3_2_2() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__3_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <3 x i32> <i32 3, i32 2, i32 2>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
@@ -6001,10 +6761,8 @@ define void @s_shuffle_v3p0_v3p0__4_2_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -6055,11 +6813,11 @@ define void @s_shuffle_v3p0_v3p0__5_2_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -6123,23 +6881,57 @@ define void @s_shuffle_v3p0_v3p0__5_u_2() {
}
define void @s_shuffle_v3p0_v3p0__5_0_2() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__5_0_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s12, s16
-; GFX9-NEXT: s_mov_b32 s13, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_0_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s16
+; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_0_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s16
+; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_0_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 0, i32 2>
@@ -6241,8 +7033,7 @@ define void @s_shuffle_v3p0_v3p0__5_3_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -6297,8 +7088,7 @@ define void @s_shuffle_v3p0_v3p0__5_4_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s6
-; GFX942-NEXT: s_mov_b32 s11, s7
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -6397,8 +7187,7 @@ define void @s_shuffle_v3p0_v3p0__1_3_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -6464,20 +7253,48 @@ define void @s_shuffle_v3p0_v3p0__3_3_3() {
}
define void @s_shuffle_v3p0_v3p0__4_3_3() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__4_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__4_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__4_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__4_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 4, i32 3, i32 3>
@@ -6486,20 +7303,48 @@ define void @s_shuffle_v3p0_v3p0__4_3_3() {
}
define void @s_shuffle_v3p0_v3p0__5_3_3() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__5_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 3, i32 3>
@@ -6508,18 +7353,43 @@ define void @s_shuffle_v3p0_v3p0__5_3_3() {
}
define void @s_shuffle_v3p0_v3p0__5_u_3() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__5_u_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_u_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_u_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_u_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 poison, i32 3>
@@ -6570,13 +7440,11 @@ define void @s_shuffle_v3p0_v3p0__5_0_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -6631,8 +7499,7 @@ define void @s_shuffle_v3p0_v3p0__5_1_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -6687,13 +7554,11 @@ define void @s_shuffle_v3p0_v3p0__5_2_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -6706,20 +7571,48 @@ define void @s_shuffle_v3p0_v3p0__5_2_3() {
}
define void @s_shuffle_v3p0_v3p0__5_4_3() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__5_4_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_4_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_4_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_4_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 4, i32 3>
@@ -6728,18 +7621,43 @@ define void @s_shuffle_v3p0_v3p0__5_4_3() {
}
define void @s_shuffle_v3p0_v3p0__u_4_4() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__u_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__u_4_4:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__u_4_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__u_4_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 poison, i32 4, i32 4>
@@ -6766,60 +7684,219 @@ define void @s_shuffle_v3p0_v3p0__0_4_4() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v3p0__0_4_4:
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__0_4_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__0_4_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 0, i32 4, i32 4>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v3p0__1_4_4() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__1_4_4:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__1_4_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__1_4_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 1, i32 4, i32 4>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v3p0__2_4_4() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__2_4_4:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__2_4_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__2_4_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 2, i32 4, i32 4>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v3p0__3_4_4() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__3_4_4:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__3_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:13]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:17]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s14
-; GFX90A-NEXT: s_mov_b32 s11, s15
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v3p0__0_4_4:
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__3_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s2
-; GFX942-NEXT: s_mov_b32 s11, s3
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 0, i32 4, i32 4>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 3, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v3p0__1_4_4() {
-; GFX900-LABEL: s_shuffle_v3p0_v3p0__1_4_4:
+define void @s_shuffle_v3p0_v3p0__4_4_4() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__4_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:9]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:13]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s6
-; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
; GFX900-NEXT: s_mov_b32 s12, s10
; GFX900-NEXT: s_mov_b32 s13, s11
; GFX900-NEXT: ;;#ASMSTART
@@ -6827,17 +7904,14 @@ define void @s_shuffle_v3p0_v3p0__1_4_4() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v3p0__1_4_4:
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__4_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:9]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:13]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s6
-; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
; GFX90A-NEXT: s_mov_b32 s12, s10
; GFX90A-NEXT: s_mov_b32 s13, s11
; GFX90A-NEXT: ;;#ASMSTART
@@ -6845,149 +7919,68 @@ define void @s_shuffle_v3p0_v3p0__1_4_4() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v3p0__1_4_4:
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__4_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 1, i32 4, i32 4>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 4, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v3p0__2_4_4() {
-; GFX900-LABEL: s_shuffle_v3p0_v3p0__2_4_4:
+define void @s_shuffle_v3p0_v3p0__5_4_4() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:17]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s14
-; GFX900-NEXT: s_mov_b32 s11, s15
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v3p0__2_4_4:
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:17]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s14
-; GFX90A-NEXT: s_mov_b32 s11, s15
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v3p0__2_4_4:
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s2
-; GFX942-NEXT: s_mov_b32 s11, s3
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 2, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v3p0__3_4_4() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__3_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 3, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v3p0__4_4_4() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__4_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 4, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v3p0__5_4_4() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__5_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 4, i32 4>
@@ -6996,18 +7989,43 @@ define void @s_shuffle_v3p0_v3p0__5_4_4() {
}
define void @s_shuffle_v3p0_v3p0__5_u_4() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__5_u_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_u_4:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_u_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_u_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 poison, i32 4>
@@ -7058,13 +8076,11 @@ define void @s_shuffle_v3p0_v3p0__5_0_4() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -7119,8 +8135,7 @@ define void @s_shuffle_v3p0_v3p0__5_1_4() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -7151,83 +8166,134 @@ define void @s_shuffle_v3p0_v3p0__5_2_4() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_2_4:
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_2_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_2_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 2, i32 4>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v3p0__5_3_4() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_3_4:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_3_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_3_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 3, i32 4>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v3p0__u_5_5() {
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__u_5_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__u_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:13]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:9]
-; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s10, s12
; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s6
-; GFX90A-NEXT: s_mov_b32 s13, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_2_4:
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__u_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:9]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 2, i32 4>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v3p0__5_3_4() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__5_3_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 3, i32 4>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v3p0__u_5_5() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__u_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 poison, i32 5, i32 5>
@@ -7281,10 +8347,8 @@ define void @s_shuffle_v3p0_v3p0__0_5_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -7342,10 +8406,8 @@ define void @s_shuffle_v3p0_v3p0__1_5_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -7404,10 +8466,8 @@ define void @s_shuffle_v3p0_v3p0__2_5_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -7420,18 +8480,43 @@ define void @s_shuffle_v3p0_v3p0__2_5_5() {
}
define void @s_shuffle_v3p0_v3p0__3_5_5() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__3_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__3_5_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__3_5_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__3_5_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 3, i32 5, i32 5>
@@ -7440,20 +8525,48 @@ define void @s_shuffle_v3p0_v3p0__3_5_5() {
}
define void @s_shuffle_v3p0_v3p0__4_5_5() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__4_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__4_5_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__4_5_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__4_5_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 4, i32 5, i32 5>
@@ -7462,18 +8575,43 @@ define void @s_shuffle_v3p0_v3p0__4_5_5() {
}
define void @s_shuffle_v3p0_v3p0__5_u_5() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__5_u_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_u_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_u_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_u_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 poison, i32 5>
@@ -7524,13 +8662,11 @@ define void @s_shuffle_v3p0_v3p0__5_0_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s8
-; GFX942-NEXT: s_mov_b32 s13, s9
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -7585,8 +8721,7 @@ define void @s_shuffle_v3p0_v3p0__5_1_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s8
-; GFX942-NEXT: s_mov_b32 s13, s9
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -7641,13 +8776,11 @@ define void @s_shuffle_v3p0_v3p0__5_2_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s12, s8
-; GFX942-NEXT: s_mov_b32 s13, s9
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -7660,20 +8793,48 @@ define void @s_shuffle_v3p0_v3p0__5_2_5() {
}
define void @s_shuffle_v3p0_v3p0__5_3_5() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__5_3_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_3_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_3_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_3_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 3, i32 5>
@@ -7682,20 +8843,48 @@ define void @s_shuffle_v3p0_v3p0__5_3_5() {
}
define void @s_shuffle_v3p0_v3p0__5_4_5() {
-; GFX9-LABEL: s_shuffle_v3p0_v3p0__5_4_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v3p0__5_4_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v3p0__5_4_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v3p0__5_4_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <3 x i32> <i32 5, i32 4, i32 5>
diff --git a/llvm/test/CodeGen/AMDGPU/shufflevector.v3p0.v4p0.ll b/llvm/test/CodeGen/AMDGPU/shufflevector.v3p0.v4p0.ll
index 30c5500f448dc..7a68c21dbbe19 100644
--- a/llvm/test/CodeGen/AMDGPU/shufflevector.v3p0.v4p0.ll
+++ b/llvm/test/CodeGen/AMDGPU/shufflevector.v3p0.v4p0.ll
@@ -7669,8 +7669,7 @@ define void @s_shuffle_v3p0_v4p0__1_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -7754,8 +7753,7 @@ define void @s_shuffle_v3p0_v4p0__3_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -7813,8 +7811,7 @@ define void @s_shuffle_v3p0_v4p0__5_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -7900,8 +7897,7 @@ define void @s_shuffle_v3p0_v4p0__7_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -7960,10 +7956,8 @@ define void @s_shuffle_v3p0_v4p0__7_0_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -8017,8 +8011,7 @@ define void @s_shuffle_v3p0_v4p0__7_1_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -8076,10 +8069,8 @@ define void @s_shuffle_v3p0_v4p0__7_2_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -8134,8 +8125,7 @@ define void @s_shuffle_v3p0_v4p0__7_3_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -8184,10 +8174,8 @@ define void @s_shuffle_v3p0_v4p0__7_4_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -8200,18 +8188,43 @@ define void @s_shuffle_v3p0_v4p0__7_4_u() {
}
define void @s_shuffle_v3p0_v4p0__7_5_u() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__7_5_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_5_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_5_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_5_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 5, i32 poison>
@@ -8256,10 +8269,8 @@ define void @s_shuffle_v3p0_v4p0__7_6_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -8272,18 +8283,43 @@ define void @s_shuffle_v3p0_v4p0__7_6_u() {
}
define void @s_shuffle_v3p0_v4p0__7_7_u() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__7_7_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_7_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_7_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_7_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 7, i32 poison>
@@ -8292,21 +8328,52 @@ define void @s_shuffle_v3p0_v4p0__7_7_u() {
}
define void @s_shuffle_v3p0_v4p0__7_7_0() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__7_7_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_7_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_7_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_7_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 7, i32 0>
@@ -8357,13 +8424,11 @@ define void @s_shuffle_v3p0_v4p0__7_7_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -8418,8 +8483,7 @@ define void @s_shuffle_v3p0_v4p0__7_7_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -8474,13 +8538,11 @@ define void @s_shuffle_v3p0_v4p0__7_7_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s14
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -8493,20 +8555,48 @@ define void @s_shuffle_v3p0_v4p0__7_7_3() {
}
define void @s_shuffle_v3p0_v4p0__7_7_4() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__7_7_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_7_4:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_7_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_7_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 7, i32 4>
@@ -8515,20 +8605,48 @@ define void @s_shuffle_v3p0_v4p0__7_7_4() {
}
define void @s_shuffle_v3p0_v4p0__7_7_5() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__7_7_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_7_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_7_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_7_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 7, i32 5>
@@ -8537,1226 +8655,735 @@ define void @s_shuffle_v3p0_v4p0__7_7_5() {
}
define void @s_shuffle_v3p0_v4p0__7_7_6() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__7_7_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 7, i32 6>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__7_7_7() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__7_7_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 7, i32 7>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__u_0_0() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__u_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 poison, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__0_0_0() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> zeroinitializer
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__1_0_0() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__1_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 1, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__2_0_0() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__2_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 2, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__3_0_0() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__3_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 3, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__4_0_0() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__4_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 4, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__5_0_0() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__5_0_0:
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_7_6:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s6
-; GFX900-NEXT: s_mov_b32 s9, s7
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__5_0_0:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_7_6:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s6
-; GFX90A-NEXT: s_mov_b32 s9, s7
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__5_0_0:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_7_6:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:19]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 5, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__6_0_0() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__6_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 6, i32 0, i32 0>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 7, i32 6>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__7_0_0() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_0_0:
+define void @s_shuffle_v3p0_v4p0__7_7_7() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_7_7:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
-; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_0_0:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_7_7:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_0_0:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_7_7:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:19]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 0, i32 0>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 7, i32 7>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__7_u_0() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_u_0:
+define void @s_shuffle_v3p0_v4p0__u_0_0() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__u_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_u_0:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__u_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_u_0:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__u_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 poison, i32 0>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 poison, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__7_1_0() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_1_0:
+define void @s_shuffle_v3p0_v4p0__0_0_0() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__0_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s14
-; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_1_0:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__0_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s14
-; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_1_0:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__0_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:19]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 1, i32 0>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> zeroinitializer
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__7_2_0() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_2_0:
+define void @s_shuffle_v3p0_v4p0__1_0_0() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__1_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s16
-; GFX900-NEXT: s_mov_b32 s11, s17
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_2_0:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__1_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s16
-; GFX90A-NEXT: s_mov_b32 s11, s17
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_2_0:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__1_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s16
-; GFX942-NEXT: s_mov_b32 s11, s17
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 2, i32 0>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__7_3_0() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__7_3_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 3, i32 0>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 1, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__7_4_0() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_4_0:
+define void @s_shuffle_v3p0_v4p0__2_0_0() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__2_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
; GFX900-NEXT: s_mov_b32 s10, s4
; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_4_0:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__2_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
; GFX90A-NEXT: s_mov_b32 s10, s4
; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_4_0:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__2_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:19]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 4, i32 0>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 2, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__7_5_0() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_5_0:
+define void @s_shuffle_v3p0_v4p0__3_0_0() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__3_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s12, s4
-; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_5_0:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__3_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s14
-; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s12, s4
-; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_5_0:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__3_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s12, s0
-; GFX942-NEXT: s_mov_b32 s13, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 5, i32 0>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 3, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__7_6_0() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_6_0:
+define void @s_shuffle_v3p0_v4p0__4_0_0() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__4_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s22
-; GFX900-NEXT: s_mov_b32 s9, s23
-; GFX900-NEXT: s_mov_b32 s10, s20
-; GFX900-NEXT: s_mov_b32 s11, s21
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_6_0:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__4_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s22
-; GFX90A-NEXT: s_mov_b32 s9, s23
-; GFX90A-NEXT: s_mov_b32 s10, s20
-; GFX90A-NEXT: s_mov_b32 s11, s21
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_6_0:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__4_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 6, i32 0>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__u_1_1() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__u_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 poison, i32 1, i32 1>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__0_1_1() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__0_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 0, i32 1, i32 1>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__1_1_1() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 1, i32 1, i32 1>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__2_1_1() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__2_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 2, i32 1, i32 1>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__3_1_1() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__3_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 3, i32 1, i32 1>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__4_1_1() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__4_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 4, i32 1, i32 1>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 4, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__5_1_1() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__5_1_1:
+define void @s_shuffle_v3p0_v4p0__5_0_0() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__5_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__5_1_1:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__5_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s14
-; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__5_1_1:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__5_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 5, i32 1, i32 1>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 5, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__6_1_1() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__6_1_1:
+define void @s_shuffle_v3p0_v4p0__6_0_0() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__6_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s14
-; GFX900-NEXT: s_mov_b32 s11, s15
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__6_1_1:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__6_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s14
-; GFX90A-NEXT: s_mov_b32 s11, s15
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__6_1_1:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__6_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s2
-; GFX942-NEXT: s_mov_b32 s11, s3
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 6, i32 1, i32 1>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 6, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__7_1_1() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_1_1:
+define void @s_shuffle_v3p0_v4p0__7_0_0() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s18
-; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_1_1:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s18
-; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_1_1:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 1, i32 1>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__7_u_1() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_u_1:
+define void @s_shuffle_v3p0_v4p0__7_u_0() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_u_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s12, s6
-; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_u_1:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_u_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s14
-; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s12, s6
-; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_u_1:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_u_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 poison, i32 1>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 poison, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__7_0_1() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_0_1:
+define void @s_shuffle_v3p0_v4p0__7_1_0() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_1_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s10, s4
-; GFX900-NEXT: s_mov_b32 s11, s5
-; GFX900-NEXT: s_mov_b32 s12, s6
-; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_0_1:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_1_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s14
-; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s10, s4
-; GFX90A-NEXT: s_mov_b32 s11, s5
-; GFX90A-NEXT: s_mov_b32 s12, s6
-; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_0_1:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_1_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 0, i32 1>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 1, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__7_2_1() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_2_1:
+define void @s_shuffle_v3p0_v4p0__7_2_0() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_2_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
; GFX900-NEXT: s_mov_b32 s10, s16
; GFX900-NEXT: s_mov_b32 s11, s17
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_2_1:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_2_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
; GFX90A-NEXT: s_mov_b32 s10, s16
; GFX90A-NEXT: s_mov_b32 s11, s17
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_2_1:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_2_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[16:17]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 2, i32 1>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__7_3_1() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__7_3_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 3, i32 1>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 2, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__7_4_1() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_4_1:
+define void @s_shuffle_v3p0_v4p0__7_3_0() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_3_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
@@ -9767,16 +9394,14 @@ define void @s_shuffle_v3p0_v4p0__7_4_1() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s18
; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s12, s6
-; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_4_1:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_3_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
@@ -9787,104 +9412,96 @@ define void @s_shuffle_v3p0_v4p0__7_4_1() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s18
; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s6
-; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_4_1:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_3_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 4, i32 1>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 3, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__7_5_1() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_5_1:
+define void @s_shuffle_v3p0_v4p0__7_4_0() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_4_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s12, s6
-; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_5_1:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_4_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s14
-; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s12, s6
-; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_5_1:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_4_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 5, i32 1>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 4, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__7_6_1() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_6_1:
+define void @s_shuffle_v3p0_v4p0__7_5_0() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_5_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
@@ -9895,16 +9512,14 @@ define void @s_shuffle_v3p0_v4p0__7_6_1() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s14
; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s12, s6
-; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_6_1:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_5_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
@@ -9915,16 +9530,14 @@ define void @s_shuffle_v3p0_v4p0__7_6_1() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s14
; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s6
-; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_6_1:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_5_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
@@ -9933,323 +9546,2167 @@ define void @s_shuffle_v3p0_v4p0__7_6_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 6, i32 1>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__u_2_2() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__u_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 poison, i32 2, i32 2>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 5, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__0_2_2() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__0_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v3p0_v4p0__7_6_0() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_6_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s22
+; GFX900-NEXT: s_mov_b32 s9, s23
+; GFX900-NEXT: s_mov_b32 s10, s20
+; GFX900-NEXT: s_mov_b32 s11, s21
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_6_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s22
+; GFX90A-NEXT: s_mov_b32 s9, s23
+; GFX90A-NEXT: s_mov_b32 s10, s20
+; GFX90A-NEXT: s_mov_b32 s11, s21
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_6_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 0, i32 2, i32 2>
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 6, i32 0>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__1_2_2() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__1_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v3p0_v4p0__u_1_1() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__u_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__u_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__u_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 1, i32 2, i32 2>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 poison, i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__2_2_2() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__2_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v3p0_v4p0__0_1_1() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__0_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__0_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__0_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 2, i32 2, i32 2>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 0, i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__3_2_2() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__3_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v3p0_v4p0__1_1_1() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 3, i32 2, i32 2>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 1, i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__4_2_2() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__4_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v3p0_v4p0__2_1_1() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__2_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__2_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__2_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 4, i32 2, i32 2>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 2, i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__5_2_2() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__5_2_2:
+define void @s_shuffle_v3p0_v4p0__3_1_1() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__3_1_1:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s6
-; GFX900-NEXT: s_mov_b32 s9, s7
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__5_2_2:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__3_1_1:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__3_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 3, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__4_1_1() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__4_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__4_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__4_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 4, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__5_1_1() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__5_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__5_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__5_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 5, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__6_1_1() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__6_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__6_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__6_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[2:3]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 6, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__7_1_1() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__7_u_1() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_u_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_u_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_u_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 poison, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__7_0_1() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_0_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_0_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_0_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 0, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__7_2_1() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_2_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s16
+; GFX900-NEXT: s_mov_b32 s11, s17
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_2_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s16
+; GFX90A-NEXT: s_mov_b32 s11, s17
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_2_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 2, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__7_3_1() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_3_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_3_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_3_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 3, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__7_4_1() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_4_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_4_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_4_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 4, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__7_5_1() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_5_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_5_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_5_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 5, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__7_6_1() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_6_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_6_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_6_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 6, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__u_2_2() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__u_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__u_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__u_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 poison, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__0_2_2() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__0_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__0_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__0_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 0, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__1_2_2() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__1_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__1_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__1_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 1, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__2_2_2() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 2, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__3_2_2() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__3_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__3_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__3_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 3, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__4_2_2() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__4_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__4_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__4_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 4, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__5_2_2() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__5_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__5_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__5_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 5, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__6_2_2() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__6_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__6_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__6_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 6, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__7_2_2() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__7_u_2() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_u_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_u_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_u_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 poison, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__7_0_2() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_0_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s16
+; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_0_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s16
+; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_0_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 0, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__7_1_2() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_1_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s22
+; GFX900-NEXT: s_mov_b32 s9, s23
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_1_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s22
+; GFX90A-NEXT: s_mov_b32 s9, s23
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_1_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 1, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__7_3_2() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_3_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_3_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_3_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 3, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__7_4_2() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_4_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_4_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_4_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 4, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__7_5_2() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_5_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s16
+; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_5_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s16
+; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_5_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 5, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__7_6_2() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_6_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s22
+; GFX900-NEXT: s_mov_b32 s9, s23
+; GFX900-NEXT: s_mov_b32 s10, s20
+; GFX900-NEXT: s_mov_b32 s11, s21
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_6_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s22
+; GFX90A-NEXT: s_mov_b32 s9, s23
+; GFX90A-NEXT: s_mov_b32 s10, s20
+; GFX90A-NEXT: s_mov_b32 s11, s21
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_6_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 6, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__u_3_3() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__u_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__u_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__u_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 poison, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__0_3_3() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__0_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__0_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__0_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 0, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__1_3_3() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__1_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__1_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__1_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 1, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__2_3_3() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__2_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__2_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__2_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 2, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__3_3_3() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s6
-; GFX90A-NEXT: s_mov_b32 s9, s7
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__5_2_2:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__3_3_3:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 5, i32 2, i32 2>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 3, i32 3, i32 3>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__6_2_2() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__6_2_2:
+define void @s_shuffle_v3p0_v4p0__4_3_3() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__4_3_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__6_2_2:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__4_3_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__6_2_2:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__4_3_3:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 6, i32 2, i32 2>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 4, i32 3, i32 3>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__7_2_2() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_2_2:
+define void @s_shuffle_v3p0_v4p0__5_3_3() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__5_3_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_2_2:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__5_3_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_2_2:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__5_3_3:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 2, i32 2>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 5, i32 3, i32 3>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__7_u_2() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_u_2:
+define void @s_shuffle_v3p0_v4p0__6_3_3() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__6_3_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
@@ -10258,14 +11715,16 @@ define void @s_shuffle_v3p0_v4p0__7_u_2() {
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_u_2:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__6_3_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
@@ -10274,136 +11733,134 @@ define void @s_shuffle_v3p0_v4p0__7_u_2() {
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_u_2:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__6_3_3:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 poison, i32 2>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 6, i32 3, i32 3>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__7_0_2() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_0_2:
+define void @s_shuffle_v3p0_v4p0__7_3_3() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_3_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s12, s16
-; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_0_2:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_3_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s16
-; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_0_2:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_3_3:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 0, i32 2>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 3, i32 3>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__7_1_2() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_1_2:
+define void @s_shuffle_v3p0_v4p0__7_u_3() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_u_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s22
-; GFX900-NEXT: s_mov_b32 s9, s23
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_1_2:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_u_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s22
-; GFX90A-NEXT: s_mov_b32 s9, s23
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_1_2:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_u_3:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
@@ -10412,57 +11869,61 @@ define void @s_shuffle_v3p0_v4p0__7_1_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 1, i32 2>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 poison, i32 3>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__7_3_2() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_3_2:
+define void @s_shuffle_v3p0_v4p0__7_0_3() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_0_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s14
-; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s18
+; GFX900-NEXT: s_mov_b32 s13, s19
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_3_2:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_0_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s14
-; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s18
+; GFX90A-NEXT: s_mov_b32 s13, s19
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_3_2:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_0_3:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
@@ -10471,59 +11932,58 @@ define void @s_shuffle_v3p0_v4p0__7_3_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 3, i32 2>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 0, i32 3>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__7_4_2() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_4_2:
+define void @s_shuffle_v3p0_v4p0__7_1_3() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_1_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[16:23]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s4
-; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s8, s22
+; GFX900-NEXT: s_mov_b32 s9, s23
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_4_2:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_1_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[16:23]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s4
-; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s8, s22
+; GFX90A-NEXT: s_mov_b32 s9, s23
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_4_2:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_1_3:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
@@ -10532,59 +11992,61 @@ define void @s_shuffle_v3p0_v4p0__7_4_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 4, i32 2>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 1, i32 3>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__7_5_2() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_5_2:
+define void @s_shuffle_v3p0_v4p0__7_2_3() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_2_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s12, s16
-; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_5_2:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_2_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s14
-; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s12, s16
-; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_5_2:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_2_3:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
@@ -10593,275 +12055,157 @@ define void @s_shuffle_v3p0_v4p0__7_5_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 5, i32 2>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 2, i32 3>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__7_6_2() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_6_2:
+define void @s_shuffle_v3p0_v4p0__7_4_3() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_4_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s22
-; GFX900-NEXT: s_mov_b32 s9, s23
-; GFX900-NEXT: s_mov_b32 s10, s20
-; GFX900-NEXT: s_mov_b32 s11, s21
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_6_2:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_4_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s22
-; GFX90A-NEXT: s_mov_b32 s9, s23
-; GFX90A-NEXT: s_mov_b32 s10, s20
-; GFX90A-NEXT: s_mov_b32 s11, s21
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_6_2:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_4_3:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 6, i32 2>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__u_3_3() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__u_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 poison, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__0_3_3() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__0_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 0, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__1_3_3() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__1_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s6
-; GFX9-NEXT: s_mov_b32 s9, s7
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 1, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__2_3_3() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__2_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 2, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__3_3_3() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__3_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 3, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__4_3_3() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__4_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 4, i32 3, i32 3>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 4, i32 3>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__5_3_3() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__5_3_3:
+define void @s_shuffle_v3p0_v4p0__7_5_3() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_5_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s14
; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s12, s18
+; GFX900-NEXT: s_mov_b32 s13, s19
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__5_3_3:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_5_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s14
; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s12, s18
+; GFX90A-NEXT: s_mov_b32 s13, s19
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__5_3_3:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_5_3:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s10
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s13, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 5, i32 3, i32 3>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 5, i32 3>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__6_3_3() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__6_3_3:
+define void @s_shuffle_v3p0_v4p0__7_6_3() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_6_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[16:23]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s14
-; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s8, s22
+; GFX900-NEXT: s_mov_b32 s9, s23
+; GFX900-NEXT: s_mov_b32 s10, s20
+; GFX900-NEXT: s_mov_b32 s11, s21
; GFX900-NEXT: s_mov_b32 s12, s14
; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
@@ -10869,17 +12213,19 @@ define void @s_shuffle_v3p0_v4p0__6_3_3() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__6_3_3:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_6_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[16:23]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s14
-; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s8, s22
+; GFX90A-NEXT: s_mov_b32 s9, s23
+; GFX90A-NEXT: s_mov_b32 s10, s20
+; GFX90A-NEXT: s_mov_b32 s11, s21
; GFX90A-NEXT: s_mov_b32 s12, s14
; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
@@ -10887,1084 +12233,785 @@ define void @s_shuffle_v3p0_v4p0__6_3_3() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__6_3_3:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_6_3:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s14
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 6, i32 3, i32 3>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 6, i32 3>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__7_3_3() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_3_3:
+define void @s_shuffle_v3p0_v4p0__u_4_4() {
+; GFX9-LABEL: s_shuffle_v3p0_v4p0__u_4_4:
+; GFX9: ; %bb.0:
+; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX9-NEXT: ;;#ASMSTART
+; GFX9-NEXT: ; use s[8:13]
+; GFX9-NEXT: ;;#ASMEND
+; GFX9-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 poison, i32 4, i32 4>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__0_4_4() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__0_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s18
-; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_3_3:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__0_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s18
-; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_3_3:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__0_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s13, s11
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 3, i32 3>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 0, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__7_u_3() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_u_3:
+define void @s_shuffle_v3p0_v4p0__1_4_4() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__1_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s18
-; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_u_3:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__1_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s18
-; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_u_3:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__1_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 poison, i32 3>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 1, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__7_0_3() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_0_3:
+define void @s_shuffle_v3p0_v4p0__2_4_4() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__2_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s12, s18
-; GFX900-NEXT: s_mov_b32 s13, s19
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_0_3:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__2_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s18
-; GFX90A-NEXT: s_mov_b32 s13, s19
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_0_3:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__2_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 0, i32 3>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 2, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__7_1_3() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_1_3:
+define void @s_shuffle_v3p0_v4p0__3_4_4() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__3_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s22
-; GFX900-NEXT: s_mov_b32 s9, s23
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_1_3:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__3_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s22
-; GFX90A-NEXT: s_mov_b32 s9, s23
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_1_3:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__3_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 1, i32 3>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 3, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__7_2_3() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_2_3:
+define void @s_shuffle_v3p0_v4p0__4_4_4() {
+; GFX9-LABEL: s_shuffle_v3p0_v4p0__4_4_4:
+; GFX9: ; %bb.0:
+; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX9-NEXT: ;;#ASMSTART
+; GFX9-NEXT: ; use s[8:13]
+; GFX9-NEXT: ;;#ASMEND
+; GFX9-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 4, i32 4, i32 4>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__5_4_4() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__5_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
; GFX900-NEXT: s_mov_b32 s10, s12
; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_2_3:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__5_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
; GFX90A-NEXT: s_mov_b32 s10, s12
; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_2_3:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__5_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 2, i32 3>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 5, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__7_4_3() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_4_3:
+define void @s_shuffle_v3p0_v4p0__6_4_4() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__6_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
; GFX900-NEXT: s_mov_b32 s10, s4
; GFX900-NEXT: s_mov_b32 s11, s5
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_4_3:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__6_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
; GFX90A-NEXT: s_mov_b32 s10, s4
; GFX90A-NEXT: s_mov_b32 s11, s5
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_4_3:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__6_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:19]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 4, i32 3>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 6, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__7_5_3() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_5_3:
+define void @s_shuffle_v3p0_v4p0__7_4_4() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s12, s18
-; GFX900-NEXT: s_mov_b32 s13, s19
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_5_3:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s14
-; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s12, s18
-; GFX90A-NEXT: s_mov_b32 s13, s19
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_5_3:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 5, i32 3>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__7_6_3() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_6_3:
+define void @s_shuffle_v3p0_v4p0__7_u_4() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_u_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s22
-; GFX900-NEXT: s_mov_b32 s9, s23
-; GFX900-NEXT: s_mov_b32 s10, s20
-; GFX900-NEXT: s_mov_b32 s11, s21
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_6_3:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_u_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s22
-; GFX90A-NEXT: s_mov_b32 s9, s23
-; GFX90A-NEXT: s_mov_b32 s10, s20
-; GFX90A-NEXT: s_mov_b32 s11, s21
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_6_3:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_u_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 6, i32 3>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__u_4_4() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__u_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 poison, i32 4, i32 4>
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 poison, i32 4>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__0_4_4() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__0_4_4:
+define void @s_shuffle_v3p0_v4p0__7_0_4() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_0_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__0_4_4:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_0_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__0_4_4:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_0_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 0, i32 4, i32 4>
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 0, i32 4>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__1_4_4() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__1_4_4:
+define void @s_shuffle_v3p0_v4p0__7_1_4() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_1_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s6
-; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__1_4_4:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_1_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s6
-; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__1_4_4:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_1_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 1, i32 4, i32 4>
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 1, i32 4>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__2_4_4() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__2_4_4:
+define void @s_shuffle_v3p0_v4p0__7_2_4() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_2_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s20
+; GFX900-NEXT: s_mov_b32 s11, s21
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__2_4_4:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_2_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s20
+; GFX90A-NEXT: s_mov_b32 s11, s21
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__2_4_4:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_2_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 2, i32 4, i32 4>
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 2, i32 4>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__3_4_4() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__3_4_4:
+define void @s_shuffle_v3p0_v4p0__7_3_4() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_3_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__3_4_4:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_3_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__3_4_4:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_3_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 3, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__4_4_4() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__4_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <3 x i32> <i32 4, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__5_4_4() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__5_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 5, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__6_4_4() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__6_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 6, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__7_4_4() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__7_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__7_u_4() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__7_u_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 poison, i32 4>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 3, i32 4>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__7_0_4() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_0_4:
+define void @s_shuffle_v3p0_v4p0__7_5_4() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_5_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s18
; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s10, s4
-; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_0_4:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_5_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s18
; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s10, s4
-; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_0_4:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_5_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 0, i32 4>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 5, i32 4>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__7_1_4() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_1_4:
+define void @s_shuffle_v3p0_v4p0__7_6_4() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_6_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s18
; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s16
+; GFX900-NEXT: s_mov_b32 s11, s17
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_1_4:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_6_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s18
; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s16
+; GFX90A-NEXT: s_mov_b32 s11, s17
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_1_4:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_6_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[16:17]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 1, i32 4>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 6, i32 4>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__7_2_4() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_2_4:
+define void @s_shuffle_v3p0_v4p0__u_5_5() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__u_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s18
-; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s10, s20
-; GFX900-NEXT: s_mov_b32 s11, s21
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_2_4:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__u_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s18
-; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s10, s20
-; GFX90A-NEXT: s_mov_b32 s11, s21
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_2_4:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__u_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 2, i32 4>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__7_3_4() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__7_3_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 3, i32 4>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__7_5_4() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__7_5_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 5, i32 4>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__7_6_4() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__7_6_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s10, s16
-; GFX9-NEXT: s_mov_b32 s11, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 6, i32 4>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__u_5_5() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__u_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 poison, i32 5, i32 5>
@@ -12018,10 +13065,8 @@ define void @s_shuffle_v3p0_v4p0__0_5_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s2
-; GFX942-NEXT: s_mov_b32 s11, s3
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -12079,10 +13124,8 @@ define void @s_shuffle_v3p0_v4p0__1_5_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -12141,10 +13184,8 @@ define void @s_shuffle_v3p0_v4p0__2_5_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s2
-; GFX942-NEXT: s_mov_b32 s11, s3
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -12202,10 +13243,8 @@ define void @s_shuffle_v3p0_v4p0__3_5_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -12218,18 +13257,43 @@ define void @s_shuffle_v3p0_v4p0__3_5_5() {
}
define void @s_shuffle_v3p0_v4p0__4_5_5() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__4_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__4_5_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__4_5_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__4_5_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 4, i32 5, i32 5>
@@ -12238,20 +13302,48 @@ define void @s_shuffle_v3p0_v4p0__4_5_5() {
}
define void @s_shuffle_v3p0_v4p0__5_5_5() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__5_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__5_5_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__5_5_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__5_5_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 5, i32 5, i32 5>
@@ -12260,20 +13352,48 @@ define void @s_shuffle_v3p0_v4p0__5_5_5() {
}
define void @s_shuffle_v3p0_v4p0__6_5_5() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__6_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__6_5_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__6_5_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__6_5_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 6, i32 5, i32 5>
@@ -12282,20 +13402,48 @@ define void @s_shuffle_v3p0_v4p0__6_5_5() {
}
define void @s_shuffle_v3p0_v4p0__7_5_5() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__7_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_5_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_5_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_5_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 5, i32 5>
@@ -12340,10 +13488,8 @@ define void @s_shuffle_v3p0_v4p0__7_u_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -12406,12 +13552,9 @@ define void @s_shuffle_v3p0_v4p0__7_0_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -12469,10 +13612,8 @@ define void @s_shuffle_v3p0_v4p0__7_1_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -12534,12 +13675,9 @@ define void @s_shuffle_v3p0_v4p0__7_2_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -12598,10 +13736,8 @@ define void @s_shuffle_v3p0_v4p0__7_3_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -12654,12 +13790,9 @@ define void @s_shuffle_v3p0_v4p0__7_4_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -12712,12 +13845,9 @@ define void @s_shuffle_v3p0_v4p0__7_6_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -12730,18 +13860,43 @@ define void @s_shuffle_v3p0_v4p0__7_6_5() {
}
define void @s_shuffle_v3p0_v4p0__u_6_6() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__u_6_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__u_6_6:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__u_6_6:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__u_6_6:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 poison, i32 6, i32 6>
@@ -12795,10 +13950,8 @@ define void @s_shuffle_v3p0_v4p0__0_6_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -12856,10 +14009,8 @@ define void @s_shuffle_v3p0_v4p0__1_6_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -12871,80 +14022,279 @@ define void @s_shuffle_v3p0_v4p0__1_6_6() {
ret void
}
-define void @s_shuffle_v3p0_v4p0__2_6_6() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__2_6_6:
+define void @s_shuffle_v3p0_v4p0__2_6_6() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__2_6_6:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s16
+; GFX900-NEXT: s_mov_b32 s11, s17
+; GFX900-NEXT: s_mov_b32 s12, s16
+; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__2_6_6:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s16
+; GFX90A-NEXT: s_mov_b32 s11, s17
+; GFX90A-NEXT: s_mov_b32 s12, s16
+; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__2_6_6:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 2, i32 6, i32 6>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__3_6_6() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__3_6_6:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__3_6_6:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__3_6_6:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 3, i32 6, i32 6>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__4_6_6() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__4_6_6:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__4_6_6:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__4_6_6:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 4, i32 6, i32 6>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__5_6_6() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__5_6_6:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__5_6_6:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__5_6_6:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 5, i32 6, i32 6>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__6_6_6() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__6_6_6:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s16
-; GFX900-NEXT: s_mov_b32 s11, s17
-; GFX900-NEXT: s_mov_b32 s12, s16
-; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__2_6_6:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__6_6_6:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s16
-; GFX90A-NEXT: s_mov_b32 s11, s17
-; GFX90A-NEXT: s_mov_b32 s12, s16
-; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__2_6_6:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__6_6_6:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 2, i32 6, i32 6>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 6, i32 6, i32 6>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__3_6_6() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__3_6_6:
+define void @s_shuffle_v3p0_v4p0__7_6_6() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_6_6:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s18
-; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
; GFX900-NEXT: s_mov_b32 s10, s12
; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: ;;#ASMSTART
@@ -12952,17 +14302,14 @@ define void @s_shuffle_v3p0_v4p0__3_6_6() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__3_6_6:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_6_6:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s18
-; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
; GFX90A-NEXT: s_mov_b32 s10, s12
; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: ;;#ASMSTART
@@ -12970,109 +14317,18 @@ define void @s_shuffle_v3p0_v4p0__3_6_6() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__3_6_6:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_6_6:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 3, i32 6, i32 6>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__4_6_6() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__4_6_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 4, i32 6, i32 6>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__5_6_6() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__5_6_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 5, i32 6, i32 6>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__6_6_6() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__6_6_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 6, i32 6, i32 6>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__7_6_6() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__7_6_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 6, i32 6>
@@ -13081,18 +14337,43 @@ define void @s_shuffle_v3p0_v4p0__7_6_6() {
}
define void @s_shuffle_v3p0_v4p0__7_u_6() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__7_u_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_u_6:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_u_6:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_u_6:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 poison, i32 6>
@@ -13146,10 +14427,8 @@ define void @s_shuffle_v3p0_v4p0__7_0_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -13207,10 +14486,8 @@ define void @s_shuffle_v3p0_v4p0__7_1_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -13268,10 +14545,8 @@ define void @s_shuffle_v3p0_v4p0__7_2_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -13302,140 +14577,185 @@ define void @s_shuffle_v3p0_v4p0__7_3_6() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_3_6:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_3_6:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s12, s16
+; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_3_6:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 3, i32 6>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__7_4_6() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_4_6:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s16
+; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_4_6:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s16
+; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_4_6:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 4, i32 6>
+ call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v3p0_v4p0__7_5_6() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_5_6:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_5_6:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s18
-; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s12, s16
-; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_3_6:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_5_6:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 3, i32 6>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 5, i32 6>
call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v3p0_v4p0__7_4_6() {
-; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_4_6:
+define void @s_shuffle_v3p0_v4p0__u_7_7() {
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__u_7_7:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s18
-; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s12, s16
-; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_4_6:
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__u_7_7:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s18
-; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s16
-; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_4_6:
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__u_7_7:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 4, i32 6>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__7_5_6() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__7_5_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 5, i32 6>
- call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v3p0_v4p0__u_7_7() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__u_7_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 poison, i32 7, i32 7>
@@ -13489,10 +14809,8 @@ define void @s_shuffle_v3p0_v4p0__0_7_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s6
-; GFX942-NEXT: s_mov_b32 s11, s7
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -13551,10 +14869,8 @@ define void @s_shuffle_v3p0_v4p0__1_7_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -13613,10 +14929,8 @@ define void @s_shuffle_v3p0_v4p0__2_7_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s6
-; GFX942-NEXT: s_mov_b32 s11, s7
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -13675,10 +14989,8 @@ define void @s_shuffle_v3p0_v4p0__3_7_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -13691,20 +15003,48 @@ define void @s_shuffle_v3p0_v4p0__3_7_7() {
}
define void @s_shuffle_v3p0_v4p0__4_7_7() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__4_7_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__4_7_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__4_7_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__4_7_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 4, i32 7, i32 7>
@@ -13713,20 +15053,48 @@ define void @s_shuffle_v3p0_v4p0__4_7_7() {
}
define void @s_shuffle_v3p0_v4p0__5_7_7() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__5_7_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s6
-; GFX9-NEXT: s_mov_b32 s9, s7
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__5_7_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__5_7_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__5_7_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 5, i32 7, i32 7>
@@ -13735,18 +15103,43 @@ define void @s_shuffle_v3p0_v4p0__5_7_7() {
}
define void @s_shuffle_v3p0_v4p0__6_7_7() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__6_7_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__6_7_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__6_7_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__6_7_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 6, i32 7, i32 7>
@@ -13791,10 +15184,8 @@ define void @s_shuffle_v3p0_v4p0__7_u_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -13856,12 +15247,9 @@ define void @s_shuffle_v3p0_v4p0__7_0_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -13919,10 +15307,8 @@ define void @s_shuffle_v3p0_v4p0__7_1_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -13984,12 +15370,9 @@ define void @s_shuffle_v3p0_v4p0__7_2_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -14048,10 +15431,8 @@ define void @s_shuffle_v3p0_v4p0__7_3_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -14104,12 +15485,9 @@ define void @s_shuffle_v3p0_v4p0__7_4_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
@@ -14122,20 +15500,48 @@ define void @s_shuffle_v3p0_v4p0__7_4_7() {
}
define void @s_shuffle_v3p0_v4p0__7_5_7() {
-; GFX9-LABEL: s_shuffle_v3p0_v4p0__7_5_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v3p0_v4p0__7_5_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v3p0_v4p0__7_5_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v3p0_v4p0__7_5_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <3 x i32> <i32 7, i32 5, i32 7>
@@ -14184,12 +15590,9 @@ define void @s_shuffle_v3p0_v4p0__7_6_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:13]
; GFX942-NEXT: ;;#ASMEND
diff --git a/llvm/test/CodeGen/AMDGPU/shufflevector.v4i64.v2i64.ll b/llvm/test/CodeGen/AMDGPU/shufflevector.v4i64.v2i64.ll
index 5bfa86835c5b2..601529cb49448 100644
--- a/llvm/test/CodeGen/AMDGPU/shufflevector.v4i64.v2i64.ll
+++ b/llvm/test/CodeGen/AMDGPU/shufflevector.v4i64.v2i64.ll
@@ -3519,8 +3519,7 @@ define void @s_shuffle_v4i64_v2i64__1_u_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -3578,8 +3577,7 @@ define void @s_shuffle_v4i64_v2i64__3_u_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -3637,10 +3635,8 @@ define void @s_shuffle_v4i64_v2i64__3_0_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -3694,8 +3690,7 @@ define void @s_shuffle_v4i64_v2i64__3_1_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -3744,10 +3739,8 @@ define void @s_shuffle_v4i64_v2i64__3_2_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -3760,18 +3753,43 @@ define void @s_shuffle_v4i64_v2i64__3_2_u_u() {
}
define void @s_shuffle_v4i64_v2i64__3_3_u_u() {
-; GFX9-LABEL: s_shuffle_v4i64_v2i64__3_3_u_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v2i64__3_3_u_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v2i64__3_3_u_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v2i64__3_3_u_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%vec1 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 poison>
@@ -3780,21 +3798,52 @@ define void @s_shuffle_v4i64_v2i64__3_3_u_u() {
}
define void @s_shuffle_v4i64_v2i64__3_3_0_u() {
-; GFX9-LABEL: s_shuffle_v4i64_v2i64__3_3_0_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v2i64__3_3_0_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v2i64__3_3_0_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v2i64__3_3_0_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%vec1 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 poison>
@@ -3848,10 +3897,8 @@ define void @s_shuffle_v4i64_v2i64__3_3_1_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -3864,20 +3911,48 @@ define void @s_shuffle_v4i64_v2i64__3_3_1_u() {
}
define void @s_shuffle_v4i64_v2i64__3_3_2_u() {
-; GFX9-LABEL: s_shuffle_v4i64_v2i64__3_3_2_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v2i64__3_3_2_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v2i64__3_3_2_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v2i64__3_3_2_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%vec1 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 poison>
@@ -3886,20 +3961,48 @@ define void @s_shuffle_v4i64_v2i64__3_3_2_u() {
}
define void @s_shuffle_v4i64_v2i64__3_3_3_u() {
-; GFX9-LABEL: s_shuffle_v4i64_v2i64__3_3_3_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v2i64__3_3_3_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v2i64__3_3_3_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v2i64__3_3_3_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%vec1 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 poison>
@@ -3957,12 +4060,9 @@ define void @s_shuffle_v4i64_v2i64__3_3_3_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
-; GFX942-NEXT: s_mov_b32 s14, s0
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -3975,23 +4075,57 @@ define void @s_shuffle_v4i64_v2i64__3_3_3_0() {
}
define void @s_shuffle_v4i64_v2i64__3_3_3_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v2i64__3_3_3_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v2i64__3_3_3_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v2i64__3_3_3_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v2i64__3_3_3_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%vec1 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 1>
@@ -4044,14 +4178,10 @@ define void @s_shuffle_v4i64_v2i64__3_3_3_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s2
-; GFX942-NEXT: s_mov_b32 s11, s3
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
-; GFX942-NEXT: s_mov_b32 s14, s0
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -4064,44 +4194,103 @@ define void @s_shuffle_v4i64_v2i64__3_3_3_2() {
}
define void @s_shuffle_v4i64_v2i64__3_3_3_3() {
-; GFX9-LABEL: s_shuffle_v4i64_v2i64__3_3_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <2 x i64> asm "; def $0", "=s"()
- %vec1 = call <2 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v2i64__u_0_0_0() {
-; GFX9-LABEL: s_shuffle_v4i64_v2i64__u_0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v2i64__3_3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v2i64__3_3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v2i64__3_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <2 x i64> asm "; def $0", "=s"()
+ %vec1 = call <2 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v2i64__u_0_0_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v2i64__u_0_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v2i64__u_0_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v2i64__u_0_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <4 x i32> <i32 poison, i32 0, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
@@ -4109,22 +4298,53 @@ define void @s_shuffle_v4i64_v2i64__u_0_0_0() {
}
define void @s_shuffle_v4i64_v2i64__0_0_0_0() {
-; GFX9-LABEL: s_shuffle_v4i64_v2i64__0_0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: s_mov_b32 s14, s8
-; GFX9-NEXT: s_mov_b32 s15, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v2i64__0_0_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: s_mov_b32 s14, s8
+; GFX900-NEXT: s_mov_b32 s15, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v2i64__0_0_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: s_mov_b32 s14, s8
+; GFX90A-NEXT: s_mov_b32 s15, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v2i64__0_0_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <4 x i32> zeroinitializer
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
@@ -4132,22 +4352,53 @@ define void @s_shuffle_v4i64_v2i64__0_0_0_0() {
}
define void @s_shuffle_v4i64_v2i64__1_0_0_0() {
-; GFX9-LABEL: s_shuffle_v4i64_v2i64__1_0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v2i64__1_0_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v2i64__1_0_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v2i64__1_0_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
@@ -4155,20 +4406,48 @@ define void @s_shuffle_v4i64_v2i64__1_0_0_0() {
}
define void @s_shuffle_v4i64_v2i64__2_0_0_0() {
-; GFX9-LABEL: s_shuffle_v4i64_v2i64__2_0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v2i64__2_0_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v2i64__2_0_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v2i64__2_0_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <4 x i32> <i32 2, i32 0, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
@@ -4225,12 +4504,9 @@ define void @s_shuffle_v4i64_v2i64__3_0_0_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -4288,10 +4564,8 @@ define void @s_shuffle_v4i64_v2i64__3_u_0_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -4353,12 +4627,9 @@ define void @s_shuffle_v4i64_v2i64__3_1_0_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -4420,12 +4691,9 @@ define void @s_shuffle_v4i64_v2i64__3_2_0_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -4438,57 +4706,91 @@ define void @s_shuffle_v4i64_v2i64__3_2_0_0() {
}
define void @s_shuffle_v4i64_v2i64__3_3_0_0() {
-; GFX9-LABEL: s_shuffle_v4i64_v2i64__3_3_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <2 x i64> asm "; def $0", "=s"()
- %vec1 = call <2 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v2i64__3_3_u_0() {
-; GFX900-LABEL: s_shuffle_v4i64_v2i64__3_3_u_0:
+; GFX900-LABEL: s_shuffle_v4i64_v2i64__3_3_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ; def s[12:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:7]
+; GFX900-NEXT: ; def s[8:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s14, s4
-; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v2i64__3_3_u_0:
+; GFX90A-LABEL: s_shuffle_v4i64_v2i64__3_3_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ; def s[12:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:7]
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v2i64__3_3_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <2 x i64> asm "; def $0", "=s"()
+ %vec1 = call <2 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v2i64__3_3_u_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v2i64__3_3_u_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:7]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v2i64__3_3_u_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:7]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
@@ -4508,10 +4810,8 @@ define void @s_shuffle_v4i64_v2i64__3_3_u_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s14, s0
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -4573,12 +4873,9 @@ define void @s_shuffle_v4i64_v2i64__3_3_1_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
-; GFX942-NEXT: s_mov_b32 s14, s0
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -4640,12 +4937,9 @@ define void @s_shuffle_v4i64_v2i64__3_3_2_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
-; GFX942-NEXT: s_mov_b32 s14, s0
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -4658,20 +4952,48 @@ define void @s_shuffle_v4i64_v2i64__3_3_2_0() {
}
define void @s_shuffle_v4i64_v2i64__u_1_1_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v2i64__u_1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v2i64__u_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v2i64__u_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v2i64__u_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <4 x i32> <i32 poison, i32 1, i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
@@ -4679,20 +5001,48 @@ define void @s_shuffle_v4i64_v2i64__u_1_1_1() {
}
define void @s_shuffle_v4i64_v2i64__0_1_1_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v2i64__0_1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v2i64__0_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v2i64__0_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v2i64__0_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <4 x i32> <i32 0, i32 1, i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
@@ -4700,22 +5050,53 @@ define void @s_shuffle_v4i64_v2i64__0_1_1_1() {
}
define void @s_shuffle_v4i64_v2i64__1_1_1_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v2i64__1_1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v2i64__1_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v2i64__1_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v2i64__1_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
@@ -4723,20 +5104,48 @@ define void @s_shuffle_v4i64_v2i64__1_1_1_1() {
}
define void @s_shuffle_v4i64_v2i64__2_1_1_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v2i64__2_1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v2i64__2_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v2i64__2_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v2i64__2_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <4 x i32> <i32 2, i32 1, i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
@@ -4793,12 +5202,9 @@ define void @s_shuffle_v4i64_v2i64__3_1_1_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -4856,10 +5262,8 @@ define void @s_shuffle_v4i64_v2i64__3_u_1_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -4921,12 +5325,9 @@ define void @s_shuffle_v4i64_v2i64__3_0_1_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -4988,12 +5389,9 @@ define void @s_shuffle_v4i64_v2i64__3_2_1_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -5006,46 +5404,111 @@ define void @s_shuffle_v4i64_v2i64__3_2_1_1() {
}
define void @s_shuffle_v4i64_v2i64__3_3_1_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v2i64__3_3_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <2 x i64> asm "; def $0", "=s"()
- %vec1 = call <2 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 1>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
+; GFX900-LABEL: s_shuffle_v4i64_v2i64__3_3_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v2i64__3_3_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v2i64__3_3_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <2 x i64> asm "; def $0", "=s"()
+ %vec1 = call <2 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
define void @s_shuffle_v4i64_v2i64__3_3_u_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v2i64__3_3_u_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v2i64__3_3_u_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v2i64__3_3_u_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v2i64__3_3_u_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%vec1 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 1>
@@ -5054,21 +5517,52 @@ define void @s_shuffle_v4i64_v2i64__3_3_u_1() {
}
define void @s_shuffle_v4i64_v2i64__3_3_0_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v2i64__3_3_0_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v2i64__3_3_0_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v2i64__3_3_0_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v2i64__3_3_0_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%vec1 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 1>
@@ -5126,12 +5620,9 @@ define void @s_shuffle_v4i64_v2i64__3_3_2_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
-; GFX942-NEXT: s_mov_b32 s14, s2
-; GFX942-NEXT: s_mov_b32 s15, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -5230,8 +5721,7 @@ define void @s_shuffle_v4i64_v2i64__1_2_2_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -5257,22 +5747,53 @@ define void @s_shuffle_v4i64_v2i64__2_2_2_2() {
}
define void @s_shuffle_v4i64_v2i64__3_2_2_2() {
-; GFX9-LABEL: s_shuffle_v4i64_v2i64__3_2_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v2i64__3_2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v2i64__3_2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v2i64__3_2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%vec1 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <4 x i32> <i32 3, i32 2, i32 2, i32 2>
@@ -5281,20 +5802,48 @@ define void @s_shuffle_v4i64_v2i64__3_2_2_2() {
}
define void @s_shuffle_v4i64_v2i64__3_u_2_2() {
-; GFX9-LABEL: s_shuffle_v4i64_v2i64__3_u_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v2i64__3_u_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v2i64__3_u_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v2i64__3_u_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%vec1 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <4 x i32> <i32 3, i32 poison, i32 2, i32 2>
@@ -5352,12 +5901,9 @@ define void @s_shuffle_v4i64_v2i64__3_0_2_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -5370,23 +5916,57 @@ define void @s_shuffle_v4i64_v2i64__3_0_2_2() {
}
define void @s_shuffle_v4i64_v2i64__3_1_2_2() {
-; GFX9-LABEL: s_shuffle_v4i64_v2i64__3_1_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v2i64__3_1_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v2i64__3_1_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v2i64__3_1_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%vec1 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <4 x i32> <i32 3, i32 1, i32 2, i32 2>
@@ -5395,22 +5975,53 @@ define void @s_shuffle_v4i64_v2i64__3_1_2_2() {
}
define void @s_shuffle_v4i64_v2i64__3_3_2_2() {
-; GFX9-LABEL: s_shuffle_v4i64_v2i64__3_3_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v2i64__3_3_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v2i64__3_3_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v2i64__3_3_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%vec1 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 2>
@@ -5459,12 +6070,9 @@ define void @s_shuffle_v4i64_v2i64__3_3_u_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s2
-; GFX942-NEXT: s_mov_b32 s11, s3
-; GFX942-NEXT: s_mov_b32 s14, s0
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -5526,12 +6134,9 @@ define void @s_shuffle_v4i64_v2i64__3_3_0_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s2
-; GFX942-NEXT: s_mov_b32 s11, s3
-; GFX942-NEXT: s_mov_b32 s14, s0
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -5597,14 +6202,10 @@ define void @s_shuffle_v4i64_v2i64__3_3_1_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s6
-; GFX942-NEXT: s_mov_b32 s11, s7
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -5617,20 +6218,48 @@ define void @s_shuffle_v4i64_v2i64__3_3_1_2() {
}
define void @s_shuffle_v4i64_v2i64__u_3_3_3() {
-; GFX9-LABEL: s_shuffle_v4i64_v2i64__u_3_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v2i64__u_3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v2i64__u_3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v2i64__u_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%vec1 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <4 x i32> <i32 poison, i32 3, i32 3, i32 3>
@@ -5639,23 +6268,57 @@ define void @s_shuffle_v4i64_v2i64__u_3_3_3() {
}
define void @s_shuffle_v4i64_v2i64__0_3_3_3() {
-; GFX9-LABEL: s_shuffle_v4i64_v2i64__0_3_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v2i64__0_3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v2i64__0_3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v2i64__0_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%vec1 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <4 x i32> <i32 0, i32 3, i32 3, i32 3>
@@ -5713,12 +6376,9 @@ define void @s_shuffle_v4i64_v2i64__1_3_3_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -5731,78 +6391,134 @@ define void @s_shuffle_v4i64_v2i64__1_3_3_3() {
}
define void @s_shuffle_v4i64_v2i64__2_3_3_3() {
-; GFX9-LABEL: s_shuffle_v4i64_v2i64__2_3_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <2 x i64> asm "; def $0", "=s"()
- %vec1 = call <2 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <4 x i32> <i32 2, i32 3, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v2i64__3_u_3_3() {
-; GFX9-LABEL: s_shuffle_v4i64_v2i64__3_u_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <2 x i64> asm "; def $0", "=s"()
- %vec1 = call <2 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <4 x i32> <i32 3, i32 poison, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v2i64__3_0_3_3() {
-; GFX900-LABEL: s_shuffle_v4i64_v2i64__3_0_3_3:
+; GFX900-LABEL: s_shuffle_v4i64_v2i64__2_3_3_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:7]
+; GFX900-NEXT: ; def s[8:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s10, s4
-; GFX900-NEXT: s_mov_b32 s11, s5
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v2i64__3_0_3_3:
+; GFX90A-LABEL: s_shuffle_v4i64_v2i64__2_3_3_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ; def s[8:11]
; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:7]
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v2i64__2_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <2 x i64> asm "; def $0", "=s"()
+ %vec1 = call <2 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <4 x i32> <i32 2, i32 3, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v2i64__3_u_3_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v2i64__3_u_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v2i64__3_u_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v2i64__3_u_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <2 x i64> asm "; def $0", "=s"()
+ %vec1 = call <2 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <4 x i32> <i32 3, i32 poison, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v2i64__3_0_3_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v2i64__3_0_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:7]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v2i64__3_0_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:7]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s14
; GFX90A-NEXT: s_mov_b32 s9, s15
@@ -5824,12 +6540,9 @@ define void @s_shuffle_v4i64_v2i64__3_0_3_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -5842,23 +6555,57 @@ define void @s_shuffle_v4i64_v2i64__3_0_3_3() {
}
define void @s_shuffle_v4i64_v2i64__3_1_3_3() {
-; GFX9-LABEL: s_shuffle_v4i64_v2i64__3_1_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v2i64__3_1_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v2i64__3_1_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v2i64__3_1_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%vec1 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <4 x i32> <i32 3, i32 1, i32 3, i32 3>
@@ -5867,22 +6614,53 @@ define void @s_shuffle_v4i64_v2i64__3_1_3_3() {
}
define void @s_shuffle_v4i64_v2i64__3_2_3_3() {
-; GFX9-LABEL: s_shuffle_v4i64_v2i64__3_2_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v2i64__3_2_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v2i64__3_2_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v2i64__3_2_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%vec1 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <4 x i32> <i32 3, i32 2, i32 3, i32 3>
@@ -5891,20 +6669,48 @@ define void @s_shuffle_v4i64_v2i64__3_2_3_3() {
}
define void @s_shuffle_v4i64_v2i64__3_3_u_3() {
-; GFX9-LABEL: s_shuffle_v4i64_v2i64__3_3_u_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v2i64__3_3_u_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v2i64__3_3_u_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v2i64__3_3_u_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%vec1 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 3>
@@ -5913,23 +6719,57 @@ define void @s_shuffle_v4i64_v2i64__3_3_u_3() {
}
define void @s_shuffle_v4i64_v2i64__3_3_0_3() {
-; GFX9-LABEL: s_shuffle_v4i64_v2i64__3_3_0_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v2i64__3_3_0_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v2i64__3_3_0_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v2i64__3_3_0_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%vec1 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 3>
@@ -5987,12 +6827,9 @@ define void @s_shuffle_v4i64_v2i64__3_3_1_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -6005,20 +6842,48 @@ define void @s_shuffle_v4i64_v2i64__3_3_1_3() {
}
define void @s_shuffle_v4i64_v2i64__3_3_2_3() {
-; GFX9-LABEL: s_shuffle_v4i64_v2i64__3_3_2_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v2i64__3_3_2_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v2i64__3_3_2_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v2i64__3_3_2_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x i64> asm "; def $0", "=s"()
%vec1 = call <2 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 3>
diff --git a/llvm/test/CodeGen/AMDGPU/shufflevector.v4i64.v3i64.ll b/llvm/test/CodeGen/AMDGPU/shufflevector.v4i64.v3i64.ll
index 5459b29ca7b47..42efc47278b28 100644
--- a/llvm/test/CodeGen/AMDGPU/shufflevector.v4i64.v3i64.ll
+++ b/llvm/test/CodeGen/AMDGPU/shufflevector.v4i64.v3i64.ll
@@ -7485,8 +7485,7 @@ define void @s_shuffle_v4i64_v3i64__1_u_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -7584,8 +7583,7 @@ define void @s_shuffle_v4i64_v3i64__4_u_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -7677,11 +7675,11 @@ define void @s_shuffle_v4i64_v3i64__5_0_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -7783,11 +7781,11 @@ define void @s_shuffle_v4i64_v3i64__5_2_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -7800,18 +7798,43 @@ define void @s_shuffle_v4i64_v3i64__5_2_u_u() {
}
define void @s_shuffle_v4i64_v3i64__5_3_u_u() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_3_u_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_3_u_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_3_u_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_3_u_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 3, i32 poison, i32 poison>
@@ -7820,18 +7843,43 @@ define void @s_shuffle_v4i64_v3i64__5_3_u_u() {
}
define void @s_shuffle_v4i64_v3i64__5_4_u_u() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_4_u_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_4_u_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_4_u_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_4_u_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 4, i32 poison, i32 poison>
@@ -7840,18 +7888,43 @@ define void @s_shuffle_v4i64_v3i64__5_4_u_u() {
}
define void @s_shuffle_v4i64_v3i64__5_5_u_u() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_5_u_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_u_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_u_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_u_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 poison, i32 poison>
@@ -7860,21 +7933,52 @@ define void @s_shuffle_v4i64_v3i64__5_5_u_u() {
}
define void @s_shuffle_v4i64_v3i64__5_5_0_u() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_5_0_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_0_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_0_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_0_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 0, i32 poison>
@@ -7925,13 +8029,11 @@ define void @s_shuffle_v4i64_v3i64__5_5_1_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -7986,8 +8088,7 @@ define void @s_shuffle_v4i64_v3i64__5_5_2_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -8000,782 +8101,292 @@ define void @s_shuffle_v4i64_v3i64__5_5_2_u() {
}
define void @s_shuffle_v4i64_v3i64__5_5_3_u() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_5_3_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 3, i32 poison>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_5_4_u() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_5_4_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 4, i32 poison>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_5_5_u() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_5_5_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 5, i32 poison>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_5_5_0() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_5_0:
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_3_u:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:21]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s10, s8
; GFX900-NEXT: s_mov_b32 s11, s9
-; GFX900-NEXT: s_mov_b32 s12, s8
-; GFX900-NEXT: s_mov_b32 s13, s9
-; GFX900-NEXT: s_mov_b32 s14, s16
-; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_5_0:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_3_u:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:21]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s10, s8
; GFX90A-NEXT: s_mov_b32 s11, s9
-; GFX90A-NEXT: s_mov_b32 s12, s8
-; GFX90A-NEXT: s_mov_b32 s13, s9
-; GFX90A-NEXT: s_mov_b32 s14, s16
-; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_5_0:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_3_u:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s0
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
-; GFX942-NEXT: s_mov_b32 s12, s8
-; GFX942-NEXT: s_mov_b32 s13, s9
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 5, i32 0>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 3, i32 poison>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_5_5_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_5_5_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 5, i32 1>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_5_5_2() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_5_5_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: s_mov_b32 s14, s16
-; GFX9-NEXT: s_mov_b32 s15, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 5, i32 2>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_5_5_3() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_5_5_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: s_mov_b32 s14, s4
-; GFX9-NEXT: s_mov_b32 s15, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 5, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_5_5_4() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_5_5_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: s_mov_b32 s14, s6
-; GFX9-NEXT: s_mov_b32 s15, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 5, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_5_5_5() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_5_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: s_mov_b32 s14, s8
-; GFX9-NEXT: s_mov_b32 s15, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__u_0_0_0() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__u_0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 poison, i32 0, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__0_0_0_0() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__0_0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: s_mov_b32 s14, s8
-; GFX9-NEXT: s_mov_b32 s15, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> zeroinitializer
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__1_0_0_0() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__1_0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__2_0_0_0() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__2_0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: s_mov_b32 s14, s4
-; GFX9-NEXT: s_mov_b32 s15, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 2, i32 0, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__3_0_0_0() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__3_0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 3, i32 0, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__4_0_0_0() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__4_0_0_0:
+define void @s_shuffle_v4i64_v3i64__5_5_4_u() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_4_u:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:17]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s6
-; GFX900-NEXT: s_mov_b32 s9, s7
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__4_0_0_0:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_4_u:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:17]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s6
-; GFX90A-NEXT: s_mov_b32 s9, s7
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__4_0_0_0:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_4_u:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:17]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 4, i32 0, i32 0, i32 0>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 4, i32 poison>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_0_0_0() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4i64_v3i64__5_5_5_u() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_5_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_5_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_5_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 0, i32 0, i32 0>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 5, i32 poison>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_u_0_0() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_u_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 poison, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_1_0_0() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_1_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 1, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_2_0_0() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_2_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s16
-; GFX9-NEXT: s_mov_b32 s11, s17
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 2, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_3_0_0() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_3_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 3, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_4_0_0() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_4_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 4, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_5_0_0() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_5_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_5_u_0() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_u_0:
+define void @s_shuffle_v4i64_v3i64__5_5_5_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_5_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ; def s[16:21]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s10, s8
; GFX900-NEXT: s_mov_b32 s11, s9
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_u_0:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_5_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ; def s[16:21]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s10, s8
; GFX90A-NEXT: s_mov_b32 s11, s9
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_u_0:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_5_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s0
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 poison, i32 0>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 5, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_5_1_0() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_1_0:
+define void @s_shuffle_v4i64_v3i64__5_5_5_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_5_1:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:21]
+; GFX900-NEXT: ; def s[12:17]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s10, s8
; GFX900-NEXT: s_mov_b32 s11, s9
-; GFX900-NEXT: s_mov_b32 s12, s18
-; GFX900-NEXT: s_mov_b32 s13, s19
-; GFX900-NEXT: s_mov_b32 s14, s16
-; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_1_0:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_5_1:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:21]
+; GFX90A-NEXT: ; def s[12:17]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s10, s8
; GFX90A-NEXT: s_mov_b32 s11, s9
-; GFX90A-NEXT: s_mov_b32 s12, s18
-; GFX90A-NEXT: s_mov_b32 s13, s19
-; GFX90A-NEXT: s_mov_b32 s14, s16
-; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_1_0:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_5_1:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ; def s[12:17]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
-; GFX942-NEXT: s_mov_b32 s13, s3
-; GFX942-NEXT: s_mov_b32 s14, s0
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 1, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_5_2_0() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_5_2_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[16:21]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s20
-; GFX9-NEXT: s_mov_b32 s13, s21
-; GFX9-NEXT: s_mov_b32 s14, s16
-; GFX9-NEXT: s_mov_b32 s15, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 2, i32 0>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 5, i32 1>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_5_3_0() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_3_0:
+define void @s_shuffle_v4i64_v3i64__5_5_5_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_5_2:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:21]
+; GFX900-NEXT: ; def s[12:17]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s10, s8
; GFX900-NEXT: s_mov_b32 s11, s9
-; GFX900-NEXT: s_mov_b32 s12, s4
-; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
; GFX900-NEXT: s_mov_b32 s14, s16
; GFX900-NEXT: s_mov_b32 s15, s17
; GFX900-NEXT: ;;#ASMSTART
@@ -8783,19 +8394,19 @@ define void @s_shuffle_v4i64_v3i64__5_5_3_0() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_3_0:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_5_2:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:21]
+; GFX90A-NEXT: ; def s[12:17]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s10, s8
; GFX90A-NEXT: s_mov_b32 s11, s9
-; GFX90A-NEXT: s_mov_b32 s12, s4
-; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
; GFX90A-NEXT: s_mov_b32 s14, s16
; GFX90A-NEXT: s_mov_b32 s15, s17
; GFX90A-NEXT: ;;#ASMSTART
@@ -8803,1367 +8414,4735 @@ define void @s_shuffle_v4i64_v3i64__5_5_3_0() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_3_0:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_5_2:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ; def s[12:17]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s0
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 3, i32 0>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 5, i32 2>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_5_4_0() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_4_0:
+define void @s_shuffle_v4i64_v3i64__5_5_5_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_5_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:21]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s10, s8
; GFX900-NEXT: s_mov_b32 s11, s9
-; GFX900-NEXT: s_mov_b32 s12, s6
-; GFX900-NEXT: s_mov_b32 s13, s7
-; GFX900-NEXT: s_mov_b32 s14, s16
-; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_4_0:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_5_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:21]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s10, s8
; GFX90A-NEXT: s_mov_b32 s11, s9
-; GFX90A-NEXT: s_mov_b32 s12, s6
-; GFX90A-NEXT: s_mov_b32 s13, s7
-; GFX90A-NEXT: s_mov_b32 s14, s16
-; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_4_0:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_5_3:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s0
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 4, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__u_1_1_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__u_1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 poison, i32 1, i32 1, i32 1>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__0_1_1_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__0_1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 0, i32 1, i32 1, i32 1>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 5, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__1_1_1_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__1_1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__2_1_1_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__2_1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: s_mov_b32 s14, s6
-; GFX9-NEXT: s_mov_b32 s15, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4i64_v3i64__5_5_5_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_5_4:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_5_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_5_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 2, i32 1, i32 1, i32 1>
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 5, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__3_1_1_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__3_1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4i64_v3i64__5_5_5_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_5_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: s_mov_b32 s14, s8
+; GFX900-NEXT: s_mov_b32 s15, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_5_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: s_mov_b32 s14, s8
+; GFX90A-NEXT: s_mov_b32 s15, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_5_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 3, i32 1, i32 1, i32 1>
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__4_1_1_1() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__4_1_1_1:
+define void @s_shuffle_v4i64_v3i64__u_0_0_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__u_0_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:13]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ; def s[12:17]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s6
-; GFX900-NEXT: s_mov_b32 s9, s7
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
-; GFX900-NEXT: s_mov_b32 s14, s10
-; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__4_1_1_1:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__u_0_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:13]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ; def s[12:17]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s6
-; GFX90A-NEXT: s_mov_b32 s9, s7
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
-; GFX90A-NEXT: s_mov_b32 s14, s10
-; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__4_1_1_1:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__u_0_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:13]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ; def s[12:17]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 4, i32 1, i32 1, i32 1>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 poison, i32 0, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_1_1_1() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_1_1_1:
+define void @s_shuffle_v4i64_v3i64__0_0_0_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__0_0_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:13]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:9]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
-; GFX900-NEXT: s_mov_b32 s14, s10
-; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: s_mov_b32 s14, s8
+; GFX900-NEXT: s_mov_b32 s15, s9
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_1_1_1:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__0_0_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:13]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:9]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
-; GFX90A-NEXT: s_mov_b32 s14, s10
-; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: s_mov_b32 s14, s8
+; GFX90A-NEXT: s_mov_b32 s15, s9
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_1_1_1:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__0_0_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:9]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s13, s11
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 1, i32 1, i32 1>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> zeroinitializer
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_u_1_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_u_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4i64_v3i64__1_0_0_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__1_0_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__1_0_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__1_0_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 poison, i32 1, i32 1>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_0_1_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_0_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
+define void @s_shuffle_v4i64_v3i64__2_0_0_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__2_0_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__2_0_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__2_0_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 2, i32 0, i32 0, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__3_0_0_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__3_0_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__3_0_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__3_0_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 3, i32 0, i32 0, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__4_0_0_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__4_0_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__4_0_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__4_0_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 4, i32 0, i32 0, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_0_0_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_0_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_0_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_0_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 0, i32 0, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_u_0_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_u_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_u_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_u_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 poison, i32 0, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_1_0_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_1_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_1_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_1_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 1, i32 0, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_2_0_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_2_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s16
+; GFX900-NEXT: s_mov_b32 s11, s17
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_2_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s16
+; GFX90A-NEXT: s_mov_b32 s11, s17
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_2_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[16:17]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 2, i32 0, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_3_0_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_3_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_3_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_3_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 3, i32 0, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_4_0_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_4_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_4_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_4_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 4, i32 0, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_5_0_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 0, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_5_u_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_u_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_u_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_u_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 poison, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_5_1_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_1_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[16:21]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s18
+; GFX900-NEXT: s_mov_b32 s13, s19
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_1_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[16:21]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s18
+; GFX90A-NEXT: s_mov_b32 s13, s19
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_1_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 1, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_5_2_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_2_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[16:21]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s20
+; GFX900-NEXT: s_mov_b32 s13, s21
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_2_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[16:21]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s20
+; GFX90A-NEXT: s_mov_b32 s13, s21
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_2_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[16:21]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[20:21]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 2, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_5_3_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_3_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[16:21]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_3_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[16:21]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_3_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 3, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_5_4_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_4_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[16:21]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_4_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[16:21]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_4_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 4, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__u_1_1_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__u_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__u_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__u_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 poison, i32 1, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__0_1_1_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__0_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__0_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__0_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 0, i32 1, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__1_1_1_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__1_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__1_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__1_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__2_1_1_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__2_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__2_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__2_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 2, i32 1, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__3_1_1_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__3_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__3_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__3_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 3, i32 1, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__4_1_1_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__4_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__4_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__4_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 4, i32 1, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_1_1_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 1, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_u_1_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_u_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_u_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_u_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 poison, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_0_1_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_0_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_0_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_0_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 0, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_2_1_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_2_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s16
+; GFX900-NEXT: s_mov_b32 s11, s17
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_2_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s16
+; GFX90A-NEXT: s_mov_b32 s11, s17
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_2_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[16:17]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 2, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_3_1_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_3_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_3_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_3_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 3, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_4_1_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_4_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_4_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_4_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 4, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_5_1_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_5_u_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_u_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_u_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_u_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 poison, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_5_0_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_0_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_0_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_0_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 0, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_5_2_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_2_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s16
+; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_2_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s16
+; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_2_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 2, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_5_3_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_3_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_3_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_3_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 3, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_5_4_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_4_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_4_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_4_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 4, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__u_2_2_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__u_2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__u_2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__u_2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 poison, i32 2, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__0_2_2_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__0_2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__0_2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__0_2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 0, i32 2, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__1_2_2_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__1_2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__1_2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__1_2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 1, i32 2, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__2_2_2_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__2_2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: s_mov_b32 s14, s8
+; GFX900-NEXT: s_mov_b32 s15, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__2_2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: s_mov_b32 s14, s8
+; GFX90A-NEXT: s_mov_b32 s15, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__2_2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 2, i32 2, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__3_2_2_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__3_2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__3_2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__3_2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 3, i32 2, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__4_2_2_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__4_2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__4_2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__4_2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 4, i32 2, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_2_2_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 2, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_u_2_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_u_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_u_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_u_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 poison, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_0_2_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_0_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s16
+; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_0_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s16
+; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_0_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[16:17]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 0, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_1_2_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_1_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_1_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_1_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 1, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_3_2_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_3_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_3_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_3_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 3, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_4_2_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_4_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_4_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_4_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 4, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_5_2_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_5_u_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_u_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_u_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_u_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 poison, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_5_0_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_0_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_0_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_0_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 0, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_5_1_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_1_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_1_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_1_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 1, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_5_3_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_3_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_3_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_3_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 3, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_5_4_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_4_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_4_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_4_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 4, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__u_3_3_3() {
+; GFX9-LABEL: s_shuffle_v4i64_v3i64__u_3_3_3:
+; GFX9: ; %bb.0:
+; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX9-NEXT: ;;#ASMSTART
+; GFX9-NEXT: ; use s[8:15]
+; GFX9-NEXT: ;;#ASMEND
; GFX9-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 0, i32 1, i32 1>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 poison, i32 3, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__0_3_3_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__0_3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__0_3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__0_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 0, i32 3, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__1_3_3_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__1_3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__1_3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__1_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 1, i32 3, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__2_3_3_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__2_3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__2_3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__2_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 2, i32 3, i32 3, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_2_1_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_2_1_1:
+define void @s_shuffle_v4i64_v3i64__3_3_3_3() {
+; GFX9-LABEL: s_shuffle_v4i64_v3i64__3_3_3_3:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s16
-; GFX9-NEXT: s_mov_b32 s11, s17
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
; GFX9-NEXT: ; use s[8:15]
; GFX9-NEXT: ;;#ASMEND
; GFX9-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 3, i32 3, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__4_3_3_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__4_3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__4_3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__4_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 2, i32 1, i32 1>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 4, i32 3, i32 3, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_3_1_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_3_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4i64_v3i64__5_3_3_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 3, i32 1, i32 1>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 3, i32 3, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_4_1_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_4_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4i64_v3i64__5_u_3_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_u_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_u_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_u_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 poison, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_0_3_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_0_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_0_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_0_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x i64> asm "; def $0", "=s"()
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 0, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v3i64__5_1_3_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_1_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_1_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_1_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 4, i32 1, i32 1>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 1, i32 3, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_5_1_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_5_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4i64_v3i64__5_2_3_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_2_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_2_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_2_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 1, i32 1>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 2, i32 3, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_5_u_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_5_u_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4i64_v3i64__5_4_3_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_4_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_4_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_4_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 poison, i32 1>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 4, i32 3, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_5_0_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_5_0_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4i64_v3i64__5_5_3_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 0, i32 1>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 3, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_5_2_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_5_2_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s16
-; GFX9-NEXT: s_mov_b32 s13, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4i64_v3i64__5_5_u_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_u_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_u_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_u_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 2, i32 1>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 poison, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_5_3_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_5_3_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4i64_v3i64__5_5_0_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_0_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_0_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_0_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 3, i32 1>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 0, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_5_4_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_5_4_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4i64_v3i64__5_5_1_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_1_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_1_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_1_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 4, i32 1>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__u_2_2_2() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__u_2_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 poison, i32 2, i32 2, i32 2>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__0_2_2_2() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__0_2_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 0, i32 2, i32 2, i32 2>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 1, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__1_2_2_2() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__1_2_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4i64_v3i64__5_5_2_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_2_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_2_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_2_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 1, i32 2, i32 2, i32 2>
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 2, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__2_2_2_2() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__2_2_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: s_mov_b32 s14, s8
-; GFX9-NEXT: s_mov_b32 s15, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4i64_v3i64__5_5_4_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_4_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_4_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_4_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 2, i32 2, i32 2, i32 2>
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 4, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__3_2_2_2() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__3_2_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4i64_v3i64__u_4_4_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__u_4_4_4:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__u_4_4_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__u_4_4_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 3, i32 2, i32 2, i32 2>
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 poison, i32 4, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__4_2_2_2() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__4_2_2_2:
+define void @s_shuffle_v4i64_v3i64__0_4_4_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__0_4_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ; def s[12:17]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s6
-; GFX900-NEXT: s_mov_b32 s9, s7
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__4_2_2_2:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__0_4_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ; def s[12:17]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s6
-; GFX90A-NEXT: s_mov_b32 s9, s7
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__4_2_2_2:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__0_4_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ; def s[12:17]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 4, i32 2, i32 2, i32 2>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 0, i32 4, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_2_2_2() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_2_2_2:
+define void @s_shuffle_v4i64_v3i64__1_4_4_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__1_4_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ; def s[8:13]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_2_2_2:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__1_4_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ; def s[8:13]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_2_2_2:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__1_4_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 2, i32 2, i32 2>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 1, i32 4, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_u_2_2() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_u_2_2:
+define void @s_shuffle_v4i64_v3i64__2_4_4_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__2_4_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ; def s[12:17]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_u_2_2:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__2_4_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ; def s[12:17]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_u_2_2:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__2_4_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ; def s[12:17]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s12
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 poison, i32 2, i32 2>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_0_2_2() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_0_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s12, s16
-; GFX9-NEXT: s_mov_b32 s13, s17
-; GFX9-NEXT: s_mov_b32 s14, s16
-; GFX9-NEXT: s_mov_b32 s15, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 0, i32 2, i32 2>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 2, i32 4, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_1_2_2() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_1_2_2:
+define void @s_shuffle_v4i64_v3i64__3_4_4_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__3_4_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:13]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:9]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_1_2_2:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__3_4_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:13]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:9]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_1_2_2:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__3_4_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:9]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 1, i32 2, i32 2>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 3, i32 4, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_3_2_2() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_3_2_2:
+define void @s_shuffle_v4i64_v3i64__4_4_4_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__4_4_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:13]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:9]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s4
-; GFX900-NEXT: s_mov_b32 s11, s5
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_3_2_2:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__4_4_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:13]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:9]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s4
-; GFX90A-NEXT: s_mov_b32 s11, s5
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_3_2_2:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__4_4_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:9]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 3, i32 2, i32 2>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 4, i32 4, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_4_2_2() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_4_2_2:
+define void @s_shuffle_v4i64_v3i64__5_4_4_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_4_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:13]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s10, s6
; GFX900-NEXT: s_mov_b32 s11, s7
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_4_2_2:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_4_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:13]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s10, s6
; GFX90A-NEXT: s_mov_b32 s11, s7
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_4_2_2:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_4_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:13]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s6
-; GFX942-NEXT: s_mov_b32 s11, s7
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 4, i32 2, i32 2>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 4, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_5_2_2() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_2_2:
+define void @s_shuffle_v4i64_v3i64__5_u_4_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_u_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:13]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s8
-; GFX900-NEXT: s_mov_b32 s11, s9
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_2_2:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_u_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:13]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s8
-; GFX90A-NEXT: s_mov_b32 s11, s9
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_2_2:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_u_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:13]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 2, i32 2>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 poison, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_5_u_2() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_u_2:
+define void @s_shuffle_v4i64_v3i64__5_0_4_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_0_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ; def s[12:17]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s8
-; GFX900-NEXT: s_mov_b32 s11, s9
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_u_2:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_0_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ; def s[12:17]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s8
-; GFX90A-NEXT: s_mov_b32 s11, s9
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_u_2:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_0_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s12
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 poison, i32 2>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_5_0_2() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_5_0_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s14, s16
-; GFX9-NEXT: s_mov_b32 s15, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 0, i32 2>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_5_1_2() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_5_1_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: s_mov_b32 s14, s16
-; GFX9-NEXT: s_mov_b32 s15, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 1, i32 2>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_5_3_2() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_5_3_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: s_mov_b32 s14, s16
-; GFX9-NEXT: s_mov_b32 s15, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 3, i32 2>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_5_4_2() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_5_4_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: s_mov_b32 s14, s16
-; GFX9-NEXT: s_mov_b32 s15, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 4, i32 2>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__u_3_3_3() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__u_3_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 poison, i32 3, i32 3, i32 3>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 0, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__0_3_3_3() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__0_3_3_3:
+define void @s_shuffle_v4i64_v3i64__5_1_4_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_1_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
+; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__0_3_3_3:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_1_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
+; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__0_3_3_3:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_1_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
@@ -10171,477 +13150,306 @@ define void @s_shuffle_v4i64_v3i64__0_3_3_3() {
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 0, i32 3, i32 3, i32 3>
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 1, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__1_3_3_3() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__1_3_3_3:
+define void @s_shuffle_v4i64_v3i64__5_2_4_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_2_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s6
-; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__1_3_3_3:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_2_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s6
-; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__1_3_3_3:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_2_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 1, i32 3, i32 3, i32 3>
+ %vec1 = call <3 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 2, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__2_3_3_3() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__2_3_3_3:
+define void @s_shuffle_v4i64_v3i64__5_3_4_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_3_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__2_3_3_3:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_3_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__2_3_3_3:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_3_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 2, i32 3, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__3_3_3_3() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__3_3_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <4 x i32> <i32 3, i32 3, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__4_3_3_3() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__4_3_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 4, i32 3, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_3_3_3() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_3_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: s_mov_b32 s14, s4
-; GFX9-NEXT: s_mov_b32 s15, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 3, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_u_3_3() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_u_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: s_mov_b32 s14, s4
-; GFX9-NEXT: s_mov_b32 s15, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 poison, i32 3, i32 3>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 3, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_0_3_3() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_0_3_3:
+define void @s_shuffle_v4i64_v3i64__5_5_4_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:17]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s12, s4
-; GFX900-NEXT: s_mov_b32 s13, s5
-; GFX900-NEXT: s_mov_b32 s14, s4
-; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_0_3_3:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:17]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s4
-; GFX90A-NEXT: s_mov_b32 s13, s5
-; GFX90A-NEXT: s_mov_b32 s14, s4
-; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_0_3_3:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 0, i32 3, i32 3>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_1_3_3() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_1_3_3:
+define void @s_shuffle_v4i64_v3i64__5_5_u_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_u_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:13]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s12, s4
-; GFX900-NEXT: s_mov_b32 s13, s5
-; GFX900-NEXT: s_mov_b32 s14, s4
-; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_1_3_3:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_u_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:13]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s12, s4
-; GFX90A-NEXT: s_mov_b32 s13, s5
-; GFX90A-NEXT: s_mov_b32 s14, s4
-; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_1_3_3:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_u_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:13]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 1, i32 3, i32 3>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 poison, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_2_3_3() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_2_3_3:
+define void @s_shuffle_v4i64_v3i64__5_5_0_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_0_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ; def s[12:17]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s12, s4
-; GFX900-NEXT: s_mov_b32 s13, s5
-; GFX900-NEXT: s_mov_b32 s14, s4
-; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_2_3_3:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_0_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ; def s[12:17]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s4
-; GFX90A-NEXT: s_mov_b32 s13, s5
-; GFX90A-NEXT: s_mov_b32 s14, s4
-; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_2_3_3:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_0_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:13]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:9]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; use s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 2, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_4_3_3() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_4_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: s_mov_b32 s14, s4
-; GFX9-NEXT: s_mov_b32 s15, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 4, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_5_3_3() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_5_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: s_mov_b32 s14, s4
-; GFX9-NEXT: s_mov_b32 s15, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_5_u_3() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_5_u_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s14, s4
-; GFX9-NEXT: s_mov_b32 s15, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 poison, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_5_0_3() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_5_0_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s14, s4
-; GFX9-NEXT: s_mov_b32 s15, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 0, i32 3>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 0, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_5_1_3() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_1_3:
+define void @s_shuffle_v4i64_v3i64__5_5_1_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_1_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
@@ -10654,14 +13462,14 @@ define void @s_shuffle_v4i64_v3i64__5_5_1_3() {
; GFX900-NEXT: s_mov_b32 s11, s9
; GFX900-NEXT: s_mov_b32 s12, s14
; GFX900-NEXT: s_mov_b32 s13, s15
-; GFX900-NEXT: s_mov_b32 s14, s4
-; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_1_3:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_1_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
@@ -10674,41 +13482,38 @@ define void @s_shuffle_v4i64_v3i64__5_5_1_3() {
; GFX90A-NEXT: s_mov_b32 s11, s9
; GFX90A-NEXT: s_mov_b32 s12, s14
; GFX90A-NEXT: s_mov_b32 s13, s15
-; GFX90A-NEXT: s_mov_b32 s14, s4
-; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_1_3:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_1_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
-; GFX942-NEXT: s_mov_b32 s13, s3
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 1, i32 3>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 1, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_5_2_3() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_2_3:
+define void @s_shuffle_v4i64_v3i64__5_5_2_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_2_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
@@ -10719,14 +13524,14 @@ define void @s_shuffle_v4i64_v3i64__5_5_2_3() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s10, s8
; GFX900-NEXT: s_mov_b32 s11, s9
-; GFX900-NEXT: s_mov_b32 s14, s4
-; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_2_3:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_2_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
@@ -10737,14 +13542,14 @@ define void @s_shuffle_v4i64_v3i64__5_5_2_3() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s10, s8
; GFX90A-NEXT: s_mov_b32 s11, s9
-; GFX90A-NEXT: s_mov_b32 s14, s4
-; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_2_3:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_2_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
@@ -10754,1061 +13559,724 @@ define void @s_shuffle_v4i64_v3i64__5_5_2_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 2, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_5_4_3() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_5_4_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: s_mov_b32 s14, s4
-; GFX9-NEXT: s_mov_b32 s15, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 4, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__u_4_4_4() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__u_4_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 poison, i32 4, i32 4, i32 4>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 2, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__0_4_4_4() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__0_4_4_4:
+define void @s_shuffle_v4i64_v3i64__5_5_3_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_3_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:13]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s14
-; GFX900-NEXT: s_mov_b32 s11, s15
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__0_4_4_4:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_3_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:13]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s14
-; GFX90A-NEXT: s_mov_b32 s11, s15
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__0_4_4_4:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_3_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:13]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 0, i32 4, i32 4, i32 4>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 3, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__1_4_4_4() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__1_4_4_4:
+define void @s_shuffle_v4i64_v3i64__u_5_5_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__u_5_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:9]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:13]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s6
-; GFX900-NEXT: s_mov_b32 s9, s7
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
-; GFX900-NEXT: s_mov_b32 s14, s10
-; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__1_4_4_4:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__u_5_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:9]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:13]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s6
-; GFX90A-NEXT: s_mov_b32 s9, s7
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
-; GFX90A-NEXT: s_mov_b32 s14, s10
-; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__1_4_4_4:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__u_5_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 1, i32 4, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__2_4_4_4() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__2_4_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 2, i32 4, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__3_4_4_4() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__3_4_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 3, i32 4, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__4_4_4_4() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__4_4_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 4, i32 4, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_4_4_4() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_4_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: s_mov_b32 s14, s6
-; GFX9-NEXT: s_mov_b32 s15, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 4, i32 4, i32 4>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 poison, i32 5, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_u_4_4() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_u_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: s_mov_b32 s14, s6
-; GFX9-NEXT: s_mov_b32 s15, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4i64_v3i64__0_5_5_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__0_5_5_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s16
+; GFX900-NEXT: s_mov_b32 s11, s17
+; GFX900-NEXT: s_mov_b32 s12, s16
+; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__0_5_5_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s16
+; GFX90A-NEXT: s_mov_b32 s11, s17
+; GFX90A-NEXT: s_mov_b32 s12, s16
+; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__0_5_5_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 poison, i32 4, i32 4>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 0, i32 5, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_0_4_4() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_0_4_4:
+define void @s_shuffle_v4i64_v3i64__1_5_5_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__1_5_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ; def s[8:13]
; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
; GFX900-NEXT: s_mov_b32 s10, s12
; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s12, s6
-; GFX900-NEXT: s_mov_b32 s13, s7
-; GFX900-NEXT: s_mov_b32 s14, s6
-; GFX900-NEXT: s_mov_b32 s15, s7
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_0_4_4:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__1_5_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ; def s[8:13]
; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
; GFX90A-NEXT: s_mov_b32 s10, s12
; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s6
-; GFX90A-NEXT: s_mov_b32 s13, s7
-; GFX90A-NEXT: s_mov_b32 s14, s6
-; GFX90A-NEXT: s_mov_b32 s15, s7
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_0_4_4:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__1_5_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
-; GFX942-NEXT: s_mov_b32 s14, s6
-; GFX942-NEXT: s_mov_b32 s15, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 0, i32 4, i32 4>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 1, i32 5, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_1_4_4() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_1_4_4:
+define void @s_shuffle_v4i64_v3i64__2_5_5_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__2_5_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ; def s[12:17]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s12, s6
-; GFX900-NEXT: s_mov_b32 s13, s7
-; GFX900-NEXT: s_mov_b32 s14, s6
-; GFX900-NEXT: s_mov_b32 s15, s7
+; GFX900-NEXT: s_mov_b32 s10, s16
+; GFX900-NEXT: s_mov_b32 s11, s17
+; GFX900-NEXT: s_mov_b32 s12, s16
+; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_1_4_4:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__2_5_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ; def s[12:17]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s12, s6
-; GFX90A-NEXT: s_mov_b32 s13, s7
-; GFX90A-NEXT: s_mov_b32 s14, s6
-; GFX90A-NEXT: s_mov_b32 s15, s7
+; GFX90A-NEXT: s_mov_b32 s10, s16
+; GFX90A-NEXT: s_mov_b32 s11, s17
+; GFX90A-NEXT: s_mov_b32 s12, s16
+; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_1_4_4:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__2_5_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
-; GFX942-NEXT: s_mov_b32 s14, s6
-; GFX942-NEXT: s_mov_b32 s15, s7
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 1, i32 4, i32 4>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 2, i32 5, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_2_4_4() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_2_4_4:
+define void @s_shuffle_v4i64_v3i64__3_5_5_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__3_5_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:13]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:9]
-; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s10, s12
; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s12, s6
-; GFX900-NEXT: s_mov_b32 s13, s7
-; GFX900-NEXT: s_mov_b32 s14, s6
-; GFX900-NEXT: s_mov_b32 s15, s7
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_2_4_4:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__3_5_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:13]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:9]
-; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s10, s12
; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s6
-; GFX90A-NEXT: s_mov_b32 s13, s7
-; GFX90A-NEXT: s_mov_b32 s14, s6
-; GFX90A-NEXT: s_mov_b32 s15, s7
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_2_4_4:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__3_5_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:9]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
-; GFX942-NEXT: s_mov_b32 s14, s6
-; GFX942-NEXT: s_mov_b32 s15, s7
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 2, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_3_4_4() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_3_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: s_mov_b32 s14, s6
-; GFX9-NEXT: s_mov_b32 s15, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 3, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_5_4_4() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_5_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: s_mov_b32 s14, s6
-; GFX9-NEXT: s_mov_b32 s15, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_5_u_4() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_5_u_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s14, s6
-; GFX9-NEXT: s_mov_b32 s15, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 poison, i32 4>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 3, i32 5, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_5_0_4() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_5_0_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s14, s6
-; GFX9-NEXT: s_mov_b32 s15, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4i64_v3i64__4_5_5_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__4_5_5_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__4_5_5_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__4_5_5_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 0, i32 4>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 4, i32 5, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_5_1_4() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_1_4:
+define void @s_shuffle_v4i64_v3i64__5_u_5_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_u_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:17]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s8
-; GFX900-NEXT: s_mov_b32 s11, s9
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
-; GFX900-NEXT: s_mov_b32 s14, s6
-; GFX900-NEXT: s_mov_b32 s15, s7
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: s_mov_b32 s14, s8
+; GFX900-NEXT: s_mov_b32 s15, s9
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_1_4:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_u_5_5:
; GFX90A: ; %bb.0:
-; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:17]
-; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s8
-; GFX90A-NEXT: s_mov_b32 s11, s9
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
-; GFX90A-NEXT: s_mov_b32 s14, s6
-; GFX90A-NEXT: s_mov_b32 s15, s7
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: s_mov_b32 s14, s8
+; GFX90A-NEXT: s_mov_b32 s15, s9
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_1_4:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_u_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
-; GFX942-NEXT: s_mov_b32 s13, s3
-; GFX942-NEXT: s_mov_b32 s14, s6
-; GFX942-NEXT: s_mov_b32 s15, s7
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 1, i32 4>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 poison, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_5_2_4() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_2_4:
+define void @s_shuffle_v4i64_v3i64__5_0_5_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_0_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ; def s[12:17]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s8
-; GFX900-NEXT: s_mov_b32 s11, s9
-; GFX900-NEXT: s_mov_b32 s14, s6
-; GFX900-NEXT: s_mov_b32 s15, s7
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: s_mov_b32 s14, s8
+; GFX900-NEXT: s_mov_b32 s15, s9
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_2_4:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_0_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ; def s[12:17]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s8
-; GFX90A-NEXT: s_mov_b32 s11, s9
-; GFX90A-NEXT: s_mov_b32 s14, s6
-; GFX90A-NEXT: s_mov_b32 s15, s7
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: s_mov_b32 s14, s8
+; GFX90A-NEXT: s_mov_b32 s15, s9
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_2_4:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_0_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
-; GFX942-NEXT: s_mov_b32 s14, s6
-; GFX942-NEXT: s_mov_b32 s15, s7
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 2, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_5_3_4() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_5_3_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: s_mov_b32 s14, s6
-; GFX9-NEXT: s_mov_b32 s15, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 3, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__u_5_5_5() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__u_5_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 poison, i32 5, i32 5, i32 5>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 0, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__0_5_5_5() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__0_5_5_5:
+define void @s_shuffle_v4i64_v3i64__5_1_5_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_1_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s16
-; GFX900-NEXT: s_mov_b32 s11, s17
-; GFX900-NEXT: s_mov_b32 s12, s16
-; GFX900-NEXT: s_mov_b32 s13, s17
-; GFX900-NEXT: s_mov_b32 s14, s16
-; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: s_mov_b32 s14, s8
+; GFX900-NEXT: s_mov_b32 s15, s9
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__0_5_5_5:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_1_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s16
-; GFX90A-NEXT: s_mov_b32 s11, s17
-; GFX90A-NEXT: s_mov_b32 s12, s16
-; GFX90A-NEXT: s_mov_b32 s13, s17
-; GFX90A-NEXT: s_mov_b32 s14, s16
-; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: s_mov_b32 s14, s8
+; GFX90A-NEXT: s_mov_b32 s15, s9
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__0_5_5_5:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_1_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 0, i32 5, i32 5, i32 5>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 1, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__1_5_5_5() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__1_5_5_5:
+define void @s_shuffle_v4i64_v3i64__5_2_5_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_2_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ; def s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s6
-; GFX900-NEXT: s_mov_b32 s9, s7
; GFX900-NEXT: s_mov_b32 s10, s12
; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: s_mov_b32 s14, s8
+; GFX900-NEXT: s_mov_b32 s15, s9
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__1_5_5_5:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_2_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ; def s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s6
-; GFX90A-NEXT: s_mov_b32 s9, s7
; GFX90A-NEXT: s_mov_b32 s10, s12
; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: s_mov_b32 s14, s8
+; GFX90A-NEXT: s_mov_b32 s15, s9
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__1_5_5_5:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_2_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 1, i32 5, i32 5, i32 5>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 2, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__2_5_5_5() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__2_5_5_5:
+define void @s_shuffle_v4i64_v3i64__5_3_5_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_3_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:17]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s16
-; GFX900-NEXT: s_mov_b32 s11, s17
-; GFX900-NEXT: s_mov_b32 s12, s16
-; GFX900-NEXT: s_mov_b32 s13, s17
-; GFX900-NEXT: s_mov_b32 s14, s16
-; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: s_mov_b32 s14, s8
+; GFX900-NEXT: s_mov_b32 s15, s9
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__2_5_5_5:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_3_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:17]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s16
-; GFX90A-NEXT: s_mov_b32 s11, s17
-; GFX90A-NEXT: s_mov_b32 s12, s16
-; GFX90A-NEXT: s_mov_b32 s13, s17
-; GFX90A-NEXT: s_mov_b32 s14, s16
-; GFX90A-NEXT: s_mov_b32 s15, s17
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; use s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_setpc_b64 s[30:31]
-;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__2_5_5_5:
-; GFX942: ; %bb.0:
-; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:9]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; use s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 2, i32 5, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__3_5_5_5() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__3_5_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 3, i32 5, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__4_5_5_5() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__4_5_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 4, i32 5, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_u_5_5() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_u_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: s_mov_b32 s14, s8
-; GFX9-NEXT: s_mov_b32 s15, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: s_mov_b32 s14, s8
+; GFX90A-NEXT: s_mov_b32 s15, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_3_5_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 poison, i32 5, i32 5>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 3, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_0_5_5() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_0_5_5:
+define void @s_shuffle_v4i64_v3i64__5_4_5_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_4_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:17]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
; GFX900-NEXT: s_mov_b32 s12, s8
; GFX900-NEXT: s_mov_b32 s13, s9
; GFX900-NEXT: s_mov_b32 s14, s8
@@ -11818,17 +14286,14 @@ define void @s_shuffle_v4i64_v3i64__5_0_5_5() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_0_5_5:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_4_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:17]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
; GFX90A-NEXT: s_mov_b32 s12, s8
; GFX90A-NEXT: s_mov_b32 s13, s9
; GFX90A-NEXT: s_mov_b32 s14, s8
@@ -11838,44 +14303,35 @@ define void @s_shuffle_v4i64_v3i64__5_0_5_5() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_0_5_5:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_4_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s8
-; GFX942-NEXT: s_mov_b32 s13, s9
-; GFX942-NEXT: s_mov_b32 s14, s8
-; GFX942-NEXT: s_mov_b32 s15, s9
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 0, i32 5, i32 5>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 4, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_1_5_5() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_1_5_5:
+define void @s_shuffle_v4i64_v3i64__5_5_u_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_u_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:13]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s12, s8
-; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
; GFX900-NEXT: s_mov_b32 s14, s8
; GFX900-NEXT: s_mov_b32 s15, s9
; GFX900-NEXT: ;;#ASMSTART
@@ -11883,17 +14339,14 @@ define void @s_shuffle_v4i64_v3i64__5_1_5_5() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_1_5_5:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_u_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:13]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s12, s8
-; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
; GFX90A-NEXT: s_mov_b32 s14, s8
; GFX90A-NEXT: s_mov_b32 s15, s9
; GFX90A-NEXT: ;;#ASMSTART
@@ -11901,45 +14354,37 @@ define void @s_shuffle_v4i64_v3i64__5_1_5_5() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_1_5_5:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_u_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:13]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s8
-; GFX942-NEXT: s_mov_b32 s13, s9
-; GFX942-NEXT: s_mov_b32 s14, s8
-; GFX942-NEXT: s_mov_b32 s15, s9
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 1, i32 5, i32 5>
+ %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 poison, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v3i64__5_2_5_5() {
-; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_2_5_5:
+define void @s_shuffle_v4i64_v3i64__5_5_0_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_0_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ; def s[12:17]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s12, s8
-; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
; GFX900-NEXT: s_mov_b32 s14, s8
; GFX900-NEXT: s_mov_b32 s15, s9
; GFX900-NEXT: ;;#ASMSTART
@@ -11947,19 +14392,17 @@ define void @s_shuffle_v4i64_v3i64__5_2_5_5() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_2_5_5:
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_0_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ; def s[12:17]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s8
-; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
; GFX90A-NEXT: s_mov_b32 s14, s8
; GFX90A-NEXT: s_mov_b32 s15, s9
; GFX90A-NEXT: ;;#ASMSTART
@@ -11967,120 +14410,21 @@ define void @s_shuffle_v4i64_v3i64__5_2_5_5() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_2_5_5:
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_0_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ; def s[12:17]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s12, s8
-; GFX942-NEXT: s_mov_b32 s13, s9
-; GFX942-NEXT: s_mov_b32 s14, s8
-; GFX942-NEXT: s_mov_b32 s15, s9
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 2, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_3_5_5() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_3_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: s_mov_b32 s14, s8
-; GFX9-NEXT: s_mov_b32 s15, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 3, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_4_5_5() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_4_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: s_mov_b32 s14, s8
-; GFX9-NEXT: s_mov_b32 s15, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 4, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_5_u_5() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_5_u_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s14, s8
-; GFX9-NEXT: s_mov_b32 s15, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x i64> asm "; def $0", "=s"()
- %vec1 = call <3 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 poison, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v3i64__5_5_0_5() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_5_0_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s14, s8
-; GFX9-NEXT: s_mov_b32 s15, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 0, i32 5>
@@ -12135,15 +14479,12 @@ define void @s_shuffle_v4i64_v3i64__5_5_1_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
-; GFX942-NEXT: s_mov_b32 s13, s3
-; GFX942-NEXT: s_mov_b32 s14, s8
-; GFX942-NEXT: s_mov_b32 s15, s9
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -12202,10 +14543,8 @@ define void @s_shuffle_v4i64_v3i64__5_5_2_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
-; GFX942-NEXT: s_mov_b32 s14, s8
-; GFX942-NEXT: s_mov_b32 s15, s9
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -12218,22 +14557,53 @@ define void @s_shuffle_v4i64_v3i64__5_5_2_5() {
}
define void @s_shuffle_v4i64_v3i64__5_5_3_5() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_5_3_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: s_mov_b32 s14, s8
-; GFX9-NEXT: s_mov_b32 s15, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_3_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s8
+; GFX900-NEXT: s_mov_b32 s15, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_3_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s8
+; GFX90A-NEXT: s_mov_b32 s15, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_3_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 3, i32 5>
@@ -12242,22 +14612,53 @@ define void @s_shuffle_v4i64_v3i64__5_5_3_5() {
}
define void @s_shuffle_v4i64_v3i64__5_5_4_5() {
-; GFX9-LABEL: s_shuffle_v4i64_v3i64__5_5_4_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: s_mov_b32 s14, s8
-; GFX9-NEXT: s_mov_b32 s15, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v3i64__5_5_4_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s8
+; GFX900-NEXT: s_mov_b32 s15, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v3i64__5_5_4_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s8
+; GFX90A-NEXT: s_mov_b32 s15, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v3i64__5_5_4_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x i64> asm "; def $0", "=s"()
%vec1 = call <3 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 4, i32 5>
diff --git a/llvm/test/CodeGen/AMDGPU/shufflevector.v4i64.v4i64.ll b/llvm/test/CodeGen/AMDGPU/shufflevector.v4i64.v4i64.ll
index c61ba4704d097..ba535aa589947 100644
--- a/llvm/test/CodeGen/AMDGPU/shufflevector.v4i64.v4i64.ll
+++ b/llvm/test/CodeGen/AMDGPU/shufflevector.v4i64.v4i64.ll
@@ -12922,8 +12922,7 @@ define void @s_shuffle_v4i64_v4i64__1_u_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -13007,8 +13006,7 @@ define void @s_shuffle_v4i64_v4i64__3_u_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -13066,8 +13064,7 @@ define void @s_shuffle_v4i64_v4i64__5_u_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -13153,8 +13150,7 @@ define void @s_shuffle_v4i64_v4i64__7_u_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -13213,10 +13209,8 @@ define void @s_shuffle_v4i64_v4i64__7_0_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -13270,8 +13264,7 @@ define void @s_shuffle_v4i64_v4i64__7_1_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -13329,10 +13322,8 @@ define void @s_shuffle_v4i64_v4i64__7_2_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -13387,8 +13378,7 @@ define void @s_shuffle_v4i64_v4i64__7_3_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -13437,10 +13427,8 @@ define void @s_shuffle_v4i64_v4i64__7_4_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -13453,18 +13441,43 @@ define void @s_shuffle_v4i64_v4i64__7_4_u_u() {
}
define void @s_shuffle_v4i64_v4i64__7_5_u_u() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_5_u_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_5_u_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_5_u_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_5_u_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 5, i32 poison, i32 poison>
@@ -13509,10 +13522,8 @@ define void @s_shuffle_v4i64_v4i64__7_6_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -13525,18 +13536,43 @@ define void @s_shuffle_v4i64_v4i64__7_6_u_u() {
}
define void @s_shuffle_v4i64_v4i64__7_7_u_u() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_u_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_u_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_u_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_u_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 poison, i32 poison>
@@ -13545,21 +13581,52 @@ define void @s_shuffle_v4i64_v4i64__7_7_u_u() {
}
define void @s_shuffle_v4i64_v4i64__7_7_0_u() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_0_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_0_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_0_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_0_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 0, i32 poison>
@@ -13610,13 +13677,11 @@ define void @s_shuffle_v4i64_v4i64__7_7_1_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -13671,8 +13736,7 @@ define void @s_shuffle_v4i64_v4i64__7_7_2_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -13727,13 +13791,11 @@ define void @s_shuffle_v4i64_v4i64__7_7_3_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s14
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -13746,20 +13808,48 @@ define void @s_shuffle_v4i64_v4i64__7_7_3_u() {
}
define void @s_shuffle_v4i64_v4i64__7_7_4_u() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_4_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_4_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_4_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_4_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 4, i32 poison>
@@ -13768,313 +13858,292 @@ define void @s_shuffle_v4i64_v4i64__7_7_4_u() {
}
define void @s_shuffle_v4i64_v4i64__7_7_5_u() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_5_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 5, i32 poison>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_7_6_u() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_6_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 6, i32 poison>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_7_7_u() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_7_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 poison>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_7_7_0() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_7_0:
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_5_u:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
-; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
-; GFX900-NEXT: s_mov_b32 s14, s16
-; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_7_0:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_5_u:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
-; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
-; GFX90A-NEXT: s_mov_b32 s14, s16
-; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_7_0:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_5_u:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s0
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 0>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 5, i32 poison>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_7_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_7_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4i64_v4i64__7_7_6_u() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_6_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_6_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_6_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 1>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 6, i32 poison>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_7_2() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_7_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s16
-; GFX9-NEXT: s_mov_b32 s15, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4i64_v4i64__7_7_7_u() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_7_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_7_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_7_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 2>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 poison>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_7_3() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_7_3:
+define void @s_shuffle_v4i64_v4i64__7_7_7_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_7_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[16:23]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
; GFX900-NEXT: s_mov_b32 s12, s10
; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_7_3:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_7_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[16:23]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
; GFX90A-NEXT: s_mov_b32 s12, s10
; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_7_3:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_7_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_7_7_4() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_7_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s4
-; GFX9-NEXT: s_mov_b32 s15, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 4>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_7_5() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_7_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s6
-; GFX9-NEXT: s_mov_b32 s15, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4i64_v4i64__7_7_7_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_7_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_7_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_7_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 5>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 1>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_7_6() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_7_6:
+define void @s_shuffle_v4i64_v4i64__7_7_7_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_7_2:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s18
-; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s10, s18
-; GFX900-NEXT: s_mov_b32 s11, s19
-; GFX900-NEXT: s_mov_b32 s12, s18
-; GFX900-NEXT: s_mov_b32 s13, s19
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
; GFX900-NEXT: s_mov_b32 s14, s16
; GFX900-NEXT: s_mov_b32 s15, s17
; GFX900-NEXT: ;;#ASMSTART
@@ -14082,18 +14151,19 @@ define void @s_shuffle_v4i64_v4i64__7_7_7_6() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_7_6:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_7_2:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s18
-; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s10, s18
-; GFX90A-NEXT: s_mov_b32 s11, s19
-; GFX90A-NEXT: s_mov_b32 s12, s18
-; GFX90A-NEXT: s_mov_b32 s13, s19
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
; GFX90A-NEXT: s_mov_b32 s14, s16
; GFX90A-NEXT: s_mov_b32 s15, s17
; GFX90A-NEXT: ;;#ASMSTART
@@ -14101,584 +14171,323 @@ define void @s_shuffle_v4i64_v4i64__7_7_7_6() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_7_6:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_7_2:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s6
-; GFX942-NEXT: s_mov_b32 s11, s7
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 6>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_7_7_7() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_7_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 7>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 2>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__u_0_0_0() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__u_0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 poison, i32 0, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__0_0_0_0() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__0_0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: s_mov_b32 s14, s8
-; GFX9-NEXT: s_mov_b32 s15, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> zeroinitializer
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__1_0_0_0() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__1_0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__2_0_0_0() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__2_0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: s_mov_b32 s14, s4
-; GFX9-NEXT: s_mov_b32 s15, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 2, i32 0, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__3_0_0_0() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__3_0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 3, i32 0, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__4_0_0_0() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__4_0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 4, i32 0, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__5_0_0_0() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__5_0_0_0:
+define void @s_shuffle_v4i64_v4i64__7_7_7_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_7_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s6
-; GFX900-NEXT: s_mov_b32 s9, s7
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__5_0_0_0:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_7_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s6
-; GFX90A-NEXT: s_mov_b32 s9, s7
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__5_0_0_0:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_7_3:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 5, i32 0, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__6_0_0_0() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__6_0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 6, i32 0, i32 0, i32 0>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_0_0_0() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_0_0_0:
+define void @s_shuffle_v4i64_v4i64__7_7_7_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_7_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_0_0_0:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_7_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_0_0_0:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_7_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:19]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 0, i32 0, i32 0>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_u_0_0() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_u_0_0:
+define void @s_shuffle_v4i64_v4i64__7_7_7_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_7_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_u_0_0:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_7_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_u_0_0:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_7_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:19]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 poison, i32 0, i32 0>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_1_0_0() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_1_0_0:
+define void @s_shuffle_v4i64_v4i64__7_7_7_6() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_7_6:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s14
-; GFX900-NEXT: s_mov_b32 s11, s15
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s18
+; GFX900-NEXT: s_mov_b32 s11, s19
+; GFX900-NEXT: s_mov_b32 s12, s18
+; GFX900-NEXT: s_mov_b32 s13, s19
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_1_0_0:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_7_6:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s14
-; GFX90A-NEXT: s_mov_b32 s11, s15
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s18
+; GFX90A-NEXT: s_mov_b32 s11, s19
+; GFX90A-NEXT: s_mov_b32 s12, s18
+; GFX90A-NEXT: s_mov_b32 s13, s19
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_1_0_0:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_7_6:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:19]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 1, i32 0, i32 0>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 6>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_2_0_0() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_2_0_0:
+define void @s_shuffle_v4i64_v4i64__7_7_7_7() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_7_7:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s16
-; GFX900-NEXT: s_mov_b32 s11, s17
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_2_0_0:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_7_7:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s16
-; GFX90A-NEXT: s_mov_b32 s11, s17
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_2_0_0:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_7_7:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:19]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s16
-; GFX942-NEXT: s_mov_b32 s11, s17
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 2, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_3_0_0() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_3_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: s_mov_b32 s14, s4
-; GFX9-NEXT: s_mov_b32 s15, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 3, i32 0, i32 0>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 7>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_4_0_0() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_4_0_0:
+define void @s_shuffle_v4i64_v4i64__u_0_0_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__u_0_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s4
-; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: s_mov_b32 s14, s12
; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
@@ -14686,19 +14495,14 @@ define void @s_shuffle_v4i64_v4i64__7_4_0_0() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_4_0_0:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__u_0_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s4
-; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: s_mov_b32 s14, s12
; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
@@ -14706,113 +14510,89 @@ define void @s_shuffle_v4i64_v4i64__7_4_0_0() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_4_0_0:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__u_0_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 4, i32 0, i32 0>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 poison, i32 0, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_5_0_0() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_5_0_0:
+define void @s_shuffle_v4i64_v4i64__0_0_0_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__0_0_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s12, s4
-; GFX900-NEXT: s_mov_b32 s13, s5
-; GFX900-NEXT: s_mov_b32 s14, s4
-; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: s_mov_b32 s14, s8
+; GFX900-NEXT: s_mov_b32 s15, s9
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_5_0_0:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__0_0_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s14
-; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s12, s4
-; GFX90A-NEXT: s_mov_b32 s13, s5
-; GFX90A-NEXT: s_mov_b32 s14, s4
-; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: s_mov_b32 s14, s8
+; GFX90A-NEXT: s_mov_b32 s15, s9
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_5_0_0:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__0_0_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s12, s0
-; GFX942-NEXT: s_mov_b32 s13, s1
-; GFX942-NEXT: s_mov_b32 s14, s0
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 5, i32 0, i32 0>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> zeroinitializer
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_6_0_0() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_6_0_0:
+define void @s_shuffle_v4i64_v4i64__1_0_0_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__1_0_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s22
-; GFX900-NEXT: s_mov_b32 s9, s23
-; GFX900-NEXT: s_mov_b32 s10, s20
-; GFX900-NEXT: s_mov_b32 s11, s21
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: s_mov_b32 s14, s12
; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
@@ -14820,19 +14600,16 @@ define void @s_shuffle_v4i64_v4i64__7_6_0_0() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_6_0_0:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__1_0_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s22
-; GFX90A-NEXT: s_mov_b32 s9, s23
-; GFX90A-NEXT: s_mov_b32 s10, s20
-; GFX90A-NEXT: s_mov_b32 s11, s21
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: s_mov_b32 s14, s12
; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
@@ -14840,794 +14617,622 @@ define void @s_shuffle_v4i64_v4i64__7_6_0_0() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_6_0_0:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__1_0_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 6, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_7_0_0() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 0, i32 0>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_u_0() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_u_0:
+define void @s_shuffle_v4i64_v4i64__2_0_0_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__2_0_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_u_0:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__2_0_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_u_0:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__2_0_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s0
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 poison, i32 0>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 2, i32 0, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_1_0() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_1_0:
+define void @s_shuffle_v4i64_v4i64__3_0_0_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__3_0_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s12, s18
-; GFX900-NEXT: s_mov_b32 s13, s19
-; GFX900-NEXT: s_mov_b32 s14, s16
-; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_1_0:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__3_0_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s12, s18
-; GFX90A-NEXT: s_mov_b32 s13, s19
-; GFX90A-NEXT: s_mov_b32 s14, s16
-; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_1_0:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__3_0_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s13, s3
-; GFX942-NEXT: s_mov_b32 s14, s0
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 1, i32 0>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 3, i32 0, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_2_0() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_2_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[16:23]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s20
-; GFX9-NEXT: s_mov_b32 s13, s21
-; GFX9-NEXT: s_mov_b32 s14, s16
-; GFX9-NEXT: s_mov_b32 s15, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 2, i32 0>
+define void @s_shuffle_v4i64_v4i64__4_0_0_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__4_0_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__4_0_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__4_0_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 4, i32 0, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_3_0() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_3_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[16:23]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s22
-; GFX9-NEXT: s_mov_b32 s13, s23
-; GFX9-NEXT: s_mov_b32 s14, s16
-; GFX9-NEXT: s_mov_b32 s15, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4i64_v4i64__5_0_0_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__5_0_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__5_0_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__5_0_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 3, i32 0>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 5, i32 0, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_4_0() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_4_0:
+define void @s_shuffle_v4i64_v4i64__6_0_0_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__6_0_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s12, s4
-; GFX900-NEXT: s_mov_b32 s13, s5
-; GFX900-NEXT: s_mov_b32 s14, s16
-; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_4_0:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__6_0_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s12, s4
-; GFX90A-NEXT: s_mov_b32 s13, s5
-; GFX90A-NEXT: s_mov_b32 s14, s16
-; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_4_0:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__6_0_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s0
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 4, i32 0>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 6, i32 0, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_5_0() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_5_0:
+define void @s_shuffle_v4i64_v4i64__7_0_0_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_0_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s12, s6
-; GFX900-NEXT: s_mov_b32 s13, s7
-; GFX900-NEXT: s_mov_b32 s14, s16
-; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_5_0:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_0_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s12, s6
-; GFX90A-NEXT: s_mov_b32 s13, s7
-; GFX90A-NEXT: s_mov_b32 s14, s16
-; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_5_0:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_0_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s0
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 5, i32 0>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 0, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_6_0() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_6_0:
+define void @s_shuffle_v4i64_v4i64__7_u_0_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_u_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s10, s14
-; GFX900-NEXT: s_mov_b32 s11, s15
-; GFX900-NEXT: s_mov_b32 s14, s4
-; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_6_0:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_u_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s14
-; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s10, s14
-; GFX90A-NEXT: s_mov_b32 s11, s15
-; GFX90A-NEXT: s_mov_b32 s14, s4
-; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_6_0:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_u_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
-; GFX942-NEXT: s_mov_b32 s14, s0
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 6, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__u_1_1_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__u_1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 poison, i32 1, i32 1, i32 1>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__0_1_1_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__0_1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 0, i32 1, i32 1, i32 1>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 poison, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__1_1_1_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__1_1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__2_1_1_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__2_1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: s_mov_b32 s14, s6
-; GFX9-NEXT: s_mov_b32 s15, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 2, i32 1, i32 1, i32 1>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__3_1_1_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__3_1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 3, i32 1, i32 1, i32 1>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__4_1_1_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__4_1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 4, i32 1, i32 1, i32 1>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__5_1_1_1() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__5_1_1_1:
+define void @s_shuffle_v4i64_v4i64__7_1_0_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_1_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
-; GFX900-NEXT: s_mov_b32 s14, s10
-; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__5_1_1_1:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_1_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s14
-; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
-; GFX90A-NEXT: s_mov_b32 s14, s10
-; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__5_1_1_1:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_1_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 5, i32 1, i32 1, i32 1>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__6_1_1_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__6_1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 6, i32 1, i32 1, i32 1>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 1, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_1_1_1() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_1_1_1:
+define void @s_shuffle_v4i64_v4i64__7_2_0_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_2_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s18
-; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
-; GFX900-NEXT: s_mov_b32 s14, s10
-; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s16
+; GFX900-NEXT: s_mov_b32 s11, s17
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_1_1_1:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_2_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s18
-; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
-; GFX90A-NEXT: s_mov_b32 s14, s10
-; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s16
+; GFX90A-NEXT: s_mov_b32 s11, s17
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_1_1_1:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_2_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[16:17]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 1, i32 1, i32 1>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 2, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_u_1_1() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_u_1_1:
+define void @s_shuffle_v4i64_v4i64__7_3_0_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_3_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_u_1_1:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_3_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_u_1_1:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_3_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 poison, i32 1, i32 1>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 3, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_0_1_1() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_0_1_1:
+define void @s_shuffle_v4i64_v4i64__7_4_0_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_4_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
@@ -15638,16 +15243,16 @@ define void @s_shuffle_v4i64_v4i64__7_0_1_1() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_0_1_1:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_4_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
@@ -15658,16 +15263,16 @@ define void @s_shuffle_v4i64_v4i64__7_0_1_1() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_0_1_1:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_4_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
@@ -15676,119 +15281,150 @@ define void @s_shuffle_v4i64_v4i64__7_0_1_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 0, i32 1, i32 1>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 4, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_2_1_1() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_2_1_1:
+define void @s_shuffle_v4i64_v4i64__7_5_0_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_5_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s16
-; GFX900-NEXT: s_mov_b32 s11, s17
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_2_1_1:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_5_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s16
-; GFX90A-NEXT: s_mov_b32 s11, s17
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_2_1_1:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_5_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s16
-; GFX942-NEXT: s_mov_b32 s11, s17
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 2, i32 1, i32 1>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 5, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_3_1_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_3_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: s_mov_b32 s14, s6
-; GFX9-NEXT: s_mov_b32 s15, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4i64_v4i64__7_6_0_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_6_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s22
+; GFX900-NEXT: s_mov_b32 s9, s23
+; GFX900-NEXT: s_mov_b32 s10, s20
+; GFX900-NEXT: s_mov_b32 s11, s21
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_6_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s22
+; GFX90A-NEXT: s_mov_b32 s9, s23
+; GFX90A-NEXT: s_mov_b32 s10, s20
+; GFX90A-NEXT: s_mov_b32 s11, s21
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_6_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 3, i32 1, i32 1>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 6, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_4_1_1() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_4_1_1:
+define void @s_shuffle_v4i64_v4i64__7_7_0_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
@@ -15799,16 +15435,14 @@ define void @s_shuffle_v4i64_v4i64__7_4_1_1() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s4
-; GFX900-NEXT: s_mov_b32 s11, s5
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_4_1_1:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
@@ -15819,353 +15453,4673 @@ define void @s_shuffle_v4i64_v4i64__7_4_1_1() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s4
-; GFX90A-NEXT: s_mov_b32 s11, s5
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_4_1_1:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 4, i32 1, i32 1>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_5_1_1() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_5_1_1:
+define void @s_shuffle_v4i64_v4i64__7_7_u_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_u_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s12, s6
-; GFX900-NEXT: s_mov_b32 s13, s7
-; GFX900-NEXT: s_mov_b32 s14, s6
-; GFX900-NEXT: s_mov_b32 s15, s7
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_5_1_1:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_u_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s14
-; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s12, s6
-; GFX90A-NEXT: s_mov_b32 s13, s7
-; GFX90A-NEXT: s_mov_b32 s14, s6
-; GFX90A-NEXT: s_mov_b32 s15, s7
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_5_1_1:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_u_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
-; GFX942-NEXT: s_mov_b32 s14, s2
-; GFX942-NEXT: s_mov_b32 s15, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 5, i32 1, i32 1>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 poison, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_6_1_1() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_6_1_1:
+define void @s_shuffle_v4i64_v4i64__7_7_1_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_1_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[16:23]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s22
-; GFX900-NEXT: s_mov_b32 s9, s23
-; GFX900-NEXT: s_mov_b32 s10, s20
-; GFX900-NEXT: s_mov_b32 s11, s21
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s18
+; GFX900-NEXT: s_mov_b32 s13, s19
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_6_1_1:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_1_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[16:23]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s22
-; GFX90A-NEXT: s_mov_b32 s9, s23
-; GFX90A-NEXT: s_mov_b32 s10, s20
-; GFX90A-NEXT: s_mov_b32 s11, s21
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s18
+; GFX90A-NEXT: s_mov_b32 s13, s19
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_6_1_1:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_1_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 6, i32 1, i32 1>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 1, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_1_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4i64_v4i64__7_7_2_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_2_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s20
+; GFX900-NEXT: s_mov_b32 s13, s21
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_2_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s20
+; GFX90A-NEXT: s_mov_b32 s13, s21
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_2_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[16:23]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[20:21]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 1, i32 1>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 2, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_u_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_u_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4i64_v4i64__7_7_3_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_3_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s22
+; GFX900-NEXT: s_mov_b32 s13, s23
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_3_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s22
+; GFX90A-NEXT: s_mov_b32 s13, s23
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_3_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[16:23]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[22:23]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 3, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_7_4_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_4_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_4_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_4_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 4, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_7_5_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_5_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_5_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_5_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 5, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_7_6_0() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_6_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_6_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_6_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 6, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__u_1_1_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__u_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__u_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__u_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 poison, i32 1, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__0_1_1_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__0_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__0_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__0_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 0, i32 1, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__1_1_1_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__1_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__1_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__1_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__2_1_1_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__2_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__2_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__2_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 2, i32 1, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__3_1_1_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__3_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__3_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__3_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 3, i32 1, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__4_1_1_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__4_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__4_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__4_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 4, i32 1, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__5_1_1_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__5_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__5_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__5_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 5, i32 1, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__6_1_1_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__6_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__6_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__6_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 6, i32 1, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_1_1_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 1, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_u_1_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_u_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_u_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_u_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 poison, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_0_1_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_0_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_0_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_0_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 0, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_2_1_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_2_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s16
+; GFX900-NEXT: s_mov_b32 s11, s17
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_2_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s16
+; GFX90A-NEXT: s_mov_b32 s11, s17
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_2_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[16:17]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 2, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_3_1_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_3_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_3_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_3_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 3, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_4_1_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_4_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_4_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_4_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 4, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_5_1_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_5_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_5_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_5_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[2:3]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 5, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_6_1_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_6_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s22
+; GFX900-NEXT: s_mov_b32 s9, s23
+; GFX900-NEXT: s_mov_b32 s10, s20
+; GFX900-NEXT: s_mov_b32 s11, s21
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_6_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s22
+; GFX90A-NEXT: s_mov_b32 s9, s23
+; GFX90A-NEXT: s_mov_b32 s10, s20
+; GFX90A-NEXT: s_mov_b32 s11, s21
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_6_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 6, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_7_1_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_7_u_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_u_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_u_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_u_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 poison, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_7_0_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_0_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_0_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_0_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 0, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_7_2_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_2_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s16
+; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_2_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s16
+; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_2_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 2, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_7_3_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_3_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s18
+; GFX900-NEXT: s_mov_b32 s13, s19
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_3_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s18
+; GFX90A-NEXT: s_mov_b32 s13, s19
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_3_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[18:19]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 3, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_7_4_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_4_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_4_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_4_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 4, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_7_5_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_5_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_5_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_5_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 5, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_7_6_1() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_6_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_6_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_6_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[2:3]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 6, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__u_2_2_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__u_2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__u_2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__u_2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 poison, i32 2, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__0_2_2_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__0_2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__0_2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__0_2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 0, i32 2, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__1_2_2_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__1_2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__1_2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__1_2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 1, i32 2, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__2_2_2_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__2_2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: s_mov_b32 s14, s8
+; GFX900-NEXT: s_mov_b32 s15, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__2_2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: s_mov_b32 s14, s8
+; GFX90A-NEXT: s_mov_b32 s15, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__2_2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 2, i32 2, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__3_2_2_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__3_2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__3_2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__3_2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 3, i32 2, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__4_2_2_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__4_2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__4_2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__4_2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 4, i32 2, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__5_2_2_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__5_2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__5_2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__5_2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 5, i32 2, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__6_2_2_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__6_2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__6_2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__6_2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 6, i32 2, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_2_2_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 2, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_u_2_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_u_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_u_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_u_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 poison, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_0_2_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_0_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s16
+; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_0_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s16
+; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_0_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 0, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_1_2_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_1_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s22
+; GFX900-NEXT: s_mov_b32 s9, s23
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_1_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s22
+; GFX90A-NEXT: s_mov_b32 s9, s23
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_1_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 1, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_3_2_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_3_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_3_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_3_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 3, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_4_2_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_4_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_4_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_4_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 4, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_5_2_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_5_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s16
+; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_5_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s16
+; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_5_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 5, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_6_2_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_6_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s22
+; GFX900-NEXT: s_mov_b32 s9, s23
+; GFX900-NEXT: s_mov_b32 s10, s20
+; GFX900-NEXT: s_mov_b32 s11, s21
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_6_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s22
+; GFX90A-NEXT: s_mov_b32 s9, s23
+; GFX90A-NEXT: s_mov_b32 s10, s20
+; GFX90A-NEXT: s_mov_b32 s11, s21
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_6_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 6, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_7_2_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_7_u_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_u_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_u_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_u_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 poison, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_7_0_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_0_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_0_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_0_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 0, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_7_1_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_1_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_1_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_1_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 1, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_7_3_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_3_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s18
+; GFX900-NEXT: s_mov_b32 s13, s19
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_3_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s18
+; GFX90A-NEXT: s_mov_b32 s13, s19
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_3_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 3, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_7_4_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_4_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_4_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_4_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 4, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_7_5_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_5_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_5_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_5_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 5, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_7_6_2() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_6_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_6_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_6_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 6, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__u_3_3_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__u_3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__u_3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__u_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 poison, i32 3, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__0_3_3_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__0_3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__0_3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__0_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 0, i32 3, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__1_3_3_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__1_3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__1_3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__1_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 1, i32 3, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__2_3_3_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__2_3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__2_3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__2_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 2, i32 3, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__3_3_3_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__3_3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__3_3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__3_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 3, i32 3, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__4_3_3_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__4_3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__4_3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__4_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 4, i32 3, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__5_3_3_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__5_3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__5_3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__5_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 5, i32 3, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__6_3_3_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__6_3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__6_3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__6_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 6, i32 3, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_3_3_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 3, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_u_3_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_u_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_u_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_u_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 poison, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_0_3_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_0_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s18
+; GFX900-NEXT: s_mov_b32 s13, s19
+; GFX900-NEXT: s_mov_b32 s14, s18
+; GFX900-NEXT: s_mov_b32 s15, s19
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_0_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s18
+; GFX90A-NEXT: s_mov_b32 s13, s19
+; GFX90A-NEXT: s_mov_b32 s14, s18
+; GFX90A-NEXT: s_mov_b32 s15, s19
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_0_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 0, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_1_3_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_1_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s22
+; GFX900-NEXT: s_mov_b32 s9, s23
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_1_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s22
+; GFX90A-NEXT: s_mov_b32 s9, s23
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_1_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 1, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_2_3_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_2_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_2_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_2_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 2, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_4_3_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_4_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_4_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_4_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 4, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_5_3_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_5_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s18
+; GFX900-NEXT: s_mov_b32 s13, s19
+; GFX900-NEXT: s_mov_b32 s14, s18
+; GFX900-NEXT: s_mov_b32 s15, s19
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_5_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s18
+; GFX90A-NEXT: s_mov_b32 s13, s19
+; GFX90A-NEXT: s_mov_b32 s14, s18
+; GFX90A-NEXT: s_mov_b32 s15, s19
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_5_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 5, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_6_3_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_6_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s22
+; GFX900-NEXT: s_mov_b32 s9, s23
+; GFX900-NEXT: s_mov_b32 s10, s20
+; GFX900-NEXT: s_mov_b32 s11, s21
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_6_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s22
+; GFX90A-NEXT: s_mov_b32 s9, s23
+; GFX90A-NEXT: s_mov_b32 s10, s20
+; GFX90A-NEXT: s_mov_b32 s11, s21
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_6_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 6, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_7_3_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 poison, i32 1>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 3, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_0_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_0_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4i64_v4i64__7_7_u_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_u_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_u_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_u_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 0, i32 1>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 poison, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_2_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_2_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s16
-; GFX9-NEXT: s_mov_b32 s13, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4i64_v4i64__7_7_0_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_0_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s14, s18
+; GFX900-NEXT: s_mov_b32 s15, s19
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_0_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s14, s18
+; GFX90A-NEXT: s_mov_b32 s15, s19
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_0_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[18:19]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 2, i32 1>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 0, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_3_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_3_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s18
-; GFX9-NEXT: s_mov_b32 s13, s19
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4i64_v4i64__7_7_1_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_1_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s14, s18
+; GFX900-NEXT: s_mov_b32 s15, s19
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_1_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s14, s18
+; GFX90A-NEXT: s_mov_b32 s15, s19
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_1_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[18:19]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 3, i32 1>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 1, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_4_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_4_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4i64_v4i64__7_7_2_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_2_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_2_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_2_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 4, i32 1>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 2, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_5_1() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_5_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4i64_v4i64__7_7_4_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_4_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_4_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_4_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 5, i32 1>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 4, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_6_1() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_6_1:
+define void @s_shuffle_v4i64_v4i64__7_7_5_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_5_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_5_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_5_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 5, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_7_6_3() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_6_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
@@ -16173,18 +20127,18 @@ define void @s_shuffle_v4i64_v4i64__7_7_6_1() {
; GFX900-NEXT: s_mov_b32 s9, s15
; GFX900-NEXT: s_mov_b32 s10, s14
; GFX900-NEXT: s_mov_b32 s11, s15
-; GFX900-NEXT: s_mov_b32 s14, s6
-; GFX900-NEXT: s_mov_b32 s15, s7
+; GFX900-NEXT: s_mov_b32 s14, s18
+; GFX900-NEXT: s_mov_b32 s15, s19
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_6_1:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_6_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
@@ -16193,14 +20147,14 @@ define void @s_shuffle_v4i64_v4i64__7_7_6_1() {
; GFX90A-NEXT: s_mov_b32 s9, s15
; GFX90A-NEXT: s_mov_b32 s10, s14
; GFX90A-NEXT: s_mov_b32 s11, s15
-; GFX90A-NEXT: s_mov_b32 s14, s6
-; GFX90A-NEXT: s_mov_b32 s15, s7
+; GFX90A-NEXT: s_mov_b32 s14, s18
+; GFX90A-NEXT: s_mov_b32 s15, s19
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_6_1:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_6_3:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
@@ -16209,559 +20163,337 @@ define void @s_shuffle_v4i64_v4i64__7_7_6_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
-; GFX942-NEXT: s_mov_b32 s14, s2
-; GFX942-NEXT: s_mov_b32 s15, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 6, i32 1>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__u_2_2_2() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__u_2_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 poison, i32 2, i32 2, i32 2>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__0_2_2_2() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__0_2_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 0, i32 2, i32 2, i32 2>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__1_2_2_2() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__1_2_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 1, i32 2, i32 2, i32 2>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__2_2_2_2() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__2_2_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: s_mov_b32 s14, s8
-; GFX9-NEXT: s_mov_b32 s15, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 2, i32 2, i32 2, i32 2>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__3_2_2_2() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__3_2_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 3, i32 2, i32 2, i32 2>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 6, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__4_2_2_2() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__4_2_2_2:
+define void @s_shuffle_v4i64_v4i64__u_4_4_4() {
+; GFX9-LABEL: s_shuffle_v4i64_v4i64__u_4_4_4:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
; GFX9-NEXT: ; use s[8:15]
; GFX9-NEXT: ;;#ASMEND
; GFX9-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 4, i32 2, i32 2, i32 2>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 poison, i32 4, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__5_2_2_2() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__5_2_2_2:
+define void @s_shuffle_v4i64_v4i64__0_4_4_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__0_4_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s6
-; GFX900-NEXT: s_mov_b32 s9, s7
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__5_2_2_2:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__0_4_4_4:
; GFX90A: ; %bb.0:
-; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s6
-; GFX90A-NEXT: s_mov_b32 s9, s7
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__5_2_2_2:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__0_4_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 5, i32 2, i32 2, i32 2>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 0, i32 4, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__6_2_2_2() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__6_2_2_2:
+define void @s_shuffle_v4i64_v4i64__1_4_4_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__1_4_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__6_2_2_2:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__1_4_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__6_2_2_2:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__1_4_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 6, i32 2, i32 2, i32 2>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 1, i32 4, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_2_2_2() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_2_2_2:
+define void @s_shuffle_v4i64_v4i64__2_4_4_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__2_4_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_2_2_2:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__2_4_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_2_2_2:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__2_4_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 2, i32 2, i32 2>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 2, i32 4, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_u_2_2() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_u_2_2:
+define void @s_shuffle_v4i64_v4i64__3_4_4_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__3_4_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_u_2_2:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__3_4_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_u_2_2:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__3_4_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 poison, i32 2, i32 2>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 3, i32 4, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_0_2_2() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_0_2_2:
+define void @s_shuffle_v4i64_v4i64__4_4_4_4() {
+; GFX9-LABEL: s_shuffle_v4i64_v4i64__4_4_4_4:
+; GFX9: ; %bb.0:
+; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX9-NEXT: ;;#ASMSTART
+; GFX9-NEXT: ; use s[8:15]
+; GFX9-NEXT: ;;#ASMEND
+; GFX9-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 4, i32 4, i32 4, i32 4>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__5_4_4_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__5_4_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
; GFX900-NEXT: s_mov_b32 s10, s12
; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s12, s16
-; GFX900-NEXT: s_mov_b32 s13, s17
-; GFX900-NEXT: s_mov_b32 s14, s16
-; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_0_2_2:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__5_4_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
; GFX90A-NEXT: s_mov_b32 s10, s12
; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s16
-; GFX90A-NEXT: s_mov_b32 s13, s17
-; GFX90A-NEXT: s_mov_b32 s14, s16
-; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_0_2_2:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__5_4_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 0, i32 2, i32 2>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 5, i32 4, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_1_2_2() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_1_2_2:
+define void @s_shuffle_v4i64_v4i64__6_4_4_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__6_4_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s22
-; GFX900-NEXT: s_mov_b32 s9, s23
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_1_2_2:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__6_4_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s22
-; GFX90A-NEXT: s_mov_b32 s9, s23
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_1_2_2:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__6_4_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 1, i32 2, i32 2>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 6, i32 4, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_3_2_2() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_3_2_2:
+define void @s_shuffle_v4i64_v4i64__7_4_4_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_4_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s14
-; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: s_mov_b32 s14, s12
; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
@@ -16769,19 +20501,16 @@ define void @s_shuffle_v4i64_v4i64__7_3_2_2() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_3_2_2:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_4_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s14
-; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: s_mov_b32 s14, s12
; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
@@ -16789,46 +20518,35 @@ define void @s_shuffle_v4i64_v4i64__7_3_2_2() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_3_2_2:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_4_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 3, i32 2, i32 2>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 4, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_4_2_2() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_4_2_2:
+define void @s_shuffle_v4i64_v4i64__7_u_4_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_u_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s4
-; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
; GFX900-NEXT: s_mov_b32 s14, s12
; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
@@ -16836,19 +20554,14 @@ define void @s_shuffle_v4i64_v4i64__7_4_2_2() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_4_2_2:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_u_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s4
-; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
; GFX90A-NEXT: s_mov_b32 s14, s12
; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
@@ -16856,113 +20569,101 @@ define void @s_shuffle_v4i64_v4i64__7_4_2_2() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_4_2_2:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_u_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 4, i32 2, i32 2>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 poison, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_5_2_2() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_5_2_2:
+define void @s_shuffle_v4i64_v4i64__7_0_4_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_0_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s12, s16
-; GFX900-NEXT: s_mov_b32 s13, s17
-; GFX900-NEXT: s_mov_b32 s14, s16
-; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_5_2_2:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_0_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s14
-; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s12, s16
-; GFX90A-NEXT: s_mov_b32 s13, s17
-; GFX90A-NEXT: s_mov_b32 s14, s16
-; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_5_2_2:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_0_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 5, i32 2, i32 2>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 0, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_6_2_2() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_6_2_2:
+define void @s_shuffle_v4i64_v4i64__7_1_4_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_1_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s22
-; GFX900-NEXT: s_mov_b32 s9, s23
-; GFX900-NEXT: s_mov_b32 s10, s20
-; GFX900-NEXT: s_mov_b32 s11, s21
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
; GFX900-NEXT: s_mov_b32 s14, s12
; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
@@ -16970,19 +20671,17 @@ define void @s_shuffle_v4i64_v4i64__7_6_2_2() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_6_2_2:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_1_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s22
-; GFX90A-NEXT: s_mov_b32 s9, s23
-; GFX90A-NEXT: s_mov_b32 s10, s20
-; GFX90A-NEXT: s_mov_b32 s11, s21
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
; GFX90A-NEXT: s_mov_b32 s14, s12
; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
@@ -16990,44 +20689,43 @@ define void @s_shuffle_v4i64_v4i64__7_6_2_2() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_6_2_2:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_1_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 6, i32 2, i32 2>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 1, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_2_2() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_2_2:
+define void @s_shuffle_v4i64_v4i64__7_2_4_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_2_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[16:23]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s20
+; GFX900-NEXT: s_mov_b32 s11, s21
; GFX900-NEXT: s_mov_b32 s14, s12
; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
@@ -17035,17 +20733,19 @@ define void @s_shuffle_v4i64_v4i64__7_7_2_2() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_2_2:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_2_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[16:23]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s20
+; GFX90A-NEXT: s_mov_b32 s11, s21
; GFX90A-NEXT: s_mov_b32 s14, s12
; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
@@ -17053,42 +20753,41 @@ define void @s_shuffle_v4i64_v4i64__7_7_2_2() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_2_2:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_2_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s12
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 2, i32 2>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 2, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_u_2() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_u_2:
+define void @s_shuffle_v4i64_v4i64__7_3_4_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_3_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
; GFX900-NEXT: s_mov_b32 s14, s12
; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
@@ -17096,17 +20795,17 @@ define void @s_shuffle_v4i64_v4i64__7_7_u_2() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_u_2:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_3_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
; GFX90A-NEXT: s_mov_b32 s14, s12
; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
@@ -17114,561 +20813,308 @@ define void @s_shuffle_v4i64_v4i64__7_7_u_2() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_u_2:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_3_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s12
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 poison, i32 2>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_7_0_2() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_0_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s14, s16
-; GFX9-NEXT: s_mov_b32 s15, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 0, i32 2>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_7_1_2() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_1_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: s_mov_b32 s14, s16
-; GFX9-NEXT: s_mov_b32 s15, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 1, i32 2>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_7_3_2() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_3_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s18
-; GFX9-NEXT: s_mov_b32 s13, s19
-; GFX9-NEXT: s_mov_b32 s14, s16
-; GFX9-NEXT: s_mov_b32 s15, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 3, i32 2>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_7_4_2() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_4_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: s_mov_b32 s14, s16
-; GFX9-NEXT: s_mov_b32 s15, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 4, i32 2>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 3, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_5_2() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_5_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: s_mov_b32 s14, s16
-; GFX9-NEXT: s_mov_b32 s15, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4i64_v4i64__7_5_4_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_5_4_4:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_5_4_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_5_4_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 5, i32 2>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 5, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_6_2() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_6_2:
+define void @s_shuffle_v4i64_v4i64__7_6_4_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_6_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s10, s14
-; GFX900-NEXT: s_mov_b32 s11, s15
-; GFX900-NEXT: s_mov_b32 s14, s16
-; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s16
+; GFX900-NEXT: s_mov_b32 s11, s17
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_6_2:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_6_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s14
-; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s10, s14
-; GFX90A-NEXT: s_mov_b32 s11, s15
-; GFX90A-NEXT: s_mov_b32 s14, s16
-; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s16
+; GFX90A-NEXT: s_mov_b32 s11, s17
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_6_2:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_6_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[16:17]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 6, i32 2>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__u_3_3_3() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__u_3_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 poison, i32 3, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__0_3_3_3() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__0_3_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 0, i32 3, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__1_3_3_3() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__1_3_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s6
-; GFX9-NEXT: s_mov_b32 s9, s7
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 1, i32 3, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__2_3_3_3() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__2_3_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 2, i32 3, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__3_3_3_3() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__3_3_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 3, i32 3, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__4_3_3_3() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__4_3_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 4, i32 3, i32 3, i32 3>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 6, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__5_3_3_3() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__5_3_3_3:
+define void @s_shuffle_v4i64_v4i64__7_7_4_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
-; GFX900-NEXT: s_mov_b32 s14, s10
-; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__5_3_3_3:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s14
-; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
-; GFX90A-NEXT: s_mov_b32 s14, s10
-; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__5_3_3_3:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s13, s11
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 5, i32 3, i32 3, i32 3>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__6_3_3_3() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__6_3_3_3:
+define void @s_shuffle_v4i64_v4i64__7_7_u_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_u_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s14
-; GFX900-NEXT: s_mov_b32 s11, s15
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__6_3_3_3:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_u_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s14
-; GFX90A-NEXT: s_mov_b32 s11, s15
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__6_3_3_3:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_u_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 6, i32 3, i32 3, i32 3>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 poison, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_3_3_3() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_3_3_3:
+define void @s_shuffle_v4i64_v4i64__7_7_0_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_0_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s18
-; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
-; GFX900-NEXT: s_mov_b32 s14, s10
-; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_3_3_3:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_0_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s18
-; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
-; GFX90A-NEXT: s_mov_b32 s14, s10
-; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_3_3_3:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_0_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s10
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s13, s11
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 3, i32 3, i32 3>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 0, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_u_3_3() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_u_3_3:
+define void @s_shuffle_v4i64_v4i64__7_7_1_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_1_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
@@ -17677,16 +21123,18 @@ define void @s_shuffle_v4i64_v4i64__7_u_3_3() {
; GFX900-NEXT: s_mov_b32 s9, s11
; GFX900-NEXT: s_mov_b32 s12, s14
; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_u_3_3:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_1_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
@@ -17695,384 +21143,337 @@ define void @s_shuffle_v4i64_v4i64__7_u_3_3() {
; GFX90A-NEXT: s_mov_b32 s9, s11
; GFX90A-NEXT: s_mov_b32 s12, s14
; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_u_3_3:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_1_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 poison, i32 3, i32 3>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 1, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_0_3_3() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_0_3_3:
+define void @s_shuffle_v4i64_v4i64__7_7_2_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_2_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s12, s18
-; GFX900-NEXT: s_mov_b32 s13, s19
-; GFX900-NEXT: s_mov_b32 s14, s18
-; GFX900-NEXT: s_mov_b32 s15, s19
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_0_3_3:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_2_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s18
-; GFX90A-NEXT: s_mov_b32 s13, s19
-; GFX90A-NEXT: s_mov_b32 s14, s18
-; GFX90A-NEXT: s_mov_b32 s15, s19
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_0_3_3:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_2_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
-; GFX942-NEXT: s_mov_b32 s14, s6
-; GFX942-NEXT: s_mov_b32 s15, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 0, i32 3, i32 3>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 2, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_1_3_3() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_1_3_3:
+define void @s_shuffle_v4i64_v4i64__7_7_3_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_3_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s22
-; GFX900-NEXT: s_mov_b32 s9, s23
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
; GFX900-NEXT: s_mov_b32 s12, s14
; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_1_3_3:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_3_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s22
-; GFX90A-NEXT: s_mov_b32 s9, s23
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
; GFX90A-NEXT: s_mov_b32 s12, s14
; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_1_3_3:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_3_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 1, i32 3, i32 3>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 3, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_2_3_3() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_2_3_3:
+define void @s_shuffle_v4i64_v4i64__7_7_5_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_5_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_2_3_3:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_5_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_2_3_3:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_5_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 2, i32 3, i32 3>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 5, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_4_3_3() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_4_3_3:
+define void @s_shuffle_v4i64_v4i64__7_7_6_4() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_6_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[16:23]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s4
-; GFX900-NEXT: s_mov_b32 s11, s5
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s8, s22
+; GFX900-NEXT: s_mov_b32 s9, s23
+; GFX900-NEXT: s_mov_b32 s10, s22
+; GFX900-NEXT: s_mov_b32 s11, s23
+; GFX900-NEXT: s_mov_b32 s12, s20
+; GFX900-NEXT: s_mov_b32 s13, s21
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_4_3_3:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_6_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[16:23]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s4
-; GFX90A-NEXT: s_mov_b32 s11, s5
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s8, s22
+; GFX90A-NEXT: s_mov_b32 s9, s23
+; GFX90A-NEXT: s_mov_b32 s10, s22
+; GFX90A-NEXT: s_mov_b32 s11, s23
+; GFX90A-NEXT: s_mov_b32 s12, s20
+; GFX90A-NEXT: s_mov_b32 s13, s21
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_4_3_3:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_6_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 4, i32 3, i32 3>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 6, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_5_3_3() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_5_3_3:
+define void @s_shuffle_v4i64_v4i64__u_5_5_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__u_5_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s12, s18
-; GFX900-NEXT: s_mov_b32 s13, s19
-; GFX900-NEXT: s_mov_b32 s14, s18
-; GFX900-NEXT: s_mov_b32 s15, s19
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_5_3_3:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__u_5_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s14
-; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s12, s18
-; GFX90A-NEXT: s_mov_b32 s13, s19
-; GFX90A-NEXT: s_mov_b32 s14, s18
-; GFX90A-NEXT: s_mov_b32 s15, s19
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_5_3_3:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__u_5_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
-; GFX942-NEXT: s_mov_b32 s14, s6
-; GFX942-NEXT: s_mov_b32 s15, s7
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 5, i32 3, i32 3>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 poison, i32 5, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_6_3_3() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_6_3_3:
+define void @s_shuffle_v4i64_v4i64__0_5_5_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__0_5_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s22
-; GFX900-NEXT: s_mov_b32 s9, s23
-; GFX900-NEXT: s_mov_b32 s10, s20
-; GFX900-NEXT: s_mov_b32 s11, s21
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
; GFX900-NEXT: s_mov_b32 s12, s14
; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
@@ -18080,19 +21481,17 @@ define void @s_shuffle_v4i64_v4i64__7_6_3_3() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_6_3_3:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__0_5_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s22
-; GFX90A-NEXT: s_mov_b32 s9, s23
-; GFX90A-NEXT: s_mov_b32 s10, s20
-; GFX90A-NEXT: s_mov_b32 s11, s21
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
; GFX90A-NEXT: s_mov_b32 s12, s14
; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
@@ -18100,782 +21499,647 @@ define void @s_shuffle_v4i64_v4i64__7_6_3_3() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_6_3_3:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__0_5_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 6, i32 3, i32 3>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 0, i32 5, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_3_3() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_3_3:
+define void @s_shuffle_v4i64_v4i64__1_5_5_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__1_5_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_3_3:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__1_5_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_3_3:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__1_5_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s14
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 3, i32 3>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 1, i32 5, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_u_3() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_u_3:
+define void @s_shuffle_v4i64_v4i64__2_5_5_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__2_5_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_u_3:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__2_5_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_u_3:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__2_5_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 poison, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_7_0_3() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_0_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s14, s18
-; GFX9-NEXT: s_mov_b32 s15, s19
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 0, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_7_1_3() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_1_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: s_mov_b32 s14, s18
-; GFX9-NEXT: s_mov_b32 s15, s19
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 1, i32 3>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 2, i32 5, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_2_3() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_2_3:
+define void @s_shuffle_v4i64_v4i64__3_5_5_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__3_5_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_2_3:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__3_5_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_2_3:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__3_5_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 2, i32 3>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 3, i32 5, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_4_3() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_4_3:
+define void @s_shuffle_v4i64_v4i64__4_5_5_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__4_5_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s12, s4
-; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_4_3:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__4_5_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s12, s4
-; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_4_3:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__4_5_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 4, i32 3>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 4, i32 5, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_5_3() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_5_3:
+define void @s_shuffle_v4i64_v4i64__5_5_5_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__5_5_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s12, s6
-; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_5_3:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__5_5_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s12, s6
-; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_5_3:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__5_5_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 5, i32 3>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_6_3() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_6_3:
+define void @s_shuffle_v4i64_v4i64__6_5_5_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__6_5_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s10, s14
-; GFX900-NEXT: s_mov_b32 s11, s15
-; GFX900-NEXT: s_mov_b32 s14, s18
-; GFX900-NEXT: s_mov_b32 s15, s19
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_6_3:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__6_5_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s14
-; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s10, s14
-; GFX90A-NEXT: s_mov_b32 s11, s15
-; GFX90A-NEXT: s_mov_b32 s14, s18
-; GFX90A-NEXT: s_mov_b32 s15, s19
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_6_3:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__6_5_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
-; GFX942-NEXT: s_mov_b32 s14, s6
-; GFX942-NEXT: s_mov_b32 s15, s7
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 6, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__u_4_4_4() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__u_4_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 poison, i32 4, i32 4, i32 4>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 6, i32 5, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__0_4_4_4() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__0_4_4_4:
+define void @s_shuffle_v4i64_v4i64__7_5_5_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_5_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__0_4_4_4:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_5_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__0_4_4_4:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_5_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 0, i32 4, i32 4, i32 4>
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 5, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__1_4_4_4() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__1_4_4_4:
+define void @s_shuffle_v4i64_v4i64__7_u_5_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_u_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s6
-; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__1_4_4_4:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_u_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s6
-; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__1_4_4_4:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_u_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 1, i32 4, i32 4, i32 4>
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 poison, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__2_4_4_4() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__2_4_4_4:
+define void @s_shuffle_v4i64_v4i64__7_0_5_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_0_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__2_4_4_4:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_0_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__2_4_4_4:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_0_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 2, i32 4, i32 4, i32 4>
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 0, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__3_4_4_4() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__3_4_4_4:
+define void @s_shuffle_v4i64_v4i64__7_1_5_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_1_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__3_4_4_4:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_1_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__3_4_4_4:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_1_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 3, i32 4, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__4_4_4_4() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__4_4_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> poison, <4 x i32> <i32 4, i32 4, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__5_4_4_4() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__5_4_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 5, i32 4, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__6_4_4_4() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__6_4_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: s_mov_b32 s14, s4
-; GFX9-NEXT: s_mov_b32 s15, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 6, i32 4, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_4_4_4() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_4_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 4, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_u_4_4() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_u_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 poison, i32 4, i32 4>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 1, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_0_4_4() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_0_4_4:
+define void @s_shuffle_v4i64_v4i64__7_2_5_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_2_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[16:23]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s18
; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s10, s4
-; GFX900-NEXT: s_mov_b32 s11, s5
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s10, s20
+; GFX900-NEXT: s_mov_b32 s11, s21
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_0_4_4:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_2_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[16:23]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s18
; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s10, s4
-; GFX90A-NEXT: s_mov_b32 s11, s5
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s10, s20
+; GFX90A-NEXT: s_mov_b32 s11, s21
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_0_4_4:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_2_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
@@ -18884,1624 +22148,1017 @@ define void @s_shuffle_v4i64_v4i64__7_0_4_4() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 0, i32 4, i32 4>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 2, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_1_4_4() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_1_4_4:
+define void @s_shuffle_v4i64_v4i64__7_3_5_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_3_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s18
; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_1_4_4:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_3_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s18
; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_1_4_4:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_3_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 1, i32 4, i32 4>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 3, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_2_4_4() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_2_4_4:
+define void @s_shuffle_v4i64_v4i64__7_4_5_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_4_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s18
; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s10, s20
-; GFX900-NEXT: s_mov_b32 s11, s21
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_2_4_4:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_4_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s18
; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s10, s20
-; GFX90A-NEXT: s_mov_b32 s11, s21
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_2_4_4:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_4_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 2, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_3_4_4() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_3_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 3, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_5_4_4() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_5_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 5, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_6_4_4() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_6_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s10, s16
-; GFX9-NEXT: s_mov_b32 s11, s17
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 6, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_7_4_4() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: s_mov_b32 s14, s4
-; GFX9-NEXT: s_mov_b32 s15, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_7_u_4() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_u_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s14, s4
-; GFX9-NEXT: s_mov_b32 s15, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 poison, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_7_0_4() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_0_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s14, s4
-; GFX9-NEXT: s_mov_b32 s15, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 0, i32 4>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 4, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_1_4() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_1_4:
+define void @s_shuffle_v4i64_v4i64__7_6_5_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_6_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s16
+; GFX900-NEXT: s_mov_b32 s11, s17
; GFX900-NEXT: s_mov_b32 s12, s14
; GFX900-NEXT: s_mov_b32 s13, s15
-; GFX900-NEXT: s_mov_b32 s14, s4
-; GFX900-NEXT: s_mov_b32 s15, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_1_4:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_6_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s16
+; GFX90A-NEXT: s_mov_b32 s11, s17
; GFX90A-NEXT: s_mov_b32 s12, s14
; GFX90A-NEXT: s_mov_b32 s13, s15
-; GFX90A-NEXT: s_mov_b32 s14, s4
-; GFX90A-NEXT: s_mov_b32 s15, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_1_4:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_6_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s13, s3
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[16:17]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 1, i32 4>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 6, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_2_4() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_2_4:
+define void @s_shuffle_v4i64_v4i64__7_7_5_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s14, s4
-; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_2_4:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s14, s4
-; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_2_4:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 2, i32 4>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_3_4() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_3_4:
+define void @s_shuffle_v4i64_v4i64__7_7_u_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_u_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
-; GFX900-NEXT: s_mov_b32 s14, s4
-; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_3_4:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_u_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
-; GFX90A-NEXT: s_mov_b32 s14, s4
-; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_3_4:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_u_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s13, s15
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 3, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_7_5_4() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_5_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: s_mov_b32 s14, s4
-; GFX9-NEXT: s_mov_b32 s15, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 5, i32 4>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 poison, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_6_4() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_6_4:
+define void @s_shuffle_v4i64_v4i64__7_7_0_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_0_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s22
-; GFX900-NEXT: s_mov_b32 s9, s23
-; GFX900-NEXT: s_mov_b32 s10, s22
-; GFX900-NEXT: s_mov_b32 s11, s23
-; GFX900-NEXT: s_mov_b32 s12, s20
-; GFX900-NEXT: s_mov_b32 s13, s21
-; GFX900-NEXT: s_mov_b32 s14, s16
-; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_6_4:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_0_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s22
-; GFX90A-NEXT: s_mov_b32 s9, s23
-; GFX90A-NEXT: s_mov_b32 s10, s22
-; GFX90A-NEXT: s_mov_b32 s11, s23
-; GFX90A-NEXT: s_mov_b32 s12, s20
-; GFX90A-NEXT: s_mov_b32 s13, s21
-; GFX90A-NEXT: s_mov_b32 s14, s16
-; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_6_4:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_0_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s6
-; GFX942-NEXT: s_mov_b32 s11, s7
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
-; GFX942-NEXT: s_mov_b32 s14, s0
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 6, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__u_5_5_5() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__u_5_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 poison, i32 5, i32 5, i32 5>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 0, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__0_5_5_5() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__0_5_5_5:
+define void @s_shuffle_v4i64_v4i64__7_7_1_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_1_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s14
-; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
; GFX900-NEXT: s_mov_b32 s12, s14
; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__0_5_5_5:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_1_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s14
-; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
; GFX90A-NEXT: s_mov_b32 s12, s14
; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__0_5_5_5:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_1_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 0, i32 5, i32 5, i32 5>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 1, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__1_5_5_5() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__1_5_5_5:
+define void @s_shuffle_v4i64_v4i64__7_7_2_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_2_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s6
-; GFX900-NEXT: s_mov_b32 s9, s7
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
-; GFX900-NEXT: s_mov_b32 s14, s10
-; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__1_5_5_5:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_2_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s6
-; GFX90A-NEXT: s_mov_b32 s9, s7
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
-; GFX90A-NEXT: s_mov_b32 s14, s10
-; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__1_5_5_5:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_2_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 1, i32 5, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__2_5_5_5() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__2_5_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 2, i32 5, i32 5, i32 5>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 2, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__3_5_5_5() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__3_5_5_5:
+define void @s_shuffle_v4i64_v4i64__7_7_3_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_3_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s18
-; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
-; GFX900-NEXT: s_mov_b32 s14, s10
-; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__3_5_5_5:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_3_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s18
-; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
-; GFX90A-NEXT: s_mov_b32 s14, s10
-; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__3_5_5_5:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_3_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; use s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 3, i32 5, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__4_5_5_5() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__4_5_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 4, i32 5, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__5_5_5_5() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__5_5_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 5, i32 5, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__6_5_5_5() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__6_5_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: s_mov_b32 s14, s6
-; GFX9-NEXT: s_mov_b32 s15, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 6, i32 5, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_5_5_5() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_5_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 5, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_u_5_5() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_u_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 poison, i32 5, i32 5>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 3, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_0_5_5() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_0_5_5:
+define void @s_shuffle_v4i64_v4i64__7_7_4_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_4_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s18
-; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s10, s4
-; GFX900-NEXT: s_mov_b32 s11, s5
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_0_5_5:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_4_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s18
-; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s10, s4
-; GFX90A-NEXT: s_mov_b32 s11, s5
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_0_5_5:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_4_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:19]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 0, i32 5, i32 5>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 4, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_1_5_5() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_1_5_5:
+define void @s_shuffle_v4i64_v4i64__7_7_6_5() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_6_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s18
; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s10, s18
+; GFX900-NEXT: s_mov_b32 s11, s19
+; GFX900-NEXT: s_mov_b32 s12, s16
+; GFX900-NEXT: s_mov_b32 s13, s17
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_1_5_5:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_6_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s18
; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s10, s18
+; GFX90A-NEXT: s_mov_b32 s11, s19
+; GFX90A-NEXT: s_mov_b32 s12, s16
+; GFX90A-NEXT: s_mov_b32 s13, s17
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_1_5_5:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_6_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[16:17]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 1, i32 5, i32 5>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 6, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_2_5_5() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_2_5_5:
+define void @s_shuffle_v4i64_v4i64__u_6_6_6() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__u_6_6_6:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s18
-; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s10, s20
-; GFX900-NEXT: s_mov_b32 s11, s21
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_2_5_5:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__u_6_6_6:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s18
-; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s10, s20
-; GFX90A-NEXT: s_mov_b32 s11, s21
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_2_5_5:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__u_6_6_6:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:19]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 2, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_3_5_5() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_3_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 3, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_4_5_5() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_4_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 4, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_6_5_5() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_6_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s10, s16
-; GFX9-NEXT: s_mov_b32 s11, s17
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 6, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_7_5_5() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: s_mov_b32 s14, s6
-; GFX9-NEXT: s_mov_b32 s15, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_7_u_5() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_u_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s14, s6
-; GFX9-NEXT: s_mov_b32 s15, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 poison, i32 5>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 poison, i32 6, i32 6, i32 6>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_0_5() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_0_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s14, s6
-; GFX9-NEXT: s_mov_b32 s15, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4i64_v4i64__0_6_6_6() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__0_6_6_6:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s16
+; GFX900-NEXT: s_mov_b32 s11, s17
+; GFX900-NEXT: s_mov_b32 s12, s16
+; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__0_6_6_6:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s16
+; GFX90A-NEXT: s_mov_b32 s11, s17
+; GFX90A-NEXT: s_mov_b32 s12, s16
+; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__0_6_6_6:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 0, i32 5>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 0, i32 6, i32 6, i32 6>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_1_5() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_1_5:
+define void @s_shuffle_v4i64_v4i64__1_6_6_6() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__1_6_6_6:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
-; GFX900-NEXT: s_mov_b32 s14, s6
-; GFX900-NEXT: s_mov_b32 s15, s7
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_1_5:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__1_6_6_6:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
-; GFX90A-NEXT: s_mov_b32 s14, s6
-; GFX90A-NEXT: s_mov_b32 s15, s7
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_1_5:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__1_6_6_6:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s13, s3
-; GFX942-NEXT: s_mov_b32 s14, s6
-; GFX942-NEXT: s_mov_b32 s15, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 1, i32 5>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 1, i32 6, i32 6, i32 6>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_2_5() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_2_5:
+define void @s_shuffle_v4i64_v4i64__2_6_6_6() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__2_6_6_6:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s14, s6
-; GFX900-NEXT: s_mov_b32 s15, s7
+; GFX900-NEXT: s_mov_b32 s10, s16
+; GFX900-NEXT: s_mov_b32 s11, s17
+; GFX900-NEXT: s_mov_b32 s12, s16
+; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_2_5:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__2_6_6_6:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s14, s6
-; GFX90A-NEXT: s_mov_b32 s15, s7
+; GFX90A-NEXT: s_mov_b32 s10, s16
+; GFX90A-NEXT: s_mov_b32 s11, s17
+; GFX90A-NEXT: s_mov_b32 s12, s16
+; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_2_5:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__2_6_6_6:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s14, s6
-; GFX942-NEXT: s_mov_b32 s15, s7
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 2, i32 5>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 2, i32 6, i32 6, i32 6>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_7_3_5() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_3_5:
+define void @s_shuffle_v4i64_v4i64__3_6_6_6() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__3_6_6_6:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
-; GFX900-NEXT: s_mov_b32 s14, s6
-; GFX900-NEXT: s_mov_b32 s15, s7
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_3_5:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__3_6_6_6:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
-; GFX90A-NEXT: s_mov_b32 s14, s6
-; GFX90A-NEXT: s_mov_b32 s15, s7
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_3_5:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__3_6_6_6:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s14
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s13, s15
-; GFX942-NEXT: s_mov_b32 s14, s6
-; GFX942-NEXT: s_mov_b32 s15, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 3, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_7_4_5() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_4_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: s_mov_b32 s14, s6
-; GFX9-NEXT: s_mov_b32 s15, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 4, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_7_6_5() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_6_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s10, s18
-; GFX9-NEXT: s_mov_b32 s11, s19
-; GFX9-NEXT: s_mov_b32 s12, s16
-; GFX9-NEXT: s_mov_b32 s13, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 6, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__u_6_6_6() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__u_6_6_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 poison, i32 6, i32 6, i32 6>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 3, i32 6, i32 6, i32 6>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__0_6_6_6() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__0_6_6_6:
+define void @s_shuffle_v4i64_v4i64__4_6_6_6() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__4_6_6_6:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s16
-; GFX900-NEXT: s_mov_b32 s11, s17
-; GFX900-NEXT: s_mov_b32 s12, s16
-; GFX900-NEXT: s_mov_b32 s13, s17
-; GFX900-NEXT: s_mov_b32 s14, s16
-; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__0_6_6_6:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__4_6_6_6:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s16
-; GFX90A-NEXT: s_mov_b32 s11, s17
-; GFX90A-NEXT: s_mov_b32 s12, s16
-; GFX90A-NEXT: s_mov_b32 s13, s17
-; GFX90A-NEXT: s_mov_b32 s14, s16
-; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__0_6_6_6:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__4_6_6_6:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 0, i32 6, i32 6, i32 6>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 4, i32 6, i32 6, i32 6>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__1_6_6_6() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__1_6_6_6:
+define void @s_shuffle_v4i64_v4i64__5_6_6_6() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__5_6_6_6:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s6
-; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
; GFX900-NEXT: s_mov_b32 s10, s12
; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: s_mov_b32 s14, s12
@@ -20511,17 +23168,14 @@ define void @s_shuffle_v4i64_v4i64__1_6_6_6() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__1_6_6_6:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__5_6_6_6:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s6
-; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
; GFX90A-NEXT: s_mov_b32 s10, s12
; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: s_mov_b32 s14, s12
@@ -20531,112 +23185,90 @@ define void @s_shuffle_v4i64_v4i64__1_6_6_6() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__1_6_6_6:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__5_6_6_6:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 1, i32 6, i32 6, i32 6>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 5, i32 6, i32 6, i32 6>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__2_6_6_6() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__2_6_6_6:
+define void @s_shuffle_v4i64_v4i64__6_6_6_6() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__6_6_6_6:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s16
-; GFX900-NEXT: s_mov_b32 s11, s17
-; GFX900-NEXT: s_mov_b32 s12, s16
-; GFX900-NEXT: s_mov_b32 s13, s17
-; GFX900-NEXT: s_mov_b32 s14, s16
-; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: s_mov_b32 s14, s8
+; GFX900-NEXT: s_mov_b32 s15, s9
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__2_6_6_6:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__6_6_6_6:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s16
-; GFX90A-NEXT: s_mov_b32 s11, s17
-; GFX90A-NEXT: s_mov_b32 s12, s16
-; GFX90A-NEXT: s_mov_b32 s13, s17
-; GFX90A-NEXT: s_mov_b32 s14, s16
-; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: s_mov_b32 s14, s8
+; GFX90A-NEXT: s_mov_b32 s15, s9
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__2_6_6_6:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__6_6_6_6:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 2, i32 6, i32 6, i32 6>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 6, i32 6, i32 6, i32 6>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__3_6_6_6() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__3_6_6_6:
+define void @s_shuffle_v4i64_v4i64__7_6_6_6() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_6_6_6:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s18
-; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
; GFX900-NEXT: s_mov_b32 s10, s12
; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: s_mov_b32 s14, s12
@@ -20646,17 +23278,14 @@ define void @s_shuffle_v4i64_v4i64__3_6_6_6() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__3_6_6_6:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_6_6_6:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s18
-; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
; GFX90A-NEXT: s_mov_b32 s10, s12
; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: s_mov_b32 s14, s12
@@ -20666,119 +23295,19 @@ define void @s_shuffle_v4i64_v4i64__3_6_6_6() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__3_6_6_6:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_6_6_6:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 3, i32 6, i32 6, i32 6>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__4_6_6_6() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__4_6_6_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 4, i32 6, i32 6, i32 6>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__5_6_6_6() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__5_6_6_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 5, i32 6, i32 6, i32 6>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__6_6_6_6() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__6_6_6_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: s_mov_b32 s14, s8
-; GFX9-NEXT: s_mov_b32 s15, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 6, i32 6, i32 6, i32 6>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_6_6_6() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_6_6_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 6, i32 6, i32 6>
@@ -20787,20 +23316,48 @@ define void @s_shuffle_v4i64_v4i64__7_6_6_6() {
}
define void @s_shuffle_v4i64_v4i64__7_u_6_6() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_u_6_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_u_6_6:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_u_6_6:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_u_6_6:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 poison, i32 6, i32 6>
@@ -20858,12 +23415,9 @@ define void @s_shuffle_v4i64_v4i64__7_0_6_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -20925,12 +23479,9 @@ define void @s_shuffle_v4i64_v4i64__7_1_6_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -20992,12 +23543,9 @@ define void @s_shuffle_v4i64_v4i64__7_2_6_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -21060,12 +23608,9 @@ define void @s_shuffle_v4i64_v4i64__7_3_6_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -21120,66 +23665,121 @@ define void @s_shuffle_v4i64_v4i64__7_4_6_6() {
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 4, i32 6, i32 6>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_5_6_6() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_5_6_6:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_5_6_6:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_5_6_6:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 5, i32 6, i32 6>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_7_6_6() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_6_6:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_6_6:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_6_6:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 4, i32 6, i32 6>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_5_6_6() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_5_6_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 5, i32 6, i32 6>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_7_6_6() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_6_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 6, i32 6>
@@ -21228,12 +23828,9 @@ define void @s_shuffle_v4i64_v4i64__7_7_u_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s6
-; GFX942-NEXT: s_mov_b32 s11, s7
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -21295,12 +23892,9 @@ define void @s_shuffle_v4i64_v4i64__7_7_0_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s6
-; GFX942-NEXT: s_mov_b32 s11, s7
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -21366,14 +23960,10 @@ define void @s_shuffle_v4i64_v4i64__7_7_1_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s10, s18
-; GFX942-NEXT: s_mov_b32 s11, s19
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
-; GFX942-NEXT: s_mov_b32 s14, s16
-; GFX942-NEXT: s_mov_b32 s15, s17
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -21435,12 +24025,9 @@ define void @s_shuffle_v4i64_v4i64__7_7_2_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s6
-; GFX942-NEXT: s_mov_b32 s11, s7
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -21506,14 +24093,10 @@ define void @s_shuffle_v4i64_v4i64__7_7_3_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s10, s18
-; GFX942-NEXT: s_mov_b32 s11, s19
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
-; GFX942-NEXT: s_mov_b32 s14, s16
-; GFX942-NEXT: s_mov_b32 s15, s17
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -21526,22 +24109,53 @@ define void @s_shuffle_v4i64_v4i64__7_7_3_6() {
}
define void @s_shuffle_v4i64_v4i64__7_7_4_6() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_4_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s10, s18
-; GFX9-NEXT: s_mov_b32 s11, s19
-; GFX9-NEXT: s_mov_b32 s14, s16
-; GFX9-NEXT: s_mov_b32 s15, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_4_6:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s18
+; GFX900-NEXT: s_mov_b32 s11, s19
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_4_6:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s18
+; GFX90A-NEXT: s_mov_b32 s11, s19
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_4_6:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 4, i32 6>
@@ -21594,14 +24208,10 @@ define void @s_shuffle_v4i64_v4i64__7_7_5_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s6
-; GFX942-NEXT: s_mov_b32 s11, s7
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -21614,20 +24224,48 @@ define void @s_shuffle_v4i64_v4i64__7_7_5_6() {
}
define void @s_shuffle_v4i64_v4i64__u_7_7_7() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__u_7_7_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__u_7_7_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__u_7_7_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__u_7_7_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 poison, i32 7, i32 7, i32 7>
@@ -21685,12 +24323,9 @@ define void @s_shuffle_v4i64_v4i64__0_7_7_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s6
-; GFX942-NEXT: s_mov_b32 s11, s7
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
-; GFX942-NEXT: s_mov_b32 s14, s6
-; GFX942-NEXT: s_mov_b32 s15, s7
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -21753,12 +24388,9 @@ define void @s_shuffle_v4i64_v4i64__1_7_7_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -21821,12 +24453,9 @@ define void @s_shuffle_v4i64_v4i64__2_7_7_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s6
-; GFX942-NEXT: s_mov_b32 s11, s7
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
-; GFX942-NEXT: s_mov_b32 s14, s6
-; GFX942-NEXT: s_mov_b32 s15, s7
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -21889,12 +24518,9 @@ define void @s_shuffle_v4i64_v4i64__3_7_7_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -21907,20 +24533,48 @@ define void @s_shuffle_v4i64_v4i64__3_7_7_7() {
}
define void @s_shuffle_v4i64_v4i64__4_7_7_7() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__4_7_7_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__4_7_7_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__4_7_7_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__4_7_7_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 4, i32 7, i32 7, i32 7>
@@ -21929,22 +24583,53 @@ define void @s_shuffle_v4i64_v4i64__4_7_7_7() {
}
define void @s_shuffle_v4i64_v4i64__5_7_7_7() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__5_7_7_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s6
-; GFX9-NEXT: s_mov_b32 s9, s7
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__5_7_7_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__5_7_7_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__5_7_7_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 5, i32 7, i32 7, i32 7>
@@ -21953,20 +24638,48 @@ define void @s_shuffle_v4i64_v4i64__5_7_7_7() {
}
define void @s_shuffle_v4i64_v4i64__6_7_7_7() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__6_7_7_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__6_7_7_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__6_7_7_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__6_7_7_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 6, i32 7, i32 7, i32 7>
@@ -21975,20 +24688,48 @@ define void @s_shuffle_v4i64_v4i64__6_7_7_7() {
}
define void @s_shuffle_v4i64_v4i64__7_u_7_7() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_u_7_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_u_7_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_u_7_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_u_7_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 poison, i32 7, i32 7>
@@ -22046,12 +24787,9 @@ define void @s_shuffle_v4i64_v4i64__7_0_7_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -22113,12 +24851,9 @@ define void @s_shuffle_v4i64_v4i64__7_1_7_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
-; GFX942-NEXT: s_mov_b32 s14, s6
-; GFX942-NEXT: s_mov_b32 s15, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -22180,12 +24915,9 @@ define void @s_shuffle_v4i64_v4i64__7_2_7_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -22238,183 +24970,297 @@ define void @s_shuffle_v4i64_v4i64__7_3_7_7() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_3_7_7:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_3_7_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 3, i32 7, i32 7>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_4_7_7() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_4_7_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s18
+; GFX900-NEXT: s_mov_b32 s13, s19
+; GFX900-NEXT: s_mov_b32 s14, s18
+; GFX900-NEXT: s_mov_b32 s15, s19
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_4_7_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s18
+; GFX90A-NEXT: s_mov_b32 s13, s19
+; GFX90A-NEXT: s_mov_b32 s14, s18
+; GFX90A-NEXT: s_mov_b32 s15, s19
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_4_7_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 4, i32 7, i32 7>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_5_7_7() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_5_7_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_5_7_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_5_7_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 5, i32 7, i32 7>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_6_7_7() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_6_7_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_6_7_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_6_7_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x i64> asm "; def $0", "=s"()
+ %vec1 = call <4 x i64> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 6, i32 7, i32 7>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4i64_v4i64__7_7_u_7() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_u_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_u_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_u_7:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
-; GFX942-NEXT: s_mov_b32 s14, s6
-; GFX942-NEXT: s_mov_b32 s15, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 3, i32 7, i32 7>
+ %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 poison, i32 7>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
ret void
}
-define void @s_shuffle_v4i64_v4i64__7_4_7_7() {
-; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_4_7_7:
+define void @s_shuffle_v4i64_v4i64__7_7_0_7() {
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_0_7:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s18
-; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s12, s18
-; GFX900-NEXT: s_mov_b32 s13, s19
-; GFX900-NEXT: s_mov_b32 s14, s18
-; GFX900-NEXT: s_mov_b32 s15, s19
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_4_7_7:
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_0_7:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s18
-; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s18
-; GFX90A-NEXT: s_mov_b32 s13, s19
-; GFX90A-NEXT: s_mov_b32 s14, s18
-; GFX90A-NEXT: s_mov_b32 s15, s19
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_4_7_7:
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_0_7:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
-; GFX942-NEXT: s_mov_b32 s14, s6
-; GFX942-NEXT: s_mov_b32 s15, s7
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 4, i32 7, i32 7>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_5_7_7() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_5_7_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 5, i32 7, i32 7>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_6_7_7() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_6_7_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 6, i32 7, i32 7>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_7_u_7() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_u_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x i64> asm "; def $0", "=s"()
- %vec1 = call <4 x i64> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 poison, i32 7>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x i64> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4i64_v4i64__7_7_0_7() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_0_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 0, i32 7>
@@ -22469,15 +25315,12 @@ define void @s_shuffle_v4i64_v4i64__7_7_1_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s13, s3
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -22536,10 +25379,8 @@ define void @s_shuffle_v4i64_v4i64__7_7_2_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -22598,15 +25439,12 @@ define void @s_shuffle_v4i64_v4i64__7_7_3_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s14
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s13, s15
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -22619,22 +25457,53 @@ define void @s_shuffle_v4i64_v4i64__7_7_3_7() {
}
define void @s_shuffle_v4i64_v4i64__7_7_4_7() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_4_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_4_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_4_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_4_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 4, i32 7>
@@ -22643,22 +25512,53 @@ define void @s_shuffle_v4i64_v4i64__7_7_4_7() {
}
define void @s_shuffle_v4i64_v4i64__7_7_5_7() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_5_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_5_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_5_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_5_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 5, i32 7>
@@ -22667,20 +25567,48 @@ define void @s_shuffle_v4i64_v4i64__7_7_5_7() {
}
define void @s_shuffle_v4i64_v4i64__7_7_6_7() {
-; GFX9-LABEL: s_shuffle_v4i64_v4i64__7_7_6_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4i64_v4i64__7_7_6_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4i64_v4i64__7_7_6_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4i64_v4i64__7_7_6_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x i64> asm "; def $0", "=s"()
%vec1 = call <4 x i64> asm "; def $0", "=s"()
%shuf = shufflevector <4 x i64> %vec0, <4 x i64> %vec1, <4 x i32> <i32 7, i32 7, i32 6, i32 7>
diff --git a/llvm/test/CodeGen/AMDGPU/shufflevector.v4p0.v2p0.ll b/llvm/test/CodeGen/AMDGPU/shufflevector.v4p0.v2p0.ll
index 3eea691ac56d0..a008c7bcc1cff 100644
--- a/llvm/test/CodeGen/AMDGPU/shufflevector.v4p0.v2p0.ll
+++ b/llvm/test/CodeGen/AMDGPU/shufflevector.v4p0.v2p0.ll
@@ -3519,8 +3519,7 @@ define void @s_shuffle_v4p0_v2p0__1_u_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -3578,8 +3577,7 @@ define void @s_shuffle_v4p0_v2p0__3_u_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -3637,10 +3635,8 @@ define void @s_shuffle_v4p0_v2p0__3_0_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -3694,8 +3690,7 @@ define void @s_shuffle_v4p0_v2p0__3_1_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -3744,10 +3739,8 @@ define void @s_shuffle_v4p0_v2p0__3_2_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -3760,18 +3753,43 @@ define void @s_shuffle_v4p0_v2p0__3_2_u_u() {
}
define void @s_shuffle_v4p0_v2p0__3_3_u_u() {
-; GFX9-LABEL: s_shuffle_v4p0_v2p0__3_3_u_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v2p0__3_3_u_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v2p0__3_3_u_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v2p0__3_3_u_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%vec1 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 poison>
@@ -3780,21 +3798,52 @@ define void @s_shuffle_v4p0_v2p0__3_3_u_u() {
}
define void @s_shuffle_v4p0_v2p0__3_3_0_u() {
-; GFX9-LABEL: s_shuffle_v4p0_v2p0__3_3_0_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v2p0__3_3_0_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v2p0__3_3_0_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v2p0__3_3_0_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%vec1 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 poison>
@@ -3848,10 +3897,8 @@ define void @s_shuffle_v4p0_v2p0__3_3_1_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -3864,20 +3911,48 @@ define void @s_shuffle_v4p0_v2p0__3_3_1_u() {
}
define void @s_shuffle_v4p0_v2p0__3_3_2_u() {
-; GFX9-LABEL: s_shuffle_v4p0_v2p0__3_3_2_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v2p0__3_3_2_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v2p0__3_3_2_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v2p0__3_3_2_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%vec1 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 poison>
@@ -3886,20 +3961,48 @@ define void @s_shuffle_v4p0_v2p0__3_3_2_u() {
}
define void @s_shuffle_v4p0_v2p0__3_3_3_u() {
-; GFX9-LABEL: s_shuffle_v4p0_v2p0__3_3_3_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v2p0__3_3_3_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v2p0__3_3_3_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v2p0__3_3_3_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%vec1 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 poison>
@@ -3957,12 +4060,9 @@ define void @s_shuffle_v4p0_v2p0__3_3_3_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
-; GFX942-NEXT: s_mov_b32 s14, s0
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -3975,23 +4075,57 @@ define void @s_shuffle_v4p0_v2p0__3_3_3_0() {
}
define void @s_shuffle_v4p0_v2p0__3_3_3_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v2p0__3_3_3_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v2p0__3_3_3_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v2p0__3_3_3_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v2p0__3_3_3_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%vec1 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 1>
@@ -4044,14 +4178,10 @@ define void @s_shuffle_v4p0_v2p0__3_3_3_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s2
-; GFX942-NEXT: s_mov_b32 s11, s3
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
-; GFX942-NEXT: s_mov_b32 s14, s0
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -4064,44 +4194,103 @@ define void @s_shuffle_v4p0_v2p0__3_3_3_2() {
}
define void @s_shuffle_v4p0_v2p0__3_3_3_3() {
-; GFX9-LABEL: s_shuffle_v4p0_v2p0__3_3_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <2 x ptr> asm "; def $0", "=s"()
- %vec1 = call <2 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v2p0__u_0_0_0() {
-; GFX9-LABEL: s_shuffle_v4p0_v2p0__u_0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v2p0__3_3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v2p0__3_3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v2p0__3_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <2 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <2 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v2p0__u_0_0_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v2p0__u_0_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v2p0__u_0_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v2p0__u_0_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <4 x i32> <i32 poison, i32 0, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
@@ -4109,22 +4298,53 @@ define void @s_shuffle_v4p0_v2p0__u_0_0_0() {
}
define void @s_shuffle_v4p0_v2p0__0_0_0_0() {
-; GFX9-LABEL: s_shuffle_v4p0_v2p0__0_0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: s_mov_b32 s14, s8
-; GFX9-NEXT: s_mov_b32 s15, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v2p0__0_0_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: s_mov_b32 s14, s8
+; GFX900-NEXT: s_mov_b32 s15, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v2p0__0_0_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: s_mov_b32 s14, s8
+; GFX90A-NEXT: s_mov_b32 s15, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v2p0__0_0_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <4 x i32> zeroinitializer
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
@@ -4132,22 +4352,53 @@ define void @s_shuffle_v4p0_v2p0__0_0_0_0() {
}
define void @s_shuffle_v4p0_v2p0__1_0_0_0() {
-; GFX9-LABEL: s_shuffle_v4p0_v2p0__1_0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v2p0__1_0_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v2p0__1_0_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v2p0__1_0_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
@@ -4155,20 +4406,48 @@ define void @s_shuffle_v4p0_v2p0__1_0_0_0() {
}
define void @s_shuffle_v4p0_v2p0__2_0_0_0() {
-; GFX9-LABEL: s_shuffle_v4p0_v2p0__2_0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v2p0__2_0_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v2p0__2_0_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v2p0__2_0_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <4 x i32> <i32 2, i32 0, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
@@ -4225,12 +4504,9 @@ define void @s_shuffle_v4p0_v2p0__3_0_0_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -4288,10 +4564,8 @@ define void @s_shuffle_v4p0_v2p0__3_u_0_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -4353,12 +4627,9 @@ define void @s_shuffle_v4p0_v2p0__3_1_0_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -4420,12 +4691,9 @@ define void @s_shuffle_v4p0_v2p0__3_2_0_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -4438,57 +4706,91 @@ define void @s_shuffle_v4p0_v2p0__3_2_0_0() {
}
define void @s_shuffle_v4p0_v2p0__3_3_0_0() {
-; GFX9-LABEL: s_shuffle_v4p0_v2p0__3_3_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <2 x ptr> asm "; def $0", "=s"()
- %vec1 = call <2 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v2p0__3_3_u_0() {
-; GFX900-LABEL: s_shuffle_v4p0_v2p0__3_3_u_0:
+; GFX900-LABEL: s_shuffle_v4p0_v2p0__3_3_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ; def s[12:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:7]
+; GFX900-NEXT: ; def s[8:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s14, s4
-; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v2p0__3_3_u_0:
+; GFX90A-LABEL: s_shuffle_v4p0_v2p0__3_3_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ; def s[12:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:7]
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v2p0__3_3_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <2 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <2 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v2p0__3_3_u_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v2p0__3_3_u_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:7]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v2p0__3_3_u_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:7]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
@@ -4508,10 +4810,8 @@ define void @s_shuffle_v4p0_v2p0__3_3_u_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s14, s0
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -4573,12 +4873,9 @@ define void @s_shuffle_v4p0_v2p0__3_3_1_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
-; GFX942-NEXT: s_mov_b32 s14, s0
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -4640,12 +4937,9 @@ define void @s_shuffle_v4p0_v2p0__3_3_2_0() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
-; GFX942-NEXT: s_mov_b32 s14, s0
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -4658,20 +4952,48 @@ define void @s_shuffle_v4p0_v2p0__3_3_2_0() {
}
define void @s_shuffle_v4p0_v2p0__u_1_1_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v2p0__u_1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v2p0__u_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v2p0__u_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v2p0__u_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <4 x i32> <i32 poison, i32 1, i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
@@ -4679,20 +5001,48 @@ define void @s_shuffle_v4p0_v2p0__u_1_1_1() {
}
define void @s_shuffle_v4p0_v2p0__0_1_1_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v2p0__0_1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v2p0__0_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v2p0__0_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v2p0__0_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <4 x i32> <i32 0, i32 1, i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
@@ -4700,22 +5050,53 @@ define void @s_shuffle_v4p0_v2p0__0_1_1_1() {
}
define void @s_shuffle_v4p0_v2p0__1_1_1_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v2p0__1_1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v2p0__1_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v2p0__1_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v2p0__1_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
@@ -4723,20 +5104,48 @@ define void @s_shuffle_v4p0_v2p0__1_1_1_1() {
}
define void @s_shuffle_v4p0_v2p0__2_1_1_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v2p0__2_1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v2p0__2_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v2p0__2_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v2p0__2_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <4 x i32> <i32 2, i32 1, i32 1, i32 1>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
@@ -4793,12 +5202,9 @@ define void @s_shuffle_v4p0_v2p0__3_1_1_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -4856,10 +5262,8 @@ define void @s_shuffle_v4p0_v2p0__3_u_1_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -4921,12 +5325,9 @@ define void @s_shuffle_v4p0_v2p0__3_0_1_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -4988,12 +5389,9 @@ define void @s_shuffle_v4p0_v2p0__3_2_1_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -5006,46 +5404,111 @@ define void @s_shuffle_v4p0_v2p0__3_2_1_1() {
}
define void @s_shuffle_v4p0_v2p0__3_3_1_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v2p0__3_3_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <2 x ptr> asm "; def $0", "=s"()
- %vec1 = call <2 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 1>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
+; GFX900-LABEL: s_shuffle_v4p0_v2p0__3_3_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v2p0__3_3_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v2p0__3_3_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <2 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <2 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
define void @s_shuffle_v4p0_v2p0__3_3_u_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v2p0__3_3_u_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v2p0__3_3_u_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v2p0__3_3_u_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v2p0__3_3_u_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%vec1 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 1>
@@ -5054,21 +5517,52 @@ define void @s_shuffle_v4p0_v2p0__3_3_u_1() {
}
define void @s_shuffle_v4p0_v2p0__3_3_0_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v2p0__3_3_0_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v2p0__3_3_0_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v2p0__3_3_0_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v2p0__3_3_0_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%vec1 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 1>
@@ -5126,12 +5620,9 @@ define void @s_shuffle_v4p0_v2p0__3_3_2_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
-; GFX942-NEXT: s_mov_b32 s14, s2
-; GFX942-NEXT: s_mov_b32 s15, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -5230,8 +5721,7 @@ define void @s_shuffle_v4p0_v2p0__1_2_2_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -5257,22 +5747,53 @@ define void @s_shuffle_v4p0_v2p0__2_2_2_2() {
}
define void @s_shuffle_v4p0_v2p0__3_2_2_2() {
-; GFX9-LABEL: s_shuffle_v4p0_v2p0__3_2_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v2p0__3_2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v2p0__3_2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v2p0__3_2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%vec1 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <4 x i32> <i32 3, i32 2, i32 2, i32 2>
@@ -5281,20 +5802,48 @@ define void @s_shuffle_v4p0_v2p0__3_2_2_2() {
}
define void @s_shuffle_v4p0_v2p0__3_u_2_2() {
-; GFX9-LABEL: s_shuffle_v4p0_v2p0__3_u_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v2p0__3_u_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v2p0__3_u_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v2p0__3_u_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%vec1 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <4 x i32> <i32 3, i32 poison, i32 2, i32 2>
@@ -5352,12 +5901,9 @@ define void @s_shuffle_v4p0_v2p0__3_0_2_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -5370,23 +5916,57 @@ define void @s_shuffle_v4p0_v2p0__3_0_2_2() {
}
define void @s_shuffle_v4p0_v2p0__3_1_2_2() {
-; GFX9-LABEL: s_shuffle_v4p0_v2p0__3_1_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v2p0__3_1_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v2p0__3_1_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v2p0__3_1_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%vec1 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <4 x i32> <i32 3, i32 1, i32 2, i32 2>
@@ -5395,22 +5975,53 @@ define void @s_shuffle_v4p0_v2p0__3_1_2_2() {
}
define void @s_shuffle_v4p0_v2p0__3_3_2_2() {
-; GFX9-LABEL: s_shuffle_v4p0_v2p0__3_3_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v2p0__3_3_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v2p0__3_3_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v2p0__3_3_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%vec1 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 2>
@@ -5459,12 +6070,9 @@ define void @s_shuffle_v4p0_v2p0__3_3_u_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s2
-; GFX942-NEXT: s_mov_b32 s11, s3
-; GFX942-NEXT: s_mov_b32 s14, s0
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -5526,12 +6134,9 @@ define void @s_shuffle_v4p0_v2p0__3_3_0_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s2
-; GFX942-NEXT: s_mov_b32 s11, s3
-; GFX942-NEXT: s_mov_b32 s14, s0
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -5597,14 +6202,10 @@ define void @s_shuffle_v4p0_v2p0__3_3_1_2() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s6
-; GFX942-NEXT: s_mov_b32 s11, s7
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -5617,20 +6218,48 @@ define void @s_shuffle_v4p0_v2p0__3_3_1_2() {
}
define void @s_shuffle_v4p0_v2p0__u_3_3_3() {
-; GFX9-LABEL: s_shuffle_v4p0_v2p0__u_3_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v2p0__u_3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v2p0__u_3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v2p0__u_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%vec1 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <4 x i32> <i32 poison, i32 3, i32 3, i32 3>
@@ -5639,23 +6268,57 @@ define void @s_shuffle_v4p0_v2p0__u_3_3_3() {
}
define void @s_shuffle_v4p0_v2p0__0_3_3_3() {
-; GFX9-LABEL: s_shuffle_v4p0_v2p0__0_3_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v2p0__0_3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v2p0__0_3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v2p0__0_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%vec1 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <4 x i32> <i32 0, i32 3, i32 3, i32 3>
@@ -5713,12 +6376,9 @@ define void @s_shuffle_v4p0_v2p0__1_3_3_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -5731,78 +6391,134 @@ define void @s_shuffle_v4p0_v2p0__1_3_3_3() {
}
define void @s_shuffle_v4p0_v2p0__2_3_3_3() {
-; GFX9-LABEL: s_shuffle_v4p0_v2p0__2_3_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <2 x ptr> asm "; def $0", "=s"()
- %vec1 = call <2 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <4 x i32> <i32 2, i32 3, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v2p0__3_u_3_3() {
-; GFX9-LABEL: s_shuffle_v4p0_v2p0__3_u_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <2 x ptr> asm "; def $0", "=s"()
- %vec1 = call <2 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <4 x i32> <i32 3, i32 poison, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v2p0__3_0_3_3() {
-; GFX900-LABEL: s_shuffle_v4p0_v2p0__3_0_3_3:
+; GFX900-LABEL: s_shuffle_v4p0_v2p0__2_3_3_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:7]
+; GFX900-NEXT: ; def s[8:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s10, s4
-; GFX900-NEXT: s_mov_b32 s11, s5
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v2p0__3_0_3_3:
+; GFX90A-LABEL: s_shuffle_v4p0_v2p0__2_3_3_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ; def s[8:11]
; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:7]
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v2p0__2_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <2 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <2 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <4 x i32> <i32 2, i32 3, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v2p0__3_u_3_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v2p0__3_u_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v2p0__3_u_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v2p0__3_u_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <2 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <2 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <4 x i32> <i32 3, i32 poison, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v2p0__3_0_3_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v2p0__3_0_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:7]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v2p0__3_0_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:7]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s14
; GFX90A-NEXT: s_mov_b32 s9, s15
@@ -5824,12 +6540,9 @@ define void @s_shuffle_v4p0_v2p0__3_0_3_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -5842,23 +6555,57 @@ define void @s_shuffle_v4p0_v2p0__3_0_3_3() {
}
define void @s_shuffle_v4p0_v2p0__3_1_3_3() {
-; GFX9-LABEL: s_shuffle_v4p0_v2p0__3_1_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v2p0__3_1_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v2p0__3_1_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v2p0__3_1_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%vec1 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <4 x i32> <i32 3, i32 1, i32 3, i32 3>
@@ -5867,22 +6614,53 @@ define void @s_shuffle_v4p0_v2p0__3_1_3_3() {
}
define void @s_shuffle_v4p0_v2p0__3_2_3_3() {
-; GFX9-LABEL: s_shuffle_v4p0_v2p0__3_2_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v2p0__3_2_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v2p0__3_2_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v2p0__3_2_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%vec1 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <4 x i32> <i32 3, i32 2, i32 3, i32 3>
@@ -5891,20 +6669,48 @@ define void @s_shuffle_v4p0_v2p0__3_2_3_3() {
}
define void @s_shuffle_v4p0_v2p0__3_3_u_3() {
-; GFX9-LABEL: s_shuffle_v4p0_v2p0__3_3_u_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v2p0__3_3_u_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v2p0__3_3_u_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v2p0__3_3_u_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%vec1 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 3>
@@ -5913,23 +6719,57 @@ define void @s_shuffle_v4p0_v2p0__3_3_u_3() {
}
define void @s_shuffle_v4p0_v2p0__3_3_0_3() {
-; GFX9-LABEL: s_shuffle_v4p0_v2p0__3_3_0_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v2p0__3_3_0_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v2p0__3_3_0_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v2p0__3_3_0_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%vec1 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 3>
@@ -5987,12 +6827,9 @@ define void @s_shuffle_v4p0_v2p0__3_3_1_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:3]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -6005,20 +6842,48 @@ define void @s_shuffle_v4p0_v2p0__3_3_1_3() {
}
define void @s_shuffle_v4p0_v2p0__3_3_2_3() {
-; GFX9-LABEL: s_shuffle_v4p0_v2p0__3_3_2_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v2p0__3_3_2_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v2p0__3_3_2_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v2p0__3_3_2_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <2 x ptr> asm "; def $0", "=s"()
%vec1 = call <2 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 3>
diff --git a/llvm/test/CodeGen/AMDGPU/shufflevector.v4p0.v3p0.ll b/llvm/test/CodeGen/AMDGPU/shufflevector.v4p0.v3p0.ll
index 827d8452efbe5..98a637ae04fb5 100644
--- a/llvm/test/CodeGen/AMDGPU/shufflevector.v4p0.v3p0.ll
+++ b/llvm/test/CodeGen/AMDGPU/shufflevector.v4p0.v3p0.ll
@@ -7485,8 +7485,7 @@ define void @s_shuffle_v4p0_v3p0__1_u_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -7584,8 +7583,7 @@ define void @s_shuffle_v4p0_v3p0__4_u_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -7677,11 +7675,11 @@ define void @s_shuffle_v4p0_v3p0__5_0_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -7783,11 +7781,11 @@ define void @s_shuffle_v4p0_v3p0__5_2_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s13
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -7800,18 +7798,43 @@ define void @s_shuffle_v4p0_v3p0__5_2_u_u() {
}
define void @s_shuffle_v4p0_v3p0__5_3_u_u() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_3_u_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_3_u_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_3_u_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_3_u_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 3, i32 poison, i32 poison>
@@ -7820,18 +7843,43 @@ define void @s_shuffle_v4p0_v3p0__5_3_u_u() {
}
define void @s_shuffle_v4p0_v3p0__5_4_u_u() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_4_u_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_4_u_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_4_u_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_4_u_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 4, i32 poison, i32 poison>
@@ -7840,18 +7888,43 @@ define void @s_shuffle_v4p0_v3p0__5_4_u_u() {
}
define void @s_shuffle_v4p0_v3p0__5_5_u_u() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_5_u_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_u_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_u_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_u_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 poison, i32 poison>
@@ -7860,21 +7933,52 @@ define void @s_shuffle_v4p0_v3p0__5_5_u_u() {
}
define void @s_shuffle_v4p0_v3p0__5_5_0_u() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_5_0_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_0_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_0_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_0_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 0, i32 poison>
@@ -7925,13 +8029,11 @@ define void @s_shuffle_v4p0_v3p0__5_5_1_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -7986,8 +8088,7 @@ define void @s_shuffle_v4p0_v3p0__5_5_2_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -8000,782 +8101,292 @@ define void @s_shuffle_v4p0_v3p0__5_5_2_u() {
}
define void @s_shuffle_v4p0_v3p0__5_5_3_u() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_5_3_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 3, i32 poison>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_5_4_u() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_5_4_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 4, i32 poison>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_5_5_u() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_5_5_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 5, i32 poison>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_5_5_0() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_5_0:
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_3_u:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:21]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s10, s8
; GFX900-NEXT: s_mov_b32 s11, s9
-; GFX900-NEXT: s_mov_b32 s12, s8
-; GFX900-NEXT: s_mov_b32 s13, s9
-; GFX900-NEXT: s_mov_b32 s14, s16
-; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_5_0:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_3_u:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:21]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s10, s8
; GFX90A-NEXT: s_mov_b32 s11, s9
-; GFX90A-NEXT: s_mov_b32 s12, s8
-; GFX90A-NEXT: s_mov_b32 s13, s9
-; GFX90A-NEXT: s_mov_b32 s14, s16
-; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_5_0:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_3_u:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s0
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
-; GFX942-NEXT: s_mov_b32 s12, s8
-; GFX942-NEXT: s_mov_b32 s13, s9
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 5, i32 0>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 3, i32 poison>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_5_5_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_5_5_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 5, i32 1>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_5_5_2() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_5_5_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: s_mov_b32 s14, s16
-; GFX9-NEXT: s_mov_b32 s15, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 5, i32 2>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_5_5_3() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_5_5_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: s_mov_b32 s14, s4
-; GFX9-NEXT: s_mov_b32 s15, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 5, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_5_5_4() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_5_5_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: s_mov_b32 s14, s6
-; GFX9-NEXT: s_mov_b32 s15, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 5, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_5_5_5() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_5_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: s_mov_b32 s14, s8
-; GFX9-NEXT: s_mov_b32 s15, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__u_0_0_0() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__u_0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 poison, i32 0, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__0_0_0_0() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__0_0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: s_mov_b32 s14, s8
-; GFX9-NEXT: s_mov_b32 s15, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> zeroinitializer
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__1_0_0_0() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__1_0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__2_0_0_0() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__2_0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: s_mov_b32 s14, s4
-; GFX9-NEXT: s_mov_b32 s15, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 2, i32 0, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__3_0_0_0() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__3_0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 3, i32 0, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__4_0_0_0() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__4_0_0_0:
+define void @s_shuffle_v4p0_v3p0__5_5_4_u() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_4_u:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:17]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s6
-; GFX900-NEXT: s_mov_b32 s9, s7
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__4_0_0_0:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_4_u:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:17]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s6
-; GFX90A-NEXT: s_mov_b32 s9, s7
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__4_0_0_0:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_4_u:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:17]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 4, i32 0, i32 0, i32 0>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 4, i32 poison>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_0_0_0() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4p0_v3p0__5_5_5_u() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_5_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_5_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_5_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 0, i32 0, i32 0>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 5, i32 poison>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_u_0_0() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_u_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 poison, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_1_0_0() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_1_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 1, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_2_0_0() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_2_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s16
-; GFX9-NEXT: s_mov_b32 s11, s17
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 2, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_3_0_0() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_3_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 3, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_4_0_0() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_4_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 4, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_5_0_0() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_5_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_5_u_0() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_u_0:
+define void @s_shuffle_v4p0_v3p0__5_5_5_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_5_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ; def s[16:21]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s10, s8
; GFX900-NEXT: s_mov_b32 s11, s9
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_u_0:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_5_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ; def s[16:21]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s10, s8
; GFX90A-NEXT: s_mov_b32 s11, s9
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_u_0:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_5_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s0
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 poison, i32 0>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 5, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_5_1_0() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_1_0:
+define void @s_shuffle_v4p0_v3p0__5_5_5_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_5_1:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:21]
+; GFX900-NEXT: ; def s[12:17]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s10, s8
; GFX900-NEXT: s_mov_b32 s11, s9
-; GFX900-NEXT: s_mov_b32 s12, s18
-; GFX900-NEXT: s_mov_b32 s13, s19
-; GFX900-NEXT: s_mov_b32 s14, s16
-; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_1_0:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_5_1:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:21]
+; GFX90A-NEXT: ; def s[12:17]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s10, s8
; GFX90A-NEXT: s_mov_b32 s11, s9
-; GFX90A-NEXT: s_mov_b32 s12, s18
-; GFX90A-NEXT: s_mov_b32 s13, s19
-; GFX90A-NEXT: s_mov_b32 s14, s16
-; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_1_0:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_5_1:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ; def s[12:17]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
-; GFX942-NEXT: s_mov_b32 s13, s3
-; GFX942-NEXT: s_mov_b32 s14, s0
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 1, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_5_2_0() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_5_2_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[16:21]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s20
-; GFX9-NEXT: s_mov_b32 s13, s21
-; GFX9-NEXT: s_mov_b32 s14, s16
-; GFX9-NEXT: s_mov_b32 s15, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 2, i32 0>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 5, i32 1>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_5_3_0() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_3_0:
+define void @s_shuffle_v4p0_v3p0__5_5_5_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_5_2:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:21]
+; GFX900-NEXT: ; def s[12:17]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s10, s8
; GFX900-NEXT: s_mov_b32 s11, s9
-; GFX900-NEXT: s_mov_b32 s12, s4
-; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
; GFX900-NEXT: s_mov_b32 s14, s16
; GFX900-NEXT: s_mov_b32 s15, s17
; GFX900-NEXT: ;;#ASMSTART
@@ -8783,19 +8394,19 @@ define void @s_shuffle_v4p0_v3p0__5_5_3_0() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_3_0:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_5_2:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:21]
+; GFX90A-NEXT: ; def s[12:17]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s10, s8
; GFX90A-NEXT: s_mov_b32 s11, s9
-; GFX90A-NEXT: s_mov_b32 s12, s4
-; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
; GFX90A-NEXT: s_mov_b32 s14, s16
; GFX90A-NEXT: s_mov_b32 s15, s17
; GFX90A-NEXT: ;;#ASMSTART
@@ -8803,1367 +8414,4735 @@ define void @s_shuffle_v4p0_v3p0__5_5_3_0() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_3_0:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_5_2:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ; def s[12:17]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s0
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 3, i32 0>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 5, i32 2>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_5_4_0() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_4_0:
+define void @s_shuffle_v4p0_v3p0__5_5_5_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_5_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:21]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s10, s8
; GFX900-NEXT: s_mov_b32 s11, s9
-; GFX900-NEXT: s_mov_b32 s12, s6
-; GFX900-NEXT: s_mov_b32 s13, s7
-; GFX900-NEXT: s_mov_b32 s14, s16
-; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_4_0:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_5_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:21]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s10, s8
; GFX90A-NEXT: s_mov_b32 s11, s9
-; GFX90A-NEXT: s_mov_b32 s12, s6
-; GFX90A-NEXT: s_mov_b32 s13, s7
-; GFX90A-NEXT: s_mov_b32 s14, s16
-; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_4_0:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_5_3:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s0
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 4, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__u_1_1_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__u_1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 poison, i32 1, i32 1, i32 1>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__0_1_1_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__0_1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 0, i32 1, i32 1, i32 1>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 5, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__1_1_1_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__1_1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__2_1_1_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__2_1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: s_mov_b32 s14, s6
-; GFX9-NEXT: s_mov_b32 s15, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4p0_v3p0__5_5_5_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_5_4:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_5_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_5_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 2, i32 1, i32 1, i32 1>
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 5, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__3_1_1_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__3_1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4p0_v3p0__5_5_5_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_5_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: s_mov_b32 s14, s8
+; GFX900-NEXT: s_mov_b32 s15, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_5_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: s_mov_b32 s14, s8
+; GFX90A-NEXT: s_mov_b32 s15, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_5_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 3, i32 1, i32 1, i32 1>
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__4_1_1_1() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__4_1_1_1:
+define void @s_shuffle_v4p0_v3p0__u_0_0_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__u_0_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:13]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ; def s[12:17]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s6
-; GFX900-NEXT: s_mov_b32 s9, s7
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
-; GFX900-NEXT: s_mov_b32 s14, s10
-; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__4_1_1_1:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__u_0_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:13]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ; def s[12:17]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s6
-; GFX90A-NEXT: s_mov_b32 s9, s7
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
-; GFX90A-NEXT: s_mov_b32 s14, s10
-; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__4_1_1_1:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__u_0_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:13]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ; def s[12:17]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 4, i32 1, i32 1, i32 1>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 poison, i32 0, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_1_1_1() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_1_1_1:
+define void @s_shuffle_v4p0_v3p0__0_0_0_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__0_0_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:13]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:9]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
-; GFX900-NEXT: s_mov_b32 s14, s10
-; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: s_mov_b32 s14, s8
+; GFX900-NEXT: s_mov_b32 s15, s9
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_1_1_1:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__0_0_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:13]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:9]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
-; GFX90A-NEXT: s_mov_b32 s14, s10
-; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: s_mov_b32 s14, s8
+; GFX90A-NEXT: s_mov_b32 s15, s9
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_1_1_1:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__0_0_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:9]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s13, s11
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 1, i32 1, i32 1>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> zeroinitializer
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_u_1_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_u_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4p0_v3p0__1_0_0_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__1_0_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__1_0_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__1_0_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 poison, i32 1, i32 1>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_0_1_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_0_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
+define void @s_shuffle_v4p0_v3p0__2_0_0_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__2_0_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__2_0_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__2_0_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 2, i32 0, i32 0, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__3_0_0_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__3_0_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__3_0_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__3_0_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 3, i32 0, i32 0, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__4_0_0_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__4_0_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__4_0_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__4_0_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 4, i32 0, i32 0, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_0_0_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_0_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_0_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_0_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 0, i32 0, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_u_0_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_u_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_u_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_u_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 poison, i32 0, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_1_0_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_1_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_1_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_1_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 1, i32 0, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_2_0_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_2_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s16
+; GFX900-NEXT: s_mov_b32 s11, s17
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_2_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s16
+; GFX90A-NEXT: s_mov_b32 s11, s17
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_2_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[16:17]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 2, i32 0, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_3_0_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_3_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_3_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_3_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 3, i32 0, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_4_0_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_4_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_4_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_4_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 4, i32 0, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_5_0_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 0, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_5_u_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_u_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_u_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_u_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 poison, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_5_1_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_1_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[16:21]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s18
+; GFX900-NEXT: s_mov_b32 s13, s19
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_1_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[16:21]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s18
+; GFX90A-NEXT: s_mov_b32 s13, s19
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_1_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 1, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_5_2_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_2_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[16:21]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s20
+; GFX900-NEXT: s_mov_b32 s13, s21
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_2_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[16:21]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s20
+; GFX90A-NEXT: s_mov_b32 s13, s21
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_2_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[16:21]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[20:21]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 2, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_5_3_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_3_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[16:21]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_3_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[16:21]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_3_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 3, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_5_4_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_4_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[16:21]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_4_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[16:21]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_4_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 4, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__u_1_1_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__u_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__u_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__u_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 poison, i32 1, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__0_1_1_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__0_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__0_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__0_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 0, i32 1, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__1_1_1_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__1_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__1_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__1_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__2_1_1_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__2_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__2_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__2_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 2, i32 1, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__3_1_1_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__3_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__3_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__3_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 3, i32 1, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__4_1_1_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__4_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__4_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__4_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 4, i32 1, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_1_1_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 1, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_u_1_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_u_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_u_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_u_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 poison, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_0_1_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_0_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_0_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_0_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 0, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_2_1_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_2_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s16
+; GFX900-NEXT: s_mov_b32 s11, s17
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_2_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s16
+; GFX90A-NEXT: s_mov_b32 s11, s17
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_2_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[16:17]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 2, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_3_1_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_3_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_3_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_3_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 3, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_4_1_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_4_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_4_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_4_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 4, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_5_1_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_5_u_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_u_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_u_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_u_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 poison, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_5_0_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_0_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_0_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_0_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 0, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_5_2_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_2_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s16
+; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_2_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s16
+; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_2_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 2, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_5_3_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_3_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_3_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_3_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 3, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_5_4_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_4_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_4_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_4_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 4, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__u_2_2_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__u_2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__u_2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__u_2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 poison, i32 2, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__0_2_2_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__0_2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__0_2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__0_2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 0, i32 2, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__1_2_2_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__1_2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__1_2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__1_2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 1, i32 2, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__2_2_2_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__2_2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: s_mov_b32 s14, s8
+; GFX900-NEXT: s_mov_b32 s15, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__2_2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: s_mov_b32 s14, s8
+; GFX90A-NEXT: s_mov_b32 s15, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__2_2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 2, i32 2, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__3_2_2_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__3_2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__3_2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__3_2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 3, i32 2, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__4_2_2_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__4_2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__4_2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__4_2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 4, i32 2, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_2_2_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 2, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_u_2_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_u_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_u_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_u_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 poison, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_0_2_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_0_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s16
+; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_0_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s16
+; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_0_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[16:17]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 0, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_1_2_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_1_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_1_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_1_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 1, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_3_2_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_3_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_3_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_3_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 3, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_4_2_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_4_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_4_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_4_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 4, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_5_2_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_5_u_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_u_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_u_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_u_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 poison, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_5_0_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_0_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_0_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_0_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 0, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_5_1_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_1_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_1_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_1_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 1, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_5_3_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_3_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_3_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_3_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 3, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_5_4_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_4_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_4_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_4_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 4, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__u_3_3_3() {
+; GFX9-LABEL: s_shuffle_v4p0_v3p0__u_3_3_3:
+; GFX9: ; %bb.0:
+; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX9-NEXT: ;;#ASMSTART
+; GFX9-NEXT: ; use s[8:15]
+; GFX9-NEXT: ;;#ASMEND
; GFX9-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 0, i32 1, i32 1>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 poison, i32 3, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__0_3_3_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__0_3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__0_3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__0_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 0, i32 3, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__1_3_3_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__1_3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__1_3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__1_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 1, i32 3, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__2_3_3_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__2_3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__2_3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__2_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 2, i32 3, i32 3, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_2_1_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_2_1_1:
+define void @s_shuffle_v4p0_v3p0__3_3_3_3() {
+; GFX9-LABEL: s_shuffle_v4p0_v3p0__3_3_3_3:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s16
-; GFX9-NEXT: s_mov_b32 s11, s17
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
; GFX9-NEXT: ; use s[8:15]
; GFX9-NEXT: ;;#ASMEND
; GFX9-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 3, i32 3, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__4_3_3_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__4_3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__4_3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__4_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 2, i32 1, i32 1>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 4, i32 3, i32 3, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_3_1_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_3_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4p0_v3p0__5_3_3_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 3, i32 1, i32 1>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 3, i32 3, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_4_1_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_4_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4p0_v3p0__5_u_3_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_u_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_u_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_u_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 poison, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_0_3_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_0_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_0_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_0_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <3 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 0, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v3p0__5_1_3_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_1_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_1_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_1_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 4, i32 1, i32 1>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 1, i32 3, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_5_1_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_5_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4p0_v3p0__5_2_3_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_2_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_2_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_2_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 1, i32 1>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 2, i32 3, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_5_u_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_5_u_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4p0_v3p0__5_4_3_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_4_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_4_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_4_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 poison, i32 1>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 4, i32 3, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_5_0_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_5_0_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4p0_v3p0__5_5_3_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 0, i32 1>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 3, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_5_2_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_5_2_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s16
-; GFX9-NEXT: s_mov_b32 s13, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4p0_v3p0__5_5_u_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_u_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_u_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_u_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 2, i32 1>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 poison, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_5_3_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_5_3_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4p0_v3p0__5_5_0_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_0_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_0_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_0_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 3, i32 1>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 0, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_5_4_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_5_4_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4p0_v3p0__5_5_1_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_1_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_1_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_1_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 4, i32 1>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__u_2_2_2() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__u_2_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 poison, i32 2, i32 2, i32 2>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__0_2_2_2() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__0_2_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 0, i32 2, i32 2, i32 2>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 1, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__1_2_2_2() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__1_2_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4p0_v3p0__5_5_2_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_2_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_2_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_2_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 1, i32 2, i32 2, i32 2>
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 2, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__2_2_2_2() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__2_2_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: s_mov_b32 s14, s8
-; GFX9-NEXT: s_mov_b32 s15, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4p0_v3p0__5_5_4_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_4_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_4_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_4_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 2, i32 2, i32 2, i32 2>
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 4, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__3_2_2_2() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__3_2_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4p0_v3p0__u_4_4_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__u_4_4_4:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__u_4_4_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__u_4_4_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 3, i32 2, i32 2, i32 2>
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 poison, i32 4, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__4_2_2_2() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__4_2_2_2:
+define void @s_shuffle_v4p0_v3p0__0_4_4_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__0_4_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ; def s[12:17]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s6
-; GFX900-NEXT: s_mov_b32 s9, s7
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__4_2_2_2:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__0_4_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ; def s[12:17]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s6
-; GFX90A-NEXT: s_mov_b32 s9, s7
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__4_2_2_2:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__0_4_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ; def s[12:17]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 4, i32 2, i32 2, i32 2>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 0, i32 4, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_2_2_2() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_2_2_2:
+define void @s_shuffle_v4p0_v3p0__1_4_4_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__1_4_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ; def s[8:13]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_2_2_2:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__1_4_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ; def s[8:13]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_2_2_2:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__1_4_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 2, i32 2, i32 2>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 1, i32 4, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_u_2_2() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_u_2_2:
+define void @s_shuffle_v4p0_v3p0__2_4_4_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__2_4_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ; def s[12:17]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_u_2_2:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__2_4_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ; def s[12:17]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_u_2_2:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__2_4_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ; def s[12:17]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s12
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 poison, i32 2, i32 2>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_0_2_2() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_0_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s12, s16
-; GFX9-NEXT: s_mov_b32 s13, s17
-; GFX9-NEXT: s_mov_b32 s14, s16
-; GFX9-NEXT: s_mov_b32 s15, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 0, i32 2, i32 2>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 2, i32 4, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_1_2_2() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_1_2_2:
+define void @s_shuffle_v4p0_v3p0__3_4_4_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__3_4_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:13]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:9]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_1_2_2:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__3_4_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:13]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:9]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_1_2_2:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__3_4_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:9]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 1, i32 2, i32 2>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 3, i32 4, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_3_2_2() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_3_2_2:
+define void @s_shuffle_v4p0_v3p0__4_4_4_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__4_4_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:13]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:9]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s4
-; GFX900-NEXT: s_mov_b32 s11, s5
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_3_2_2:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__4_4_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:13]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:9]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s4
-; GFX90A-NEXT: s_mov_b32 s11, s5
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_3_2_2:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__4_4_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:9]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 3, i32 2, i32 2>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 4, i32 4, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_4_2_2() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_4_2_2:
+define void @s_shuffle_v4p0_v3p0__5_4_4_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_4_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:13]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s10, s6
; GFX900-NEXT: s_mov_b32 s11, s7
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_4_2_2:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_4_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:13]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s10, s6
; GFX90A-NEXT: s_mov_b32 s11, s7
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_4_2_2:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_4_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:13]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s6
-; GFX942-NEXT: s_mov_b32 s11, s7
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 4, i32 2, i32 2>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 4, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_5_2_2() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_2_2:
+define void @s_shuffle_v4p0_v3p0__5_u_4_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_u_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:13]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s8
-; GFX900-NEXT: s_mov_b32 s11, s9
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_2_2:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_u_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:13]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s8
-; GFX90A-NEXT: s_mov_b32 s11, s9
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_2_2:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_u_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:13]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 2, i32 2>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 poison, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_5_u_2() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_u_2:
+define void @s_shuffle_v4p0_v3p0__5_0_4_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_0_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ; def s[12:17]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s8
-; GFX900-NEXT: s_mov_b32 s11, s9
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_u_2:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_0_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ; def s[12:17]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s8
-; GFX90A-NEXT: s_mov_b32 s11, s9
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_u_2:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_0_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s12
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 poison, i32 2>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_5_0_2() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_5_0_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s14, s16
-; GFX9-NEXT: s_mov_b32 s15, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 0, i32 2>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_5_1_2() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_5_1_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: s_mov_b32 s14, s16
-; GFX9-NEXT: s_mov_b32 s15, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 1, i32 2>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_5_3_2() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_5_3_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: s_mov_b32 s14, s16
-; GFX9-NEXT: s_mov_b32 s15, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 3, i32 2>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_5_4_2() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_5_4_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: s_mov_b32 s14, s16
-; GFX9-NEXT: s_mov_b32 s15, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 4, i32 2>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__u_3_3_3() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__u_3_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 poison, i32 3, i32 3, i32 3>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 0, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__0_3_3_3() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__0_3_3_3:
+define void @s_shuffle_v4p0_v3p0__5_1_4_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_1_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
+; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__0_3_3_3:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_1_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
+; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__0_3_3_3:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_1_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
@@ -10171,477 +13150,306 @@ define void @s_shuffle_v4p0_v3p0__0_3_3_3() {
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 0, i32 3, i32 3, i32 3>
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 1, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__1_3_3_3() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__1_3_3_3:
+define void @s_shuffle_v4p0_v3p0__5_2_4_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_2_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s6
-; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__1_3_3_3:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_2_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s6
-; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__1_3_3_3:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_2_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 1, i32 3, i32 3, i32 3>
+ %vec1 = call <3 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 2, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__2_3_3_3() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__2_3_3_3:
+define void @s_shuffle_v4p0_v3p0__5_3_4_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_3_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__2_3_3_3:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_3_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__2_3_3_3:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_3_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 2, i32 3, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__3_3_3_3() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__3_3_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> poison, <4 x i32> <i32 3, i32 3, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__4_3_3_3() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__4_3_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 4, i32 3, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_3_3_3() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_3_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: s_mov_b32 s14, s4
-; GFX9-NEXT: s_mov_b32 s15, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 3, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_u_3_3() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_u_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: s_mov_b32 s14, s4
-; GFX9-NEXT: s_mov_b32 s15, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 poison, i32 3, i32 3>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 3, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_0_3_3() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_0_3_3:
+define void @s_shuffle_v4p0_v3p0__5_5_4_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:17]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s12, s4
-; GFX900-NEXT: s_mov_b32 s13, s5
-; GFX900-NEXT: s_mov_b32 s14, s4
-; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_0_3_3:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:17]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s4
-; GFX90A-NEXT: s_mov_b32 s13, s5
-; GFX90A-NEXT: s_mov_b32 s14, s4
-; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_0_3_3:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 0, i32 3, i32 3>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_1_3_3() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_1_3_3:
+define void @s_shuffle_v4p0_v3p0__5_5_u_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_u_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:13]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s12, s4
-; GFX900-NEXT: s_mov_b32 s13, s5
-; GFX900-NEXT: s_mov_b32 s14, s4
-; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_1_3_3:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_u_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:13]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s12, s4
-; GFX90A-NEXT: s_mov_b32 s13, s5
-; GFX90A-NEXT: s_mov_b32 s14, s4
-; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_1_3_3:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_u_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:13]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 1, i32 3, i32 3>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 poison, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_2_3_3() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_2_3_3:
+define void @s_shuffle_v4p0_v3p0__5_5_0_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_0_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ; def s[12:17]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s12, s4
-; GFX900-NEXT: s_mov_b32 s13, s5
-; GFX900-NEXT: s_mov_b32 s14, s4
-; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_2_3_3:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_0_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ; def s[12:17]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s4
-; GFX90A-NEXT: s_mov_b32 s13, s5
-; GFX90A-NEXT: s_mov_b32 s14, s4
-; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_2_3_3:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_0_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:13]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:9]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; use s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 2, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_4_3_3() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_4_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: s_mov_b32 s14, s4
-; GFX9-NEXT: s_mov_b32 s15, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 4, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_5_3_3() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_5_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: s_mov_b32 s14, s4
-; GFX9-NEXT: s_mov_b32 s15, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_5_u_3() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_5_u_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s14, s4
-; GFX9-NEXT: s_mov_b32 s15, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 poison, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_5_0_3() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_5_0_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s14, s4
-; GFX9-NEXT: s_mov_b32 s15, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 0, i32 3>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 0, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_5_1_3() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_1_3:
+define void @s_shuffle_v4p0_v3p0__5_5_1_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_1_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
@@ -10654,14 +13462,14 @@ define void @s_shuffle_v4p0_v3p0__5_5_1_3() {
; GFX900-NEXT: s_mov_b32 s11, s9
; GFX900-NEXT: s_mov_b32 s12, s14
; GFX900-NEXT: s_mov_b32 s13, s15
-; GFX900-NEXT: s_mov_b32 s14, s4
-; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_1_3:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_1_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
@@ -10674,41 +13482,38 @@ define void @s_shuffle_v4p0_v3p0__5_5_1_3() {
; GFX90A-NEXT: s_mov_b32 s11, s9
; GFX90A-NEXT: s_mov_b32 s12, s14
; GFX90A-NEXT: s_mov_b32 s13, s15
-; GFX90A-NEXT: s_mov_b32 s14, s4
-; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_1_3:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_1_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
-; GFX942-NEXT: s_mov_b32 s13, s3
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 1, i32 3>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 1, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_5_2_3() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_2_3:
+define void @s_shuffle_v4p0_v3p0__5_5_2_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_2_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
@@ -10719,14 +13524,14 @@ define void @s_shuffle_v4p0_v3p0__5_5_2_3() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s10, s8
; GFX900-NEXT: s_mov_b32 s11, s9
-; GFX900-NEXT: s_mov_b32 s14, s4
-; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_2_3:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_2_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
@@ -10737,14 +13542,14 @@ define void @s_shuffle_v4p0_v3p0__5_5_2_3() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s10, s8
; GFX90A-NEXT: s_mov_b32 s11, s9
-; GFX90A-NEXT: s_mov_b32 s14, s4
-; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_2_3:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_2_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
@@ -10754,1061 +13559,724 @@ define void @s_shuffle_v4p0_v3p0__5_5_2_3() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 2, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_5_4_3() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_5_4_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: s_mov_b32 s14, s4
-; GFX9-NEXT: s_mov_b32 s15, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 4, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__u_4_4_4() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__u_4_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 poison, i32 4, i32 4, i32 4>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 2, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__0_4_4_4() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__0_4_4_4:
+define void @s_shuffle_v4p0_v3p0__5_5_3_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_3_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:13]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s14
-; GFX900-NEXT: s_mov_b32 s11, s15
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__0_4_4_4:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_3_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:13]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s14
-; GFX90A-NEXT: s_mov_b32 s11, s15
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__0_4_4_4:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_3_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:13]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:17]
+; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 0, i32 4, i32 4, i32 4>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 3, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__1_4_4_4() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__1_4_4_4:
+define void @s_shuffle_v4p0_v3p0__u_5_5_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__u_5_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:9]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:13]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s6
-; GFX900-NEXT: s_mov_b32 s9, s7
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
-; GFX900-NEXT: s_mov_b32 s14, s10
-; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__1_4_4_4:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__u_5_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:9]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:13]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s6
-; GFX90A-NEXT: s_mov_b32 s9, s7
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
-; GFX90A-NEXT: s_mov_b32 s14, s10
-; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__1_4_4_4:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__u_5_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 1, i32 4, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__2_4_4_4() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__2_4_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 2, i32 4, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__3_4_4_4() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__3_4_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 3, i32 4, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__4_4_4_4() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__4_4_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 4, i32 4, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_4_4_4() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_4_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: s_mov_b32 s14, s6
-; GFX9-NEXT: s_mov_b32 s15, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 4, i32 4, i32 4>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 poison, i32 5, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_u_4_4() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_u_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: s_mov_b32 s14, s6
-; GFX9-NEXT: s_mov_b32 s15, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4p0_v3p0__0_5_5_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__0_5_5_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s16
+; GFX900-NEXT: s_mov_b32 s11, s17
+; GFX900-NEXT: s_mov_b32 s12, s16
+; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__0_5_5_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s16
+; GFX90A-NEXT: s_mov_b32 s11, s17
+; GFX90A-NEXT: s_mov_b32 s12, s16
+; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__0_5_5_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 poison, i32 4, i32 4>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 0, i32 5, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_0_4_4() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_0_4_4:
+define void @s_shuffle_v4p0_v3p0__1_5_5_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__1_5_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ; def s[8:13]
; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
; GFX900-NEXT: s_mov_b32 s10, s12
; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s12, s6
-; GFX900-NEXT: s_mov_b32 s13, s7
-; GFX900-NEXT: s_mov_b32 s14, s6
-; GFX900-NEXT: s_mov_b32 s15, s7
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_0_4_4:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__1_5_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ; def s[8:13]
; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
; GFX90A-NEXT: s_mov_b32 s10, s12
; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s6
-; GFX90A-NEXT: s_mov_b32 s13, s7
-; GFX90A-NEXT: s_mov_b32 s14, s6
-; GFX90A-NEXT: s_mov_b32 s15, s7
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_0_4_4:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__1_5_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
-; GFX942-NEXT: s_mov_b32 s14, s6
-; GFX942-NEXT: s_mov_b32 s15, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 0, i32 4, i32 4>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 1, i32 5, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_1_4_4() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_1_4_4:
+define void @s_shuffle_v4p0_v3p0__2_5_5_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__2_5_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ; def s[12:17]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s12, s6
-; GFX900-NEXT: s_mov_b32 s13, s7
-; GFX900-NEXT: s_mov_b32 s14, s6
-; GFX900-NEXT: s_mov_b32 s15, s7
+; GFX900-NEXT: s_mov_b32 s10, s16
+; GFX900-NEXT: s_mov_b32 s11, s17
+; GFX900-NEXT: s_mov_b32 s12, s16
+; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_1_4_4:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__2_5_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ; def s[12:17]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s12, s6
-; GFX90A-NEXT: s_mov_b32 s13, s7
-; GFX90A-NEXT: s_mov_b32 s14, s6
-; GFX90A-NEXT: s_mov_b32 s15, s7
+; GFX90A-NEXT: s_mov_b32 s10, s16
+; GFX90A-NEXT: s_mov_b32 s11, s17
+; GFX90A-NEXT: s_mov_b32 s12, s16
+; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_1_4_4:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__2_5_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
-; GFX942-NEXT: s_mov_b32 s14, s6
-; GFX942-NEXT: s_mov_b32 s15, s7
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 1, i32 4, i32 4>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 2, i32 5, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_2_4_4() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_2_4_4:
+define void @s_shuffle_v4p0_v3p0__3_5_5_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__3_5_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:13]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:9]
-; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s10, s12
; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s12, s6
-; GFX900-NEXT: s_mov_b32 s13, s7
-; GFX900-NEXT: s_mov_b32 s14, s6
-; GFX900-NEXT: s_mov_b32 s15, s7
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_2_4_4:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__3_5_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:13]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:9]
-; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s10, s12
; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s6
-; GFX90A-NEXT: s_mov_b32 s13, s7
-; GFX90A-NEXT: s_mov_b32 s14, s6
-; GFX90A-NEXT: s_mov_b32 s15, s7
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_2_4_4:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__3_5_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:9]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
-; GFX942-NEXT: s_mov_b32 s14, s6
-; GFX942-NEXT: s_mov_b32 s15, s7
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 2, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_3_4_4() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_3_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: s_mov_b32 s14, s6
-; GFX9-NEXT: s_mov_b32 s15, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 3, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_5_4_4() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_5_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: s_mov_b32 s14, s6
-; GFX9-NEXT: s_mov_b32 s15, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_5_u_4() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_5_u_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s14, s6
-; GFX9-NEXT: s_mov_b32 s15, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 poison, i32 4>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 3, i32 5, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_5_0_4() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_5_0_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s14, s6
-; GFX9-NEXT: s_mov_b32 s15, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4p0_v3p0__4_5_5_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__4_5_5_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__4_5_5_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__4_5_5_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 0, i32 4>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 4, i32 5, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_5_1_4() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_1_4:
+define void @s_shuffle_v4p0_v3p0__5_u_5_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_u_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:17]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s8
-; GFX900-NEXT: s_mov_b32 s11, s9
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
-; GFX900-NEXT: s_mov_b32 s14, s6
-; GFX900-NEXT: s_mov_b32 s15, s7
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: s_mov_b32 s14, s8
+; GFX900-NEXT: s_mov_b32 s15, s9
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_1_4:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_u_5_5:
; GFX90A: ; %bb.0:
-; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:17]
-; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s8
-; GFX90A-NEXT: s_mov_b32 s11, s9
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
-; GFX90A-NEXT: s_mov_b32 s14, s6
-; GFX90A-NEXT: s_mov_b32 s15, s7
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: s_mov_b32 s14, s8
+; GFX90A-NEXT: s_mov_b32 s15, s9
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_1_4:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_u_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
-; GFX942-NEXT: s_mov_b32 s13, s3
-; GFX942-NEXT: s_mov_b32 s14, s6
-; GFX942-NEXT: s_mov_b32 s15, s7
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 1, i32 4>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 poison, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_5_2_4() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_2_4:
+define void @s_shuffle_v4p0_v3p0__5_0_5_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_0_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ; def s[12:17]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s8
-; GFX900-NEXT: s_mov_b32 s11, s9
-; GFX900-NEXT: s_mov_b32 s14, s6
-; GFX900-NEXT: s_mov_b32 s15, s7
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: s_mov_b32 s14, s8
+; GFX900-NEXT: s_mov_b32 s15, s9
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_2_4:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_0_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ; def s[12:17]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s8
-; GFX90A-NEXT: s_mov_b32 s11, s9
-; GFX90A-NEXT: s_mov_b32 s14, s6
-; GFX90A-NEXT: s_mov_b32 s15, s7
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: s_mov_b32 s14, s8
+; GFX90A-NEXT: s_mov_b32 s15, s9
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_2_4:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_0_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
-; GFX942-NEXT: s_mov_b32 s14, s6
-; GFX942-NEXT: s_mov_b32 s15, s7
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 2, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_5_3_4() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_5_3_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: s_mov_b32 s14, s6
-; GFX9-NEXT: s_mov_b32 s15, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 3, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__u_5_5_5() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__u_5_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 poison, i32 5, i32 5, i32 5>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 0, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__0_5_5_5() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__0_5_5_5:
+define void @s_shuffle_v4p0_v3p0__5_1_5_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_1_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:17]
+; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s16
-; GFX900-NEXT: s_mov_b32 s11, s17
-; GFX900-NEXT: s_mov_b32 s12, s16
-; GFX900-NEXT: s_mov_b32 s13, s17
-; GFX900-NEXT: s_mov_b32 s14, s16
-; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: s_mov_b32 s14, s8
+; GFX900-NEXT: s_mov_b32 s15, s9
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__0_5_5_5:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_1_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:17]
+; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s16
-; GFX90A-NEXT: s_mov_b32 s11, s17
-; GFX90A-NEXT: s_mov_b32 s12, s16
-; GFX90A-NEXT: s_mov_b32 s13, s17
-; GFX90A-NEXT: s_mov_b32 s14, s16
-; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: s_mov_b32 s14, s8
+; GFX90A-NEXT: s_mov_b32 s15, s9
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__0_5_5_5:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_1_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 0, i32 5, i32 5, i32 5>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 1, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__1_5_5_5() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__1_5_5_5:
+define void @s_shuffle_v4p0_v3p0__5_2_5_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_2_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ; def s[8:13]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s6
-; GFX900-NEXT: s_mov_b32 s9, s7
; GFX900-NEXT: s_mov_b32 s10, s12
; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: s_mov_b32 s14, s8
+; GFX900-NEXT: s_mov_b32 s15, s9
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__1_5_5_5:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_2_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ; def s[8:13]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s6
-; GFX90A-NEXT: s_mov_b32 s9, s7
; GFX90A-NEXT: s_mov_b32 s10, s12
; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: s_mov_b32 s14, s8
+; GFX90A-NEXT: s_mov_b32 s15, s9
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__1_5_5_5:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_2_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:13]
; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
+; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 1, i32 5, i32 5, i32 5>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 2, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__2_5_5_5() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__2_5_5_5:
+define void @s_shuffle_v4p0_v3p0__5_3_5_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_3_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:17]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s16
-; GFX900-NEXT: s_mov_b32 s11, s17
-; GFX900-NEXT: s_mov_b32 s12, s16
-; GFX900-NEXT: s_mov_b32 s13, s17
-; GFX900-NEXT: s_mov_b32 s14, s16
-; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: s_mov_b32 s14, s8
+; GFX900-NEXT: s_mov_b32 s15, s9
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__2_5_5_5:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_3_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:17]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s16
-; GFX90A-NEXT: s_mov_b32 s11, s17
-; GFX90A-NEXT: s_mov_b32 s12, s16
-; GFX90A-NEXT: s_mov_b32 s13, s17
-; GFX90A-NEXT: s_mov_b32 s14, s16
-; GFX90A-NEXT: s_mov_b32 s15, s17
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; use s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_setpc_b64 s[30:31]
-;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__2_5_5_5:
-; GFX942: ; %bb.0:
-; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:9]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; use s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 2, i32 5, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__3_5_5_5() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__3_5_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 3, i32 5, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__4_5_5_5() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__4_5_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:13]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 4, i32 5, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_u_5_5() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_u_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: s_mov_b32 s14, s8
-; GFX9-NEXT: s_mov_b32 s15, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: s_mov_b32 s14, s8
+; GFX90A-NEXT: s_mov_b32 s15, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_3_5_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 poison, i32 5, i32 5>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 3, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_0_5_5() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_0_5_5:
+define void @s_shuffle_v4p0_v3p0__5_4_5_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_4_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:17]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
; GFX900-NEXT: s_mov_b32 s12, s8
; GFX900-NEXT: s_mov_b32 s13, s9
; GFX900-NEXT: s_mov_b32 s14, s8
@@ -11818,17 +14286,14 @@ define void @s_shuffle_v4p0_v3p0__5_0_5_5() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_0_5_5:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_4_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:17]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
; GFX90A-NEXT: s_mov_b32 s12, s8
; GFX90A-NEXT: s_mov_b32 s13, s9
; GFX90A-NEXT: s_mov_b32 s14, s8
@@ -11838,44 +14303,35 @@ define void @s_shuffle_v4p0_v3p0__5_0_5_5() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_0_5_5:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_4_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:5]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s8
-; GFX942-NEXT: s_mov_b32 s13, s9
-; GFX942-NEXT: s_mov_b32 s14, s8
-; GFX942-NEXT: s_mov_b32 s15, s9
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 0, i32 5, i32 5>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 4, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_1_5_5() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_1_5_5:
+define void @s_shuffle_v4p0_v3p0__5_5_u_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_u_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:13]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s12, s8
-; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
; GFX900-NEXT: s_mov_b32 s14, s8
; GFX900-NEXT: s_mov_b32 s15, s9
; GFX900-NEXT: ;;#ASMSTART
@@ -11883,17 +14339,14 @@ define void @s_shuffle_v4p0_v3p0__5_1_5_5() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_1_5_5:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_u_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:13]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s12, s8
-; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
; GFX90A-NEXT: s_mov_b32 s14, s8
; GFX90A-NEXT: s_mov_b32 s15, s9
; GFX90A-NEXT: ;;#ASMSTART
@@ -11901,45 +14354,37 @@ define void @s_shuffle_v4p0_v3p0__5_1_5_5() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_1_5_5:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_u_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:13]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s8
-; GFX942-NEXT: s_mov_b32 s13, s9
-; GFX942-NEXT: s_mov_b32 s14, s8
-; GFX942-NEXT: s_mov_b32 s15, s9
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 1, i32 5, i32 5>
+ %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 poison, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v3p0__5_2_5_5() {
-; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_2_5_5:
+define void @s_shuffle_v4p0_v3p0__5_5_0_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_0_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:13]
+; GFX900-NEXT: ; def s[12:17]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:9]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s12, s8
-; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
; GFX900-NEXT: s_mov_b32 s14, s8
; GFX900-NEXT: s_mov_b32 s15, s9
; GFX900-NEXT: ;;#ASMSTART
@@ -11947,19 +14392,17 @@ define void @s_shuffle_v4p0_v3p0__5_2_5_5() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_2_5_5:
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_0_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:13]
+; GFX90A-NEXT: ; def s[12:17]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:9]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s8
-; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
; GFX90A-NEXT: s_mov_b32 s14, s8
; GFX90A-NEXT: s_mov_b32 s15, s9
; GFX90A-NEXT: ;;#ASMSTART
@@ -11967,120 +14410,21 @@ define void @s_shuffle_v4p0_v3p0__5_2_5_5() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_2_5_5:
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_0_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:13]
+; GFX942-NEXT: ; def s[12:17]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s12, s8
-; GFX942-NEXT: s_mov_b32 s13, s9
-; GFX942-NEXT: s_mov_b32 s14, s8
-; GFX942-NEXT: s_mov_b32 s15, s9
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 2, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_3_5_5() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_3_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: s_mov_b32 s14, s8
-; GFX9-NEXT: s_mov_b32 s15, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 3, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_4_5_5() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_4_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: s_mov_b32 s14, s8
-; GFX9-NEXT: s_mov_b32 s15, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 4, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_5_u_5() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_5_u_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s14, s8
-; GFX9-NEXT: s_mov_b32 s15, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <3 x ptr> asm "; def $0", "=s"()
- %vec1 = call <3 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 poison, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v3p0__5_5_0_5() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_5_0_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:17]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s14, s8
-; GFX9-NEXT: s_mov_b32 s15, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 0, i32 5>
@@ -12135,15 +14479,12 @@ define void @s_shuffle_v4p0_v3p0__5_5_1_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:5]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
-; GFX942-NEXT: s_mov_b32 s13, s3
-; GFX942-NEXT: s_mov_b32 s14, s8
-; GFX942-NEXT: s_mov_b32 s15, s9
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -12202,10 +14543,8 @@ define void @s_shuffle_v4p0_v3p0__5_5_2_5() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:9]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s8
-; GFX942-NEXT: s_mov_b32 s11, s9
-; GFX942-NEXT: s_mov_b32 s14, s8
-; GFX942-NEXT: s_mov_b32 s15, s9
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -12218,22 +14557,53 @@ define void @s_shuffle_v4p0_v3p0__5_5_2_5() {
}
define void @s_shuffle_v4p0_v3p0__5_5_3_5() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_5_3_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: s_mov_b32 s14, s8
-; GFX9-NEXT: s_mov_b32 s15, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_3_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s8
+; GFX900-NEXT: s_mov_b32 s15, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_3_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s8
+; GFX90A-NEXT: s_mov_b32 s15, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_3_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 3, i32 5>
@@ -12242,22 +14612,53 @@ define void @s_shuffle_v4p0_v3p0__5_5_3_5() {
}
define void @s_shuffle_v4p0_v3p0__5_5_4_5() {
-; GFX9-LABEL: s_shuffle_v4p0_v3p0__5_5_4_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:9]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: s_mov_b32 s14, s8
-; GFX9-NEXT: s_mov_b32 s15, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v3p0__5_5_4_5:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:9]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s8
+; GFX900-NEXT: s_mov_b32 s15, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v3p0__5_5_4_5:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:9]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s8
+; GFX90A-NEXT: s_mov_b32 s15, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v3p0__5_5_4_5:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:9]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <3 x ptr> asm "; def $0", "=s"()
%vec1 = call <3 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <3 x ptr> %vec0, <3 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 4, i32 5>
diff --git a/llvm/test/CodeGen/AMDGPU/shufflevector.v4p0.v4p0.ll b/llvm/test/CodeGen/AMDGPU/shufflevector.v4p0.v4p0.ll
index 657643a055a36..5f02d3866cf45 100644
--- a/llvm/test/CodeGen/AMDGPU/shufflevector.v4p0.v4p0.ll
+++ b/llvm/test/CodeGen/AMDGPU/shufflevector.v4p0.v4p0.ll
@@ -12922,8 +12922,7 @@ define void @s_shuffle_v4p0_v4p0__1_u_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -13007,8 +13006,7 @@ define void @s_shuffle_v4p0_v4p0__3_u_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -13066,8 +13064,7 @@ define void @s_shuffle_v4p0_v4p0__5_u_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -13153,8 +13150,7 @@ define void @s_shuffle_v4p0_v4p0__7_u_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -13213,10 +13209,8 @@ define void @s_shuffle_v4p0_v4p0__7_0_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -13270,8 +13264,7 @@ define void @s_shuffle_v4p0_v4p0__7_1_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -13329,10 +13322,8 @@ define void @s_shuffle_v4p0_v4p0__7_2_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -13387,8 +13378,7 @@ define void @s_shuffle_v4p0_v4p0__7_3_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -13437,10 +13427,8 @@ define void @s_shuffle_v4p0_v4p0__7_4_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -13453,18 +13441,43 @@ define void @s_shuffle_v4p0_v4p0__7_4_u_u() {
}
define void @s_shuffle_v4p0_v4p0__7_5_u_u() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_5_u_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_5_u_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_5_u_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_5_u_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 5, i32 poison, i32 poison>
@@ -13509,10 +13522,8 @@ define void @s_shuffle_v4p0_v4p0__7_6_u_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -13525,18 +13536,43 @@ define void @s_shuffle_v4p0_v4p0__7_6_u_u() {
}
define void @s_shuffle_v4p0_v4p0__7_7_u_u() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_u_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_u_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_u_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_u_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 poison, i32 poison>
@@ -13545,21 +13581,52 @@ define void @s_shuffle_v4p0_v4p0__7_7_u_u() {
}
define void @s_shuffle_v4p0_v4p0__7_7_0_u() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_0_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_0_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_0_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_0_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 0, i32 poison>
@@ -13610,13 +13677,11 @@ define void @s_shuffle_v4p0_v4p0__7_7_1_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s13, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -13671,8 +13736,7 @@ define void @s_shuffle_v4p0_v4p0__7_7_2_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -13727,13 +13791,11 @@ define void @s_shuffle_v4p0_v4p0__7_7_3_u() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s14
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -13746,20 +13808,48 @@ define void @s_shuffle_v4p0_v4p0__7_7_3_u() {
}
define void @s_shuffle_v4p0_v4p0__7_7_4_u() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_4_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_4_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_4_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_4_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 4, i32 poison>
@@ -13768,313 +13858,292 @@ define void @s_shuffle_v4p0_v4p0__7_7_4_u() {
}
define void @s_shuffle_v4p0_v4p0__7_7_5_u() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_5_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 5, i32 poison>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_7_6_u() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_6_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 6, i32 poison>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_7_7_u() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_7_u:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 poison>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_7_7_0() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_7_0:
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_5_u:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
-; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
-; GFX900-NEXT: s_mov_b32 s14, s16
-; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_7_0:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_5_u:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
-; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
-; GFX90A-NEXT: s_mov_b32 s14, s16
-; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_7_0:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_5_u:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s0
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 0>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 5, i32 poison>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_7_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_7_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4p0_v4p0__7_7_6_u() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_6_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_6_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_6_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 1>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 6, i32 poison>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_7_2() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_7_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s16
-; GFX9-NEXT: s_mov_b32 s15, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4p0_v4p0__7_7_7_u() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_7_u:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_7_u:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_7_u:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 2>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 poison>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_7_3() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_7_3:
+define void @s_shuffle_v4p0_v4p0__7_7_7_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_7_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[16:23]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
; GFX900-NEXT: s_mov_b32 s12, s10
; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_7_3:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_7_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[16:23]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
; GFX90A-NEXT: s_mov_b32 s12, s10
; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_7_3:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_7_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_7_7_4() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_7_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s4
-; GFX9-NEXT: s_mov_b32 s15, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 4>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_7_5() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_7_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s6
-; GFX9-NEXT: s_mov_b32 s15, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4p0_v4p0__7_7_7_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_7_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_7_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_7_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 5>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 1>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_7_6() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_7_6:
+define void @s_shuffle_v4p0_v4p0__7_7_7_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_7_2:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s18
-; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s10, s18
-; GFX900-NEXT: s_mov_b32 s11, s19
-; GFX900-NEXT: s_mov_b32 s12, s18
-; GFX900-NEXT: s_mov_b32 s13, s19
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
; GFX900-NEXT: s_mov_b32 s14, s16
; GFX900-NEXT: s_mov_b32 s15, s17
; GFX900-NEXT: ;;#ASMSTART
@@ -14082,18 +14151,19 @@ define void @s_shuffle_v4p0_v4p0__7_7_7_6() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_7_6:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_7_2:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s18
-; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s10, s18
-; GFX90A-NEXT: s_mov_b32 s11, s19
-; GFX90A-NEXT: s_mov_b32 s12, s18
-; GFX90A-NEXT: s_mov_b32 s13, s19
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
; GFX90A-NEXT: s_mov_b32 s14, s16
; GFX90A-NEXT: s_mov_b32 s15, s17
; GFX90A-NEXT: ;;#ASMSTART
@@ -14101,584 +14171,323 @@ define void @s_shuffle_v4p0_v4p0__7_7_7_6() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_7_6:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_7_2:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s6
-; GFX942-NEXT: s_mov_b32 s11, s7
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 6>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_7_7_7() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_7_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 7>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 2>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__u_0_0_0() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__u_0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 poison, i32 0, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__0_0_0_0() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__0_0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: s_mov_b32 s14, s8
-; GFX9-NEXT: s_mov_b32 s15, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> zeroinitializer
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__1_0_0_0() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__1_0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__2_0_0_0() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__2_0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: s_mov_b32 s14, s4
-; GFX9-NEXT: s_mov_b32 s15, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 2, i32 0, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__3_0_0_0() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__3_0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 3, i32 0, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__4_0_0_0() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__4_0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 4, i32 0, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__5_0_0_0() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__5_0_0_0:
+define void @s_shuffle_v4p0_v4p0__7_7_7_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_7_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s6
-; GFX900-NEXT: s_mov_b32 s9, s7
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__5_0_0_0:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_7_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s6
-; GFX90A-NEXT: s_mov_b32 s9, s7
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__5_0_0_0:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_7_3:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 5, i32 0, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__6_0_0_0() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__6_0_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 6, i32 0, i32 0, i32 0>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_0_0_0() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_0_0_0:
+define void @s_shuffle_v4p0_v4p0__7_7_7_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_7_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_0_0_0:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_7_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_0_0_0:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_7_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:19]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 0, i32 0, i32 0>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_u_0_0() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_u_0_0:
+define void @s_shuffle_v4p0_v4p0__7_7_7_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_7_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_u_0_0:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_7_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_u_0_0:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_7_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:19]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 poison, i32 0, i32 0>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_1_0_0() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_1_0_0:
+define void @s_shuffle_v4p0_v4p0__7_7_7_6() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_7_6:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s14
-; GFX900-NEXT: s_mov_b32 s11, s15
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s18
+; GFX900-NEXT: s_mov_b32 s11, s19
+; GFX900-NEXT: s_mov_b32 s12, s18
+; GFX900-NEXT: s_mov_b32 s13, s19
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_1_0_0:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_7_6:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s14
-; GFX90A-NEXT: s_mov_b32 s11, s15
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s18
+; GFX90A-NEXT: s_mov_b32 s11, s19
+; GFX90A-NEXT: s_mov_b32 s12, s18
+; GFX90A-NEXT: s_mov_b32 s13, s19
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_1_0_0:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_7_6:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:19]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 1, i32 0, i32 0>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 6>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_2_0_0() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_2_0_0:
+define void @s_shuffle_v4p0_v4p0__7_7_7_7() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_7_7:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s16
-; GFX900-NEXT: s_mov_b32 s11, s17
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_2_0_0:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_7_7:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s16
-; GFX90A-NEXT: s_mov_b32 s11, s17
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_2_0_0:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_7_7:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:19]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s16
-; GFX942-NEXT: s_mov_b32 s11, s17
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 2, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_3_0_0() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_3_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: s_mov_b32 s14, s4
-; GFX9-NEXT: s_mov_b32 s15, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 3, i32 0, i32 0>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 7, i32 7>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_4_0_0() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_4_0_0:
+define void @s_shuffle_v4p0_v4p0__u_0_0_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__u_0_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s4
-; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: s_mov_b32 s14, s12
; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
@@ -14686,19 +14495,14 @@ define void @s_shuffle_v4p0_v4p0__7_4_0_0() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_4_0_0:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__u_0_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s4
-; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: s_mov_b32 s14, s12
; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
@@ -14706,113 +14510,89 @@ define void @s_shuffle_v4p0_v4p0__7_4_0_0() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_4_0_0:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__u_0_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 4, i32 0, i32 0>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 poison, i32 0, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_5_0_0() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_5_0_0:
+define void @s_shuffle_v4p0_v4p0__0_0_0_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__0_0_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s12, s4
-; GFX900-NEXT: s_mov_b32 s13, s5
-; GFX900-NEXT: s_mov_b32 s14, s4
-; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: s_mov_b32 s14, s8
+; GFX900-NEXT: s_mov_b32 s15, s9
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_5_0_0:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__0_0_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s14
-; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s12, s4
-; GFX90A-NEXT: s_mov_b32 s13, s5
-; GFX90A-NEXT: s_mov_b32 s14, s4
-; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: s_mov_b32 s14, s8
+; GFX90A-NEXT: s_mov_b32 s15, s9
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_5_0_0:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__0_0_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s12, s0
-; GFX942-NEXT: s_mov_b32 s13, s1
-; GFX942-NEXT: s_mov_b32 s14, s0
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 5, i32 0, i32 0>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> zeroinitializer
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_6_0_0() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_6_0_0:
+define void @s_shuffle_v4p0_v4p0__1_0_0_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__1_0_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s22
-; GFX900-NEXT: s_mov_b32 s9, s23
-; GFX900-NEXT: s_mov_b32 s10, s20
-; GFX900-NEXT: s_mov_b32 s11, s21
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: s_mov_b32 s14, s12
; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
@@ -14820,19 +14600,16 @@ define void @s_shuffle_v4p0_v4p0__7_6_0_0() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_6_0_0:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__1_0_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s22
-; GFX90A-NEXT: s_mov_b32 s9, s23
-; GFX90A-NEXT: s_mov_b32 s10, s20
-; GFX90A-NEXT: s_mov_b32 s11, s21
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: s_mov_b32 s14, s12
; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
@@ -14840,794 +14617,622 @@ define void @s_shuffle_v4p0_v4p0__7_6_0_0() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_6_0_0:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__1_0_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 6, i32 0, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_7_0_0() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_0_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 0, i32 0>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_u_0() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_u_0:
+define void @s_shuffle_v4p0_v4p0__2_0_0_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__2_0_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_u_0:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__2_0_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_u_0:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__2_0_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s0
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 poison, i32 0>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 2, i32 0, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_1_0() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_1_0:
+define void @s_shuffle_v4p0_v4p0__3_0_0_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__3_0_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s12, s18
-; GFX900-NEXT: s_mov_b32 s13, s19
-; GFX900-NEXT: s_mov_b32 s14, s16
-; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_1_0:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__3_0_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s12, s18
-; GFX90A-NEXT: s_mov_b32 s13, s19
-; GFX90A-NEXT: s_mov_b32 s14, s16
-; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_1_0:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__3_0_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s13, s3
-; GFX942-NEXT: s_mov_b32 s14, s0
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 1, i32 0>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 3, i32 0, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_2_0() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_2_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[16:23]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s20
-; GFX9-NEXT: s_mov_b32 s13, s21
-; GFX9-NEXT: s_mov_b32 s14, s16
-; GFX9-NEXT: s_mov_b32 s15, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 2, i32 0>
+define void @s_shuffle_v4p0_v4p0__4_0_0_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__4_0_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__4_0_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__4_0_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 4, i32 0, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_3_0() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_3_0:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[16:23]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s22
-; GFX9-NEXT: s_mov_b32 s13, s23
-; GFX9-NEXT: s_mov_b32 s14, s16
-; GFX9-NEXT: s_mov_b32 s15, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4p0_v4p0__5_0_0_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__5_0_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__5_0_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__5_0_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 3, i32 0>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 5, i32 0, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_4_0() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_4_0:
+define void @s_shuffle_v4p0_v4p0__6_0_0_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__6_0_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s12, s4
-; GFX900-NEXT: s_mov_b32 s13, s5
-; GFX900-NEXT: s_mov_b32 s14, s16
-; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_4_0:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__6_0_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s12, s4
-; GFX90A-NEXT: s_mov_b32 s13, s5
-; GFX90A-NEXT: s_mov_b32 s14, s16
-; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_4_0:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__6_0_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s0
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 4, i32 0>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 6, i32 0, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_5_0() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_5_0:
+define void @s_shuffle_v4p0_v4p0__7_0_0_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_0_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s12, s6
-; GFX900-NEXT: s_mov_b32 s13, s7
-; GFX900-NEXT: s_mov_b32 s14, s16
-; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_5_0:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_0_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s12, s6
-; GFX90A-NEXT: s_mov_b32 s13, s7
-; GFX90A-NEXT: s_mov_b32 s14, s16
-; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_5_0:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_0_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s0
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 5, i32 0>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 0, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_6_0() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_6_0:
+define void @s_shuffle_v4p0_v4p0__7_u_0_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_u_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s10, s14
-; GFX900-NEXT: s_mov_b32 s11, s15
-; GFX900-NEXT: s_mov_b32 s14, s4
-; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_6_0:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_u_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s14
-; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s10, s14
-; GFX90A-NEXT: s_mov_b32 s11, s15
-; GFX90A-NEXT: s_mov_b32 s14, s4
-; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_6_0:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_u_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
-; GFX942-NEXT: s_mov_b32 s14, s0
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 6, i32 0>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__u_1_1_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__u_1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 poison, i32 1, i32 1, i32 1>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__0_1_1_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__0_1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 0, i32 1, i32 1, i32 1>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 poison, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__1_1_1_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__1_1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__2_1_1_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__2_1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: s_mov_b32 s14, s6
-; GFX9-NEXT: s_mov_b32 s15, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 2, i32 1, i32 1, i32 1>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__3_1_1_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__3_1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 3, i32 1, i32 1, i32 1>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__4_1_1_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__4_1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 4, i32 1, i32 1, i32 1>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__5_1_1_1() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__5_1_1_1:
+define void @s_shuffle_v4p0_v4p0__7_1_0_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_1_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
-; GFX900-NEXT: s_mov_b32 s14, s10
-; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__5_1_1_1:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_1_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s14
-; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
-; GFX90A-NEXT: s_mov_b32 s14, s10
-; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__5_1_1_1:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_1_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 5, i32 1, i32 1, i32 1>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__6_1_1_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__6_1_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 6, i32 1, i32 1, i32 1>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 1, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_1_1_1() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_1_1_1:
+define void @s_shuffle_v4p0_v4p0__7_2_0_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_2_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s18
-; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
-; GFX900-NEXT: s_mov_b32 s14, s10
-; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s16
+; GFX900-NEXT: s_mov_b32 s11, s17
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_1_1_1:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_2_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s18
-; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
-; GFX90A-NEXT: s_mov_b32 s14, s10
-; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s16
+; GFX90A-NEXT: s_mov_b32 s11, s17
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_1_1_1:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_2_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[16:17]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 1, i32 1, i32 1>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 2, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_u_1_1() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_u_1_1:
+define void @s_shuffle_v4p0_v4p0__7_3_0_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_3_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_u_1_1:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_3_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_u_1_1:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_3_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 poison, i32 1, i32 1>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 3, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_0_1_1() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_0_1_1:
+define void @s_shuffle_v4p0_v4p0__7_4_0_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_4_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
@@ -15638,16 +15243,16 @@ define void @s_shuffle_v4p0_v4p0__7_0_1_1() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_0_1_1:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_4_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
@@ -15658,16 +15263,16 @@ define void @s_shuffle_v4p0_v4p0__7_0_1_1() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_0_1_1:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_4_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
@@ -15676,119 +15281,150 @@ define void @s_shuffle_v4p0_v4p0__7_0_1_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 0, i32 1, i32 1>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 4, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_2_1_1() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_2_1_1:
+define void @s_shuffle_v4p0_v4p0__7_5_0_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_5_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s16
-; GFX900-NEXT: s_mov_b32 s11, s17
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_2_1_1:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_5_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s16
-; GFX90A-NEXT: s_mov_b32 s11, s17
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_2_1_1:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_5_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s16
-; GFX942-NEXT: s_mov_b32 s11, s17
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 2, i32 1, i32 1>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 5, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_3_1_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_3_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: s_mov_b32 s14, s6
-; GFX9-NEXT: s_mov_b32 s15, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4p0_v4p0__7_6_0_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_6_0_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s22
+; GFX900-NEXT: s_mov_b32 s9, s23
+; GFX900-NEXT: s_mov_b32 s10, s20
+; GFX900-NEXT: s_mov_b32 s11, s21
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_6_0_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s22
+; GFX90A-NEXT: s_mov_b32 s9, s23
+; GFX90A-NEXT: s_mov_b32 s10, s20
+; GFX90A-NEXT: s_mov_b32 s11, s21
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_6_0_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 3, i32 1, i32 1>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 6, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_4_1_1() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_4_1_1:
+define void @s_shuffle_v4p0_v4p0__7_7_0_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_0_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
@@ -15799,16 +15435,14 @@ define void @s_shuffle_v4p0_v4p0__7_4_1_1() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s4
-; GFX900-NEXT: s_mov_b32 s11, s5
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_4_1_1:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_0_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
@@ -15819,353 +15453,4673 @@ define void @s_shuffle_v4p0_v4p0__7_4_1_1() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s4
-; GFX90A-NEXT: s_mov_b32 s11, s5
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_4_1_1:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_0_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 4, i32 1, i32 1>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 0, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_5_1_1() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_5_1_1:
+define void @s_shuffle_v4p0_v4p0__7_7_u_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_u_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s12, s6
-; GFX900-NEXT: s_mov_b32 s13, s7
-; GFX900-NEXT: s_mov_b32 s14, s6
-; GFX900-NEXT: s_mov_b32 s15, s7
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_5_1_1:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_u_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s14
-; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s12, s6
-; GFX90A-NEXT: s_mov_b32 s13, s7
-; GFX90A-NEXT: s_mov_b32 s14, s6
-; GFX90A-NEXT: s_mov_b32 s15, s7
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_5_1_1:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_u_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
-; GFX942-NEXT: s_mov_b32 s14, s2
-; GFX942-NEXT: s_mov_b32 s15, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 5, i32 1, i32 1>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 poison, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_6_1_1() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_6_1_1:
+define void @s_shuffle_v4p0_v4p0__7_7_1_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_1_0:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[16:23]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s22
-; GFX900-NEXT: s_mov_b32 s9, s23
-; GFX900-NEXT: s_mov_b32 s10, s20
-; GFX900-NEXT: s_mov_b32 s11, s21
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s18
+; GFX900-NEXT: s_mov_b32 s13, s19
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_6_1_1:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_1_0:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[16:23]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s22
-; GFX90A-NEXT: s_mov_b32 s9, s23
-; GFX90A-NEXT: s_mov_b32 s10, s20
-; GFX90A-NEXT: s_mov_b32 s11, s21
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s18
+; GFX90A-NEXT: s_mov_b32 s13, s19
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_6_1_1:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_1_0:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 6, i32 1, i32 1>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 1, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_1_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_1_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4p0_v4p0__7_7_2_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_2_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s20
+; GFX900-NEXT: s_mov_b32 s13, s21
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_2_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s20
+; GFX90A-NEXT: s_mov_b32 s13, s21
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_2_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[16:23]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[20:21]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 1, i32 1>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 2, i32 0>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_u_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_u_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4p0_v4p0__7_7_3_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_3_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s22
+; GFX900-NEXT: s_mov_b32 s13, s23
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_3_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s22
+; GFX90A-NEXT: s_mov_b32 s13, s23
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_3_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[16:23]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[22:23]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 3, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_7_4_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_4_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_4_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_4_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 4, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_7_5_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_5_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_5_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_5_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 5, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_7_6_0() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_6_0:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_6_0:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_6_0:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 6, i32 0>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__u_1_1_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__u_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__u_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__u_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 poison, i32 1, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__0_1_1_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__0_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__0_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__0_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 0, i32 1, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__1_1_1_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__1_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__1_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__1_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__2_1_1_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__2_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__2_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__2_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 2, i32 1, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__3_1_1_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__3_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__3_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__3_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 3, i32 1, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__4_1_1_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__4_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__4_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__4_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 4, i32 1, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__5_1_1_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__5_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__5_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__5_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 5, i32 1, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__6_1_1_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__6_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__6_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__6_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 6, i32 1, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_1_1_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_1_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_1_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_1_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 1, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_u_1_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_u_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_u_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_u_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 poison, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_0_1_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_0_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_0_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_0_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 0, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_2_1_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_2_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s16
+; GFX900-NEXT: s_mov_b32 s11, s17
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_2_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s16
+; GFX90A-NEXT: s_mov_b32 s11, s17
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_2_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[16:17]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 2, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_3_1_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_3_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_3_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_3_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 3, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_4_1_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_4_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_4_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_4_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 4, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_5_1_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_5_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_5_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_5_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[2:3]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 5, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_6_1_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_6_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s22
+; GFX900-NEXT: s_mov_b32 s9, s23
+; GFX900-NEXT: s_mov_b32 s10, s20
+; GFX900-NEXT: s_mov_b32 s11, s21
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_6_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s22
+; GFX90A-NEXT: s_mov_b32 s9, s23
+; GFX90A-NEXT: s_mov_b32 s10, s20
+; GFX90A-NEXT: s_mov_b32 s11, s21
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_6_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 6, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_7_1_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_1_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_1_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_1_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 1, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_7_u_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_u_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_u_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_u_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 poison, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_7_0_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_0_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_0_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_0_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 0, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_7_2_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_2_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s16
+; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_2_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s16
+; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_2_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 2, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_7_3_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_3_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s18
+; GFX900-NEXT: s_mov_b32 s13, s19
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_3_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s18
+; GFX90A-NEXT: s_mov_b32 s13, s19
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_3_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[18:19]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 3, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_7_4_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_4_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_4_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_4_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 4, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_7_5_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_5_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_5_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_5_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 5, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_7_6_1() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_6_1:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_6_1:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_6_1:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[2:3]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 6, i32 1>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__u_2_2_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__u_2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__u_2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__u_2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 poison, i32 2, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__0_2_2_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__0_2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__0_2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__0_2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 0, i32 2, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__1_2_2_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__1_2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__1_2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__1_2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 1, i32 2, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__2_2_2_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__2_2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: s_mov_b32 s14, s8
+; GFX900-NEXT: s_mov_b32 s15, s9
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__2_2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: s_mov_b32 s14, s8
+; GFX90A-NEXT: s_mov_b32 s15, s9
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__2_2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 2, i32 2, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__3_2_2_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__3_2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__3_2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__3_2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 3, i32 2, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__4_2_2_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__4_2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__4_2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__4_2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 4, i32 2, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__5_2_2_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__5_2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__5_2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__5_2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 5, i32 2, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__6_2_2_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__6_2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__6_2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__6_2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 6, i32 2, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_2_2_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_2_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_2_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_2_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 2, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_u_2_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_u_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_u_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_u_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 poison, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_0_2_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_0_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s16
+; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_0_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s16
+; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_0_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 0, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_1_2_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_1_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s22
+; GFX900-NEXT: s_mov_b32 s9, s23
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_1_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s22
+; GFX90A-NEXT: s_mov_b32 s9, s23
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_1_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 1, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_3_2_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_3_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_3_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_3_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 3, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_4_2_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_4_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_4_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_4_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 4, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_5_2_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_5_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s16
+; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_5_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s16
+; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_5_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 5, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_6_2_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_6_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s22
+; GFX900-NEXT: s_mov_b32 s9, s23
+; GFX900-NEXT: s_mov_b32 s10, s20
+; GFX900-NEXT: s_mov_b32 s11, s21
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_6_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s22
+; GFX90A-NEXT: s_mov_b32 s9, s23
+; GFX90A-NEXT: s_mov_b32 s10, s20
+; GFX90A-NEXT: s_mov_b32 s11, s21
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_6_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 6, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_7_2_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_2_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_2_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_2_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 2, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_7_u_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_u_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_u_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_u_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 poison, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_7_0_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_0_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_0_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_0_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 0, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_7_1_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_1_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_1_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_1_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 1, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_7_3_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_3_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s18
+; GFX900-NEXT: s_mov_b32 s13, s19
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_3_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s18
+; GFX90A-NEXT: s_mov_b32 s13, s19
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_3_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 3, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_7_4_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_4_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_4_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_4_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 4, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_7_5_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_5_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_5_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_5_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 5, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_7_6_2() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_6_2:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_6_2:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_6_2:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 6, i32 2>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__u_3_3_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__u_3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__u_3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__u_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 poison, i32 3, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__0_3_3_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__0_3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__0_3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__0_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 0, i32 3, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__1_3_3_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__1_3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__1_3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__1_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 1, i32 3, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__2_3_3_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__2_3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__2_3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__2_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 2, i32 3, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__3_3_3_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__3_3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__3_3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__3_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 3, i32 3, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__4_3_3_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__4_3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__4_3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__4_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 4, i32 3, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__5_3_3_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__5_3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__5_3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__5_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 5, i32 3, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__6_3_3_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__6_3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__6_3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__6_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 6, i32 3, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_3_3_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_3_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_3_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_3_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 3, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_u_3_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_u_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_u_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_u_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 poison, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_0_3_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_0_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s18
+; GFX900-NEXT: s_mov_b32 s13, s19
+; GFX900-NEXT: s_mov_b32 s14, s18
+; GFX900-NEXT: s_mov_b32 s15, s19
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_0_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s18
+; GFX90A-NEXT: s_mov_b32 s13, s19
+; GFX90A-NEXT: s_mov_b32 s14, s18
+; GFX90A-NEXT: s_mov_b32 s15, s19
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_0_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 0, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_1_3_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_1_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s22
+; GFX900-NEXT: s_mov_b32 s9, s23
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_1_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s22
+; GFX90A-NEXT: s_mov_b32 s9, s23
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_1_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 1, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_2_3_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_2_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_2_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_2_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 2, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_4_3_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_4_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_4_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_4_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 4, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_5_3_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_5_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s18
+; GFX900-NEXT: s_mov_b32 s13, s19
+; GFX900-NEXT: s_mov_b32 s14, s18
+; GFX900-NEXT: s_mov_b32 s15, s19
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_5_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s18
+; GFX90A-NEXT: s_mov_b32 s13, s19
+; GFX90A-NEXT: s_mov_b32 s14, s18
+; GFX90A-NEXT: s_mov_b32 s15, s19
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_5_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 5, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_6_3_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_6_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s22
+; GFX900-NEXT: s_mov_b32 s9, s23
+; GFX900-NEXT: s_mov_b32 s10, s20
+; GFX900-NEXT: s_mov_b32 s11, s21
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_6_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s22
+; GFX90A-NEXT: s_mov_b32 s9, s23
+; GFX90A-NEXT: s_mov_b32 s10, s20
+; GFX90A-NEXT: s_mov_b32 s11, s21
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_6_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 6, i32 3, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_7_3_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_3_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_3_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_3_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 poison, i32 1>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 3, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_0_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_0_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4p0_v4p0__7_7_u_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_u_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_u_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_u_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 0, i32 1>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 poison, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_2_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_2_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s16
-; GFX9-NEXT: s_mov_b32 s13, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4p0_v4p0__7_7_0_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_0_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s14, s18
+; GFX900-NEXT: s_mov_b32 s15, s19
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_0_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s14, s18
+; GFX90A-NEXT: s_mov_b32 s15, s19
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_0_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[18:19]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 2, i32 1>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 0, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_3_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_3_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s18
-; GFX9-NEXT: s_mov_b32 s13, s19
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4p0_v4p0__7_7_1_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_1_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s14, s18
+; GFX900-NEXT: s_mov_b32 s15, s19
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_1_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s14, s18
+; GFX90A-NEXT: s_mov_b32 s15, s19
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_1_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[18:19]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 3, i32 1>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 1, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_4_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_4_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4p0_v4p0__7_7_2_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_2_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_2_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_2_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 4, i32 1>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 2, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_5_1() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_5_1:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4p0_v4p0__7_7_4_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_4_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_4_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_4_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 5, i32 1>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 4, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_6_1() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_6_1:
+define void @s_shuffle_v4p0_v4p0__7_7_5_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_5_3:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_5_3:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_5_3:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 5, i32 3>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_7_6_3() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_6_3:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
@@ -16173,18 +20127,18 @@ define void @s_shuffle_v4p0_v4p0__7_7_6_1() {
; GFX900-NEXT: s_mov_b32 s9, s15
; GFX900-NEXT: s_mov_b32 s10, s14
; GFX900-NEXT: s_mov_b32 s11, s15
-; GFX900-NEXT: s_mov_b32 s14, s6
-; GFX900-NEXT: s_mov_b32 s15, s7
+; GFX900-NEXT: s_mov_b32 s14, s18
+; GFX900-NEXT: s_mov_b32 s15, s19
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_6_1:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_6_3:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
@@ -16193,14 +20147,14 @@ define void @s_shuffle_v4p0_v4p0__7_7_6_1() {
; GFX90A-NEXT: s_mov_b32 s9, s15
; GFX90A-NEXT: s_mov_b32 s10, s14
; GFX90A-NEXT: s_mov_b32 s11, s15
-; GFX90A-NEXT: s_mov_b32 s14, s6
-; GFX90A-NEXT: s_mov_b32 s15, s7
+; GFX90A-NEXT: s_mov_b32 s14, s18
+; GFX90A-NEXT: s_mov_b32 s15, s19
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_6_1:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_6_3:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
@@ -16209,559 +20163,337 @@ define void @s_shuffle_v4p0_v4p0__7_7_6_1() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
-; GFX942-NEXT: s_mov_b32 s14, s2
-; GFX942-NEXT: s_mov_b32 s15, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 6, i32 1>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__u_2_2_2() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__u_2_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 poison, i32 2, i32 2, i32 2>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__0_2_2_2() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__0_2_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 0, i32 2, i32 2, i32 2>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__1_2_2_2() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__1_2_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 1, i32 2, i32 2, i32 2>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__2_2_2_2() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__2_2_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: s_mov_b32 s14, s8
-; GFX9-NEXT: s_mov_b32 s15, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 2, i32 2, i32 2, i32 2>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__3_2_2_2() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__3_2_2_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 3, i32 2, i32 2, i32 2>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 6, i32 3>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__4_2_2_2() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__4_2_2_2:
+define void @s_shuffle_v4p0_v4p0__u_4_4_4() {
+; GFX9-LABEL: s_shuffle_v4p0_v4p0__u_4_4_4:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
; GFX9-NEXT: ; use s[8:15]
; GFX9-NEXT: ;;#ASMEND
; GFX9-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 4, i32 2, i32 2, i32 2>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 poison, i32 4, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__5_2_2_2() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__5_2_2_2:
+define void @s_shuffle_v4p0_v4p0__0_4_4_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__0_4_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s6
-; GFX900-NEXT: s_mov_b32 s9, s7
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__5_2_2_2:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__0_4_4_4:
; GFX90A: ; %bb.0:
-; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s6
-; GFX90A-NEXT: s_mov_b32 s9, s7
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__5_2_2_2:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__0_4_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 5, i32 2, i32 2, i32 2>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 0, i32 4, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__6_2_2_2() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__6_2_2_2:
+define void @s_shuffle_v4p0_v4p0__1_4_4_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__1_4_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__6_2_2_2:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__1_4_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__6_2_2_2:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__1_4_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 6, i32 2, i32 2, i32 2>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 1, i32 4, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_2_2_2() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_2_2_2:
+define void @s_shuffle_v4p0_v4p0__2_4_4_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__2_4_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_2_2_2:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__2_4_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_2_2_2:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__2_4_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 2, i32 2, i32 2>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 2, i32 4, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_u_2_2() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_u_2_2:
+define void @s_shuffle_v4p0_v4p0__3_4_4_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__3_4_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_u_2_2:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__3_4_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_u_2_2:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__3_4_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 poison, i32 2, i32 2>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 3, i32 4, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_0_2_2() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_0_2_2:
+define void @s_shuffle_v4p0_v4p0__4_4_4_4() {
+; GFX9-LABEL: s_shuffle_v4p0_v4p0__4_4_4_4:
+; GFX9: ; %bb.0:
+; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX9-NEXT: ;;#ASMSTART
+; GFX9-NEXT: ; use s[8:15]
+; GFX9-NEXT: ;;#ASMEND
+; GFX9-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 4, i32 4, i32 4, i32 4>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__5_4_4_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__5_4_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
; GFX900-NEXT: s_mov_b32 s10, s12
; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s12, s16
-; GFX900-NEXT: s_mov_b32 s13, s17
-; GFX900-NEXT: s_mov_b32 s14, s16
-; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_0_2_2:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__5_4_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
; GFX90A-NEXT: s_mov_b32 s10, s12
; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s16
-; GFX90A-NEXT: s_mov_b32 s13, s17
-; GFX90A-NEXT: s_mov_b32 s14, s16
-; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_0_2_2:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__5_4_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 0, i32 2, i32 2>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 5, i32 4, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_1_2_2() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_1_2_2:
+define void @s_shuffle_v4p0_v4p0__6_4_4_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__6_4_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s22
-; GFX900-NEXT: s_mov_b32 s9, s23
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_1_2_2:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__6_4_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s22
-; GFX90A-NEXT: s_mov_b32 s9, s23
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_1_2_2:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__6_4_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 1, i32 2, i32 2>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 6, i32 4, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_3_2_2() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_3_2_2:
+define void @s_shuffle_v4p0_v4p0__7_4_4_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_4_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s14
-; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: s_mov_b32 s14, s12
; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
@@ -16769,19 +20501,16 @@ define void @s_shuffle_v4p0_v4p0__7_3_2_2() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_3_2_2:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_4_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s14
-; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: s_mov_b32 s14, s12
; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
@@ -16789,46 +20518,35 @@ define void @s_shuffle_v4p0_v4p0__7_3_2_2() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_3_2_2:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_4_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 3, i32 2, i32 2>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 4, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_4_2_2() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_4_2_2:
+define void @s_shuffle_v4p0_v4p0__7_u_4_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_u_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s4
-; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
; GFX900-NEXT: s_mov_b32 s14, s12
; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
@@ -16836,19 +20554,14 @@ define void @s_shuffle_v4p0_v4p0__7_4_2_2() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_4_2_2:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_u_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s4
-; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
; GFX90A-NEXT: s_mov_b32 s14, s12
; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
@@ -16856,113 +20569,101 @@ define void @s_shuffle_v4p0_v4p0__7_4_2_2() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_4_2_2:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_u_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 4, i32 2, i32 2>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 poison, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_5_2_2() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_5_2_2:
+define void @s_shuffle_v4p0_v4p0__7_0_4_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_0_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s12, s16
-; GFX900-NEXT: s_mov_b32 s13, s17
-; GFX900-NEXT: s_mov_b32 s14, s16
-; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_5_2_2:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_0_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s14
-; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s12, s16
-; GFX90A-NEXT: s_mov_b32 s13, s17
-; GFX90A-NEXT: s_mov_b32 s14, s16
-; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_5_2_2:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_0_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 5, i32 2, i32 2>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 0, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_6_2_2() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_6_2_2:
+define void @s_shuffle_v4p0_v4p0__7_1_4_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_1_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s22
-; GFX900-NEXT: s_mov_b32 s9, s23
-; GFX900-NEXT: s_mov_b32 s10, s20
-; GFX900-NEXT: s_mov_b32 s11, s21
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
; GFX900-NEXT: s_mov_b32 s14, s12
; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
@@ -16970,19 +20671,17 @@ define void @s_shuffle_v4p0_v4p0__7_6_2_2() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_6_2_2:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_1_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s22
-; GFX90A-NEXT: s_mov_b32 s9, s23
-; GFX90A-NEXT: s_mov_b32 s10, s20
-; GFX90A-NEXT: s_mov_b32 s11, s21
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
; GFX90A-NEXT: s_mov_b32 s14, s12
; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
@@ -16990,44 +20689,43 @@ define void @s_shuffle_v4p0_v4p0__7_6_2_2() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_6_2_2:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_1_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 6, i32 2, i32 2>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 1, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_2_2() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_2_2:
+define void @s_shuffle_v4p0_v4p0__7_2_4_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_2_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[16:23]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s20
+; GFX900-NEXT: s_mov_b32 s11, s21
; GFX900-NEXT: s_mov_b32 s14, s12
; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
@@ -17035,17 +20733,19 @@ define void @s_shuffle_v4p0_v4p0__7_7_2_2() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_2_2:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_2_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[16:23]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s20
+; GFX90A-NEXT: s_mov_b32 s11, s21
; GFX90A-NEXT: s_mov_b32 s14, s12
; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
@@ -17053,42 +20753,41 @@ define void @s_shuffle_v4p0_v4p0__7_7_2_2() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_2_2:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_2_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s12
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 2, i32 2>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 2, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_u_2() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_u_2:
+define void @s_shuffle_v4p0_v4p0__7_3_4_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_3_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
; GFX900-NEXT: s_mov_b32 s14, s12
; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
@@ -17096,17 +20795,17 @@ define void @s_shuffle_v4p0_v4p0__7_7_u_2() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_u_2:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_3_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
; GFX90A-NEXT: s_mov_b32 s14, s12
; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
@@ -17114,561 +20813,308 @@ define void @s_shuffle_v4p0_v4p0__7_7_u_2() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_u_2:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_3_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s14, s12
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 poison, i32 2>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_7_0_2() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_0_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s14, s16
-; GFX9-NEXT: s_mov_b32 s15, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 0, i32 2>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_7_1_2() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_1_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: s_mov_b32 s14, s16
-; GFX9-NEXT: s_mov_b32 s15, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 1, i32 2>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_7_3_2() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_3_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s18
-; GFX9-NEXT: s_mov_b32 s13, s19
-; GFX9-NEXT: s_mov_b32 s14, s16
-; GFX9-NEXT: s_mov_b32 s15, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 3, i32 2>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_7_4_2() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_4_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: s_mov_b32 s14, s16
-; GFX9-NEXT: s_mov_b32 s15, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 4, i32 2>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 3, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_5_2() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_5_2:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: s_mov_b32 s14, s16
-; GFX9-NEXT: s_mov_b32 s15, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4p0_v4p0__7_5_4_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_5_4_4:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_5_4_4:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_5_4_4:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 5, i32 2>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 5, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_6_2() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_6_2:
+define void @s_shuffle_v4p0_v4p0__7_6_4_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_6_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s10, s14
-; GFX900-NEXT: s_mov_b32 s11, s15
-; GFX900-NEXT: s_mov_b32 s14, s16
-; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s16
+; GFX900-NEXT: s_mov_b32 s11, s17
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_6_2:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_6_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s14
-; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s10, s14
-; GFX90A-NEXT: s_mov_b32 s11, s15
-; GFX90A-NEXT: s_mov_b32 s14, s16
-; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s16
+; GFX90A-NEXT: s_mov_b32 s11, s17
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_6_2:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_6_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[16:17]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 6, i32 2>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__u_3_3_3() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__u_3_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 poison, i32 3, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__0_3_3_3() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__0_3_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 0, i32 3, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__1_3_3_3() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__1_3_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s6
-; GFX9-NEXT: s_mov_b32 s9, s7
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 1, i32 3, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__2_3_3_3() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__2_3_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 2, i32 3, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__3_3_3_3() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__3_3_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 3, i32 3, i32 3, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__4_3_3_3() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__4_3_3_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 4, i32 3, i32 3, i32 3>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 6, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__5_3_3_3() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__5_3_3_3:
+define void @s_shuffle_v4p0_v4p0__7_7_4_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_4_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
-; GFX900-NEXT: s_mov_b32 s14, s10
-; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__5_3_3_3:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_4_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s14
-; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
-; GFX90A-NEXT: s_mov_b32 s14, s10
-; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__5_3_3_3:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_4_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s13, s11
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 5, i32 3, i32 3, i32 3>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 4, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__6_3_3_3() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__6_3_3_3:
+define void @s_shuffle_v4p0_v4p0__7_7_u_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_u_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s14
-; GFX900-NEXT: s_mov_b32 s11, s15
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__6_3_3_3:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_u_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s14
-; GFX90A-NEXT: s_mov_b32 s11, s15
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__6_3_3_3:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_u_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 6, i32 3, i32 3, i32 3>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 poison, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_3_3_3() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_3_3_3:
+define void @s_shuffle_v4p0_v4p0__7_7_0_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_0_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s18
-; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
-; GFX900-NEXT: s_mov_b32 s14, s10
-; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_3_3_3:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_0_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s18
-; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
-; GFX90A-NEXT: s_mov_b32 s14, s10
-; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_3_3_3:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_0_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s10
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s13, s11
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 3, i32 3, i32 3>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 0, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_u_3_3() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_u_3_3:
+define void @s_shuffle_v4p0_v4p0__7_7_1_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_1_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
@@ -17677,16 +21123,18 @@ define void @s_shuffle_v4p0_v4p0__7_u_3_3() {
; GFX900-NEXT: s_mov_b32 s9, s11
; GFX900-NEXT: s_mov_b32 s12, s14
; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_u_3_3:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_1_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
@@ -17695,384 +21143,337 @@ define void @s_shuffle_v4p0_v4p0__7_u_3_3() {
; GFX90A-NEXT: s_mov_b32 s9, s11
; GFX90A-NEXT: s_mov_b32 s12, s14
; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_u_3_3:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_1_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 poison, i32 3, i32 3>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 1, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_0_3_3() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_0_3_3:
+define void @s_shuffle_v4p0_v4p0__7_7_2_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_2_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s12, s18
-; GFX900-NEXT: s_mov_b32 s13, s19
-; GFX900-NEXT: s_mov_b32 s14, s18
-; GFX900-NEXT: s_mov_b32 s15, s19
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_0_3_3:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_2_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s18
-; GFX90A-NEXT: s_mov_b32 s13, s19
-; GFX90A-NEXT: s_mov_b32 s14, s18
-; GFX90A-NEXT: s_mov_b32 s15, s19
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_0_3_3:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_2_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
-; GFX942-NEXT: s_mov_b32 s14, s6
-; GFX942-NEXT: s_mov_b32 s15, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 0, i32 3, i32 3>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 2, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_1_3_3() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_1_3_3:
+define void @s_shuffle_v4p0_v4p0__7_7_3_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_3_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s22
-; GFX900-NEXT: s_mov_b32 s9, s23
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
; GFX900-NEXT: s_mov_b32 s12, s14
; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_1_3_3:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_3_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s22
-; GFX90A-NEXT: s_mov_b32 s9, s23
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
; GFX90A-NEXT: s_mov_b32 s12, s14
; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_1_3_3:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_3_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 1, i32 3, i32 3>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 3, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_2_3_3() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_2_3_3:
+define void @s_shuffle_v4p0_v4p0__7_7_5_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_5_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s4
+; GFX900-NEXT: s_mov_b32 s15, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_2_3_3:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_5_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s4
+; GFX90A-NEXT: s_mov_b32 s15, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_2_3_3:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_5_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 2, i32 3, i32 3>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 5, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_4_3_3() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_4_3_3:
+define void @s_shuffle_v4p0_v4p0__7_7_6_4() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_6_4:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[16:23]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s10, s4
-; GFX900-NEXT: s_mov_b32 s11, s5
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s8, s22
+; GFX900-NEXT: s_mov_b32 s9, s23
+; GFX900-NEXT: s_mov_b32 s10, s22
+; GFX900-NEXT: s_mov_b32 s11, s23
+; GFX900-NEXT: s_mov_b32 s12, s20
+; GFX900-NEXT: s_mov_b32 s13, s21
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_4_3_3:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_6_4:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[16:23]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s10, s4
-; GFX90A-NEXT: s_mov_b32 s11, s5
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s8, s22
+; GFX90A-NEXT: s_mov_b32 s9, s23
+; GFX90A-NEXT: s_mov_b32 s10, s22
+; GFX90A-NEXT: s_mov_b32 s11, s23
+; GFX90A-NEXT: s_mov_b32 s12, s20
+; GFX90A-NEXT: s_mov_b32 s13, s21
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_4_3_3:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_6_4:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[0:1]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 4, i32 3, i32 3>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 6, i32 4>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_5_3_3() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_5_3_3:
+define void @s_shuffle_v4p0_v4p0__u_5_5_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__u_5_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s12, s18
-; GFX900-NEXT: s_mov_b32 s13, s19
-; GFX900-NEXT: s_mov_b32 s14, s18
-; GFX900-NEXT: s_mov_b32 s15, s19
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_5_3_3:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__u_5_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s14
-; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s12, s18
-; GFX90A-NEXT: s_mov_b32 s13, s19
-; GFX90A-NEXT: s_mov_b32 s14, s18
-; GFX90A-NEXT: s_mov_b32 s15, s19
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_5_3_3:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__u_5_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
-; GFX942-NEXT: s_mov_b32 s14, s6
-; GFX942-NEXT: s_mov_b32 s15, s7
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 5, i32 3, i32 3>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 poison, i32 5, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_6_3_3() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_6_3_3:
+define void @s_shuffle_v4p0_v4p0__0_5_5_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__0_5_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s22
-; GFX900-NEXT: s_mov_b32 s9, s23
-; GFX900-NEXT: s_mov_b32 s10, s20
-; GFX900-NEXT: s_mov_b32 s11, s21
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
; GFX900-NEXT: s_mov_b32 s12, s14
; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
@@ -18080,19 +21481,17 @@ define void @s_shuffle_v4p0_v4p0__7_6_3_3() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_6_3_3:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__0_5_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s22
-; GFX90A-NEXT: s_mov_b32 s9, s23
-; GFX90A-NEXT: s_mov_b32 s10, s20
-; GFX90A-NEXT: s_mov_b32 s11, s21
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
; GFX90A-NEXT: s_mov_b32 s12, s14
; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
@@ -18100,782 +21499,647 @@ define void @s_shuffle_v4p0_v4p0__7_6_3_3() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_6_3_3:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__0_5_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 6, i32 3, i32 3>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 0, i32 5, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_3_3() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_3_3:
+define void @s_shuffle_v4p0_v4p0__1_5_5_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__1_5_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_3_3:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__1_5_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_3_3:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__1_5_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s14
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 3, i32 3>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 1, i32 5, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_u_3() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_u_3:
+define void @s_shuffle_v4p0_v4p0__2_5_5_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__2_5_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_u_3:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__2_5_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_u_3:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__2_5_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 poison, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_7_0_3() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_0_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s14, s18
-; GFX9-NEXT: s_mov_b32 s15, s19
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 0, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_7_1_3() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_1_3:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: s_mov_b32 s14, s18
-; GFX9-NEXT: s_mov_b32 s15, s19
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 1, i32 3>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 2, i32 5, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_2_3() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_2_3:
+define void @s_shuffle_v4p0_v4p0__3_5_5_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__3_5_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_2_3:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__3_5_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_2_3:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__3_5_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 2, i32 3>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 3, i32 5, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_4_3() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_4_3:
+define void @s_shuffle_v4p0_v4p0__4_5_5_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__4_5_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s12, s4
-; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_4_3:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__4_5_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s12, s4
-; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_4_3:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__4_5_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 4, i32 3>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 4, i32 5, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_5_3() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_5_3:
+define void @s_shuffle_v4p0_v4p0__5_5_5_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__5_5_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s12, s6
-; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_5_3:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__5_5_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s12, s6
-; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_5_3:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__5_5_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 5, i32 3>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_6_3() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_6_3:
+define void @s_shuffle_v4p0_v4p0__6_5_5_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__6_5_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s14
-; GFX900-NEXT: s_mov_b32 s9, s15
-; GFX900-NEXT: s_mov_b32 s10, s14
-; GFX900-NEXT: s_mov_b32 s11, s15
-; GFX900-NEXT: s_mov_b32 s14, s18
-; GFX900-NEXT: s_mov_b32 s15, s19
+; GFX900-NEXT: s_mov_b32 s10, s6
+; GFX900-NEXT: s_mov_b32 s11, s7
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_6_3:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__6_5_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s14
-; GFX90A-NEXT: s_mov_b32 s9, s15
-; GFX90A-NEXT: s_mov_b32 s10, s14
-; GFX90A-NEXT: s_mov_b32 s11, s15
-; GFX90A-NEXT: s_mov_b32 s14, s18
-; GFX90A-NEXT: s_mov_b32 s15, s19
+; GFX90A-NEXT: s_mov_b32 s10, s6
+; GFX90A-NEXT: s_mov_b32 s11, s7
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_6_3:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__6_5_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
-; GFX942-NEXT: s_mov_b32 s14, s6
-; GFX942-NEXT: s_mov_b32 s15, s7
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 6, i32 3>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__u_4_4_4() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__u_4_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 poison, i32 4, i32 4, i32 4>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 6, i32 5, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__0_4_4_4() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__0_4_4_4:
+define void @s_shuffle_v4p0_v4p0__7_5_5_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_5_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__0_4_4_4:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_5_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__0_4_4_4:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_5_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 0, i32 4, i32 4, i32 4>
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 5, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__1_4_4_4() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__1_4_4_4:
+define void @s_shuffle_v4p0_v4p0__7_u_5_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_u_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s6
-; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__1_4_4_4:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_u_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s6
-; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__1_4_4_4:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_u_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 1, i32 4, i32 4, i32 4>
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 poison, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__2_4_4_4() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__2_4_4_4:
+define void @s_shuffle_v4p0_v4p0__7_0_5_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_0_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s4
+; GFX900-NEXT: s_mov_b32 s11, s5
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__2_4_4_4:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_0_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s4
+; GFX90A-NEXT: s_mov_b32 s11, s5
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__2_4_4_4:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_0_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 2, i32 4, i32 4, i32 4>
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 0, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__3_4_4_4() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__3_4_4_4:
+define void @s_shuffle_v4p0_v4p0__7_1_5_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_1_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__3_4_4_4:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_1_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__3_4_4_4:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_1_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 3, i32 4, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__4_4_4_4() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__4_4_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> poison, <4 x i32> <i32 4, i32 4, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__5_4_4_4() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__5_4_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 5, i32 4, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__6_4_4_4() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__6_4_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s4
-; GFX9-NEXT: s_mov_b32 s11, s5
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: s_mov_b32 s14, s4
-; GFX9-NEXT: s_mov_b32 s15, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 6, i32 4, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_4_4_4() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_4_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 4, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_u_4_4() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_u_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 poison, i32 4, i32 4>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 1, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_0_4_4() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_0_4_4:
+define void @s_shuffle_v4p0_v4p0__7_2_5_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_2_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[16:23]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s18
; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s10, s4
-; GFX900-NEXT: s_mov_b32 s11, s5
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s10, s20
+; GFX900-NEXT: s_mov_b32 s11, s21
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_0_4_4:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_2_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[16:23]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s18
; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s10, s4
-; GFX90A-NEXT: s_mov_b32 s11, s5
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s10, s20
+; GFX90A-NEXT: s_mov_b32 s11, s21
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_0_4_4:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_2_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
@@ -18884,1624 +22148,1017 @@ define void @s_shuffle_v4p0_v4p0__7_0_4_4() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 0, i32 4, i32 4>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 2, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_1_4_4() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_1_4_4:
+define void @s_shuffle_v4p0_v4p0__7_3_5_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_3_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s18
; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_1_4_4:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_3_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s18
; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_1_4_4:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_3_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 1, i32 4, i32 4>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 3, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_2_4_4() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_2_4_4:
+define void @s_shuffle_v4p0_v4p0__7_4_5_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_4_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s18
; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s10, s20
-; GFX900-NEXT: s_mov_b32 s11, s21
-; GFX900-NEXT: s_mov_b32 s14, s12
-; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_2_4_4:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_4_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s18
; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s10, s20
-; GFX90A-NEXT: s_mov_b32 s11, s21
-; GFX90A-NEXT: s_mov_b32 s14, s12
-; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_2_4_4:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_4_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 2, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_3_4_4() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_3_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 3, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_5_4_4() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_5_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 5, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_6_4_4() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_6_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s10, s16
-; GFX9-NEXT: s_mov_b32 s11, s17
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 6, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_7_4_4() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_4_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: s_mov_b32 s14, s4
-; GFX9-NEXT: s_mov_b32 s15, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 4, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_7_u_4() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_u_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s14, s4
-; GFX9-NEXT: s_mov_b32 s15, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 poison, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_7_0_4() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_0_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s14, s4
-; GFX9-NEXT: s_mov_b32 s15, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 0, i32 4>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 4, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_1_4() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_1_4:
+define void @s_shuffle_v4p0_v4p0__7_6_5_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_6_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s16
+; GFX900-NEXT: s_mov_b32 s11, s17
; GFX900-NEXT: s_mov_b32 s12, s14
; GFX900-NEXT: s_mov_b32 s13, s15
-; GFX900-NEXT: s_mov_b32 s14, s4
-; GFX900-NEXT: s_mov_b32 s15, s5
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_1_4:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_6_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s16
+; GFX90A-NEXT: s_mov_b32 s11, s17
; GFX90A-NEXT: s_mov_b32 s12, s14
; GFX90A-NEXT: s_mov_b32 s13, s15
-; GFX90A-NEXT: s_mov_b32 s14, s4
-; GFX90A-NEXT: s_mov_b32 s15, s5
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_1_4:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_6_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s13, s3
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[16:17]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 1, i32 4>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 6, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_2_4() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_2_4:
+define void @s_shuffle_v4p0_v4p0__7_7_5_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_5_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s14, s4
-; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_2_4:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_5_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s14, s4
-; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_2_4:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_5_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 2, i32 4>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 5, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_3_4() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_3_4:
+define void @s_shuffle_v4p0_v4p0__7_7_u_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_u_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s10
; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
-; GFX900-NEXT: s_mov_b32 s14, s4
-; GFX900-NEXT: s_mov_b32 s15, s5
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_3_4:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_u_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s10
; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
-; GFX90A-NEXT: s_mov_b32 s14, s4
-; GFX90A-NEXT: s_mov_b32 s15, s5
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_3_4:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_u_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s13, s15
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 3, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_7_5_4() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_5_4:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: s_mov_b32 s14, s4
-; GFX9-NEXT: s_mov_b32 s15, s5
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 5, i32 4>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 poison, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_6_4() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_6_4:
+define void @s_shuffle_v4p0_v4p0__7_7_0_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_0_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s22
-; GFX900-NEXT: s_mov_b32 s9, s23
-; GFX900-NEXT: s_mov_b32 s10, s22
-; GFX900-NEXT: s_mov_b32 s11, s23
-; GFX900-NEXT: s_mov_b32 s12, s20
-; GFX900-NEXT: s_mov_b32 s13, s21
-; GFX900-NEXT: s_mov_b32 s14, s16
-; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_6_4:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_0_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s22
-; GFX90A-NEXT: s_mov_b32 s9, s23
-; GFX90A-NEXT: s_mov_b32 s10, s22
-; GFX90A-NEXT: s_mov_b32 s11, s23
-; GFX90A-NEXT: s_mov_b32 s12, s20
-; GFX90A-NEXT: s_mov_b32 s13, s21
-; GFX90A-NEXT: s_mov_b32 s14, s16
-; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_6_4:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_0_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s6
-; GFX942-NEXT: s_mov_b32 s11, s7
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
-; GFX942-NEXT: s_mov_b32 s14, s0
-; GFX942-NEXT: s_mov_b32 s15, s1
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 6, i32 4>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__u_5_5_5() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__u_5_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 poison, i32 5, i32 5, i32 5>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 0, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__0_5_5_5() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__0_5_5_5:
+define void @s_shuffle_v4p0_v4p0__7_7_1_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_1_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s14
-; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
; GFX900-NEXT: s_mov_b32 s12, s14
; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__0_5_5_5:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_1_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s14
-; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
; GFX90A-NEXT: s_mov_b32 s12, s14
; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__0_5_5_5:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_1_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s14
-; GFX942-NEXT: s_mov_b32 s11, s15
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 0, i32 5, i32 5, i32 5>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 1, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__1_5_5_5() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__1_5_5_5:
+define void @s_shuffle_v4p0_v4p0__7_7_2_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_2_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s6
-; GFX900-NEXT: s_mov_b32 s9, s7
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
-; GFX900-NEXT: s_mov_b32 s14, s10
-; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__1_5_5_5:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_2_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s6
-; GFX90A-NEXT: s_mov_b32 s9, s7
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
-; GFX90A-NEXT: s_mov_b32 s14, s10
-; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__1_5_5_5:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_2_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 1, i32 5, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__2_5_5_5() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__2_5_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 2, i32 5, i32 5, i32 5>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 2, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__3_5_5_5() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__3_5_5_5:
+define void @s_shuffle_v4p0_v4p0__7_7_3_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_3_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s18
-; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s12, s10
-; GFX900-NEXT: s_mov_b32 s13, s11
-; GFX900-NEXT: s_mov_b32 s14, s10
-; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__3_5_5_5:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_3_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s18
-; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s12, s10
-; GFX90A-NEXT: s_mov_b32 s13, s11
-; GFX90A-NEXT: s_mov_b32 s14, s10
-; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__3_5_5_5:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_3_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; use s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 3, i32 5, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__4_5_5_5() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__4_5_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 4, i32 5, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__5_5_5_5() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__5_5_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 5, i32 5, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__6_5_5_5() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__6_5_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s6
-; GFX9-NEXT: s_mov_b32 s11, s7
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: s_mov_b32 s14, s6
-; GFX9-NEXT: s_mov_b32 s15, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 6, i32 5, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_5_5_5() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_5_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 5, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_u_5_5() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_u_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 poison, i32 5, i32 5>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 3, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_0_5_5() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_0_5_5:
+define void @s_shuffle_v4p0_v4p0__7_7_4_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_4_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s18
-; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s10, s4
-; GFX900-NEXT: s_mov_b32 s11, s5
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s6
+; GFX900-NEXT: s_mov_b32 s15, s7
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_0_5_5:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_4_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s18
-; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s10, s4
-; GFX90A-NEXT: s_mov_b32 s11, s5
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s6
+; GFX90A-NEXT: s_mov_b32 s15, s7
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_0_5_5:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_4_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:19]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 0, i32 5, i32 5>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 4, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_1_5_5() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_1_5_5:
+define void @s_shuffle_v4p0_v4p0__7_7_6_5() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_6_5:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_mov_b32 s8, s18
; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s10, s18
+; GFX900-NEXT: s_mov_b32 s11, s19
+; GFX900-NEXT: s_mov_b32 s12, s16
+; GFX900-NEXT: s_mov_b32 s13, s17
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_1_5_5:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_6_5:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_mov_b32 s8, s18
; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s10, s18
+; GFX90A-NEXT: s_mov_b32 s11, s19
+; GFX90A-NEXT: s_mov_b32 s12, s16
+; GFX90A-NEXT: s_mov_b32 s13, s17
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_1_5_5:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_6_5:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[16:17]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 1, i32 5, i32 5>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 6, i32 5>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_2_5_5() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_2_5_5:
+define void @s_shuffle_v4p0_v4p0__u_6_6_6() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__u_6_6_6:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[16:23]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s18
-; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s10, s20
-; GFX900-NEXT: s_mov_b32 s11, s21
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_2_5_5:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__u_6_6_6:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[16:23]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s18
-; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s10, s20
-; GFX90A-NEXT: s_mov_b32 s11, s21
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_2_5_5:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__u_6_6_6:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[12:19]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 2, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_3_5_5() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_3_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 3, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_4_5_5() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_4_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 4, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_6_5_5() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_6_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s10, s16
-; GFX9-NEXT: s_mov_b32 s11, s17
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 6, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_7_5_5() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_5_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: s_mov_b32 s14, s6
-; GFX9-NEXT: s_mov_b32 s15, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 5, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_7_u_5() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_u_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s14, s6
-; GFX9-NEXT: s_mov_b32 s15, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 poison, i32 5>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 poison, i32 6, i32 6, i32 6>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_0_5() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_0_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s14, s6
-; GFX9-NEXT: s_mov_b32 s15, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+define void @s_shuffle_v4p0_v4p0__0_6_6_6() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__0_6_6_6:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s16
+; GFX900-NEXT: s_mov_b32 s11, s17
+; GFX900-NEXT: s_mov_b32 s12, s16
+; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__0_6_6_6:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s16
+; GFX90A-NEXT: s_mov_b32 s11, s17
+; GFX90A-NEXT: s_mov_b32 s12, s16
+; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__0_6_6_6:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 0, i32 5>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 0, i32 6, i32 6, i32 6>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_1_5() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_1_5:
+define void @s_shuffle_v4p0_v4p0__1_6_6_6() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__1_6_6_6:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
-; GFX900-NEXT: s_mov_b32 s14, s6
-; GFX900-NEXT: s_mov_b32 s15, s7
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_1_5:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__1_6_6_6:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
-; GFX90A-NEXT: s_mov_b32 s14, s6
-; GFX90A-NEXT: s_mov_b32 s15, s7
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_1_5:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__1_6_6_6:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s13, s3
-; GFX942-NEXT: s_mov_b32 s14, s6
-; GFX942-NEXT: s_mov_b32 s15, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 1, i32 5>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 1, i32 6, i32 6, i32 6>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_2_5() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_2_5:
+define void @s_shuffle_v4p0_v4p0__2_6_6_6() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__2_6_6_6:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s14, s6
-; GFX900-NEXT: s_mov_b32 s15, s7
+; GFX900-NEXT: s_mov_b32 s10, s16
+; GFX900-NEXT: s_mov_b32 s11, s17
+; GFX900-NEXT: s_mov_b32 s12, s16
+; GFX900-NEXT: s_mov_b32 s13, s17
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_2_5:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__2_6_6_6:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s14, s6
-; GFX90A-NEXT: s_mov_b32 s15, s7
+; GFX90A-NEXT: s_mov_b32 s10, s16
+; GFX90A-NEXT: s_mov_b32 s11, s17
+; GFX90A-NEXT: s_mov_b32 s12, s16
+; GFX90A-NEXT: s_mov_b32 s13, s17
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_2_5:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__2_6_6_6:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_nop 0
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s14, s6
-; GFX942-NEXT: s_mov_b32 s15, s7
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 2, i32 5>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 2, i32 6, i32 6, i32 6>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_7_3_5() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_3_5:
+define void @s_shuffle_v4p0_v4p0__3_6_6_6() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__3_6_6_6:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s10
-; GFX900-NEXT: s_mov_b32 s9, s11
-; GFX900-NEXT: s_mov_b32 s12, s14
-; GFX900-NEXT: s_mov_b32 s13, s15
-; GFX900-NEXT: s_mov_b32 s14, s6
-; GFX900-NEXT: s_mov_b32 s15, s7
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_3_5:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__3_6_6_6:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s10
-; GFX90A-NEXT: s_mov_b32 s9, s11
-; GFX90A-NEXT: s_mov_b32 s12, s14
-; GFX90A-NEXT: s_mov_b32 s13, s15
-; GFX90A-NEXT: s_mov_b32 s14, s6
-; GFX90A-NEXT: s_mov_b32 s15, s7
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_3_5:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__3_6_6_6:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s14
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s13, s15
-; GFX942-NEXT: s_mov_b32 s14, s6
-; GFX942-NEXT: s_mov_b32 s15, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 3, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_7_4_5() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_4_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: s_mov_b32 s14, s6
-; GFX9-NEXT: s_mov_b32 s15, s7
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 4, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_7_6_5() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_6_5:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s10, s18
-; GFX9-NEXT: s_mov_b32 s11, s19
-; GFX9-NEXT: s_mov_b32 s12, s16
-; GFX9-NEXT: s_mov_b32 s13, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 6, i32 5>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__u_6_6_6() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__u_6_6_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 poison, i32 6, i32 6, i32 6>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 3, i32 6, i32 6, i32 6>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__0_6_6_6() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__0_6_6_6:
+define void @s_shuffle_v4p0_v4p0__4_6_6_6() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__4_6_6_6:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s16
-; GFX900-NEXT: s_mov_b32 s11, s17
-; GFX900-NEXT: s_mov_b32 s12, s16
-; GFX900-NEXT: s_mov_b32 s13, s17
-; GFX900-NEXT: s_mov_b32 s14, s16
-; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__0_6_6_6:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__4_6_6_6:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s16
-; GFX90A-NEXT: s_mov_b32 s11, s17
-; GFX90A-NEXT: s_mov_b32 s12, s16
-; GFX90A-NEXT: s_mov_b32 s13, s17
-; GFX90A-NEXT: s_mov_b32 s14, s16
-; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__0_6_6_6:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__4_6_6_6:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 0, i32 6, i32 6, i32 6>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 4, i32 6, i32 6, i32 6>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__1_6_6_6() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__1_6_6_6:
+define void @s_shuffle_v4p0_v4p0__5_6_6_6() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__5_6_6_6:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[4:11]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s6
-; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
; GFX900-NEXT: s_mov_b32 s10, s12
; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: s_mov_b32 s14, s12
@@ -20511,17 +23168,14 @@ define void @s_shuffle_v4p0_v4p0__1_6_6_6() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__1_6_6_6:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__5_6_6_6:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[4:11]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s6
-; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
; GFX90A-NEXT: s_mov_b32 s10, s12
; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: s_mov_b32 s14, s12
@@ -20531,112 +23185,90 @@ define void @s_shuffle_v4p0_v4p0__1_6_6_6() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__1_6_6_6:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__5_6_6_6:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 1, i32 6, i32 6, i32 6>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 5, i32 6, i32 6, i32 6>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__2_6_6_6() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__2_6_6_6:
+define void @s_shuffle_v4p0_v4p0__6_6_6_6() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__6_6_6_6:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[4:11]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s10, s16
-; GFX900-NEXT: s_mov_b32 s11, s17
-; GFX900-NEXT: s_mov_b32 s12, s16
-; GFX900-NEXT: s_mov_b32 s13, s17
-; GFX900-NEXT: s_mov_b32 s14, s16
-; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: s_mov_b32 s10, s8
+; GFX900-NEXT: s_mov_b32 s11, s9
+; GFX900-NEXT: s_mov_b32 s12, s8
+; GFX900-NEXT: s_mov_b32 s13, s9
+; GFX900-NEXT: s_mov_b32 s14, s8
+; GFX900-NEXT: s_mov_b32 s15, s9
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__2_6_6_6:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__6_6_6_6:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[4:11]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s10, s16
-; GFX90A-NEXT: s_mov_b32 s11, s17
-; GFX90A-NEXT: s_mov_b32 s12, s16
-; GFX90A-NEXT: s_mov_b32 s13, s17
-; GFX90A-NEXT: s_mov_b32 s14, s16
-; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: s_mov_b32 s10, s8
+; GFX90A-NEXT: s_mov_b32 s11, s9
+; GFX90A-NEXT: s_mov_b32 s12, s8
+; GFX90A-NEXT: s_mov_b32 s13, s9
+; GFX90A-NEXT: s_mov_b32 s14, s8
+; GFX90A-NEXT: s_mov_b32 s15, s9
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__2_6_6_6:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__6_6_6_6:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[10:11], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[8:9]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[8:9]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 2, i32 6, i32 6, i32 6>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 6, i32 6, i32 6, i32 6>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__3_6_6_6() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__3_6_6_6:
+define void @s_shuffle_v4p0_v4p0__7_6_6_6() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_6_6_6:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
-; GFX900-NEXT: ; def s[12:19]
-; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[8:15]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s18
-; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
; GFX900-NEXT: s_mov_b32 s10, s12
; GFX900-NEXT: s_mov_b32 s11, s13
; GFX900-NEXT: s_mov_b32 s14, s12
@@ -20646,17 +23278,14 @@ define void @s_shuffle_v4p0_v4p0__3_6_6_6() {
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__3_6_6_6:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_6_6_6:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
-; GFX90A-NEXT: ; def s[12:19]
-; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[8:15]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s18
-; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
; GFX90A-NEXT: s_mov_b32 s10, s12
; GFX90A-NEXT: s_mov_b32 s11, s13
; GFX90A-NEXT: s_mov_b32 s14, s12
@@ -20666,119 +23295,19 @@ define void @s_shuffle_v4p0_v4p0__3_6_6_6() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__3_6_6_6:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_6_6_6:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s12
-; GFX942-NEXT: s_mov_b32 s11, s13
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 3, i32 6, i32 6, i32 6>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__4_6_6_6() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__4_6_6_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 4, i32 6, i32 6, i32 6>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__5_6_6_6() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__5_6_6_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 5, i32 6, i32 6, i32 6>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__6_6_6_6() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__6_6_6_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s8
-; GFX9-NEXT: s_mov_b32 s11, s9
-; GFX9-NEXT: s_mov_b32 s12, s8
-; GFX9-NEXT: s_mov_b32 s13, s9
-; GFX9-NEXT: s_mov_b32 s14, s8
-; GFX9-NEXT: s_mov_b32 s15, s9
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 6, i32 6, i32 6, i32 6>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_6_6_6() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_6_6_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 6, i32 6, i32 6>
@@ -20787,20 +23316,48 @@ define void @s_shuffle_v4p0_v4p0__7_6_6_6() {
}
define void @s_shuffle_v4p0_v4p0__7_u_6_6() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_u_6_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_u_6_6:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_u_6_6:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_u_6_6:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 poison, i32 6, i32 6>
@@ -20858,12 +23415,9 @@ define void @s_shuffle_v4p0_v4p0__7_0_6_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -20925,12 +23479,9 @@ define void @s_shuffle_v4p0_v4p0__7_1_6_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -20992,12 +23543,9 @@ define void @s_shuffle_v4p0_v4p0__7_2_6_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s14, s12
-; GFX942-NEXT: s_mov_b32 s15, s13
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -21060,12 +23608,9 @@ define void @s_shuffle_v4p0_v4p0__7_3_6_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -21120,66 +23665,121 @@ define void @s_shuffle_v4p0_v4p0__7_4_6_6() {
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 4, i32 6, i32 6>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_5_6_6() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_5_6_6:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_5_6_6:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_5_6_6:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 5, i32 6, i32 6>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_7_6_6() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_6_6:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s14, s12
+; GFX900-NEXT: s_mov_b32 s15, s13
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_6_6:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s14, s12
+; GFX90A-NEXT: s_mov_b32 s15, s13
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_6_6:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s4
-; GFX942-NEXT: s_mov_b32 s13, s5
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[12:13]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 4, i32 6, i32 6>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_5_6_6() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_5_6_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 5, i32 6, i32 6>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_7_6_6() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_6_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: s_mov_b32 s14, s12
-; GFX9-NEXT: s_mov_b32 s15, s13
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 6, i32 6>
@@ -21228,12 +23828,9 @@ define void @s_shuffle_v4p0_v4p0__7_7_u_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s6
-; GFX942-NEXT: s_mov_b32 s11, s7
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -21295,12 +23892,9 @@ define void @s_shuffle_v4p0_v4p0__7_7_0_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s6
-; GFX942-NEXT: s_mov_b32 s11, s7
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -21366,14 +23960,10 @@ define void @s_shuffle_v4p0_v4p0__7_7_1_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s10, s18
-; GFX942-NEXT: s_mov_b32 s11, s19
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
-; GFX942-NEXT: s_mov_b32 s14, s16
-; GFX942-NEXT: s_mov_b32 s15, s17
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -21435,12 +24025,9 @@ define void @s_shuffle_v4p0_v4p0__7_7_2_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s6
-; GFX942-NEXT: s_mov_b32 s11, s7
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -21506,14 +24093,10 @@ define void @s_shuffle_v4p0_v4p0__7_7_3_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s18
-; GFX942-NEXT: s_mov_b32 s9, s19
-; GFX942-NEXT: s_mov_b32 s10, s18
-; GFX942-NEXT: s_mov_b32 s11, s19
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
-; GFX942-NEXT: s_mov_b32 s14, s16
-; GFX942-NEXT: s_mov_b32 s15, s17
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -21526,22 +24109,53 @@ define void @s_shuffle_v4p0_v4p0__7_7_3_6() {
}
define void @s_shuffle_v4p0_v4p0__7_7_4_6() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_4_6:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s18
-; GFX9-NEXT: s_mov_b32 s9, s19
-; GFX9-NEXT: s_mov_b32 s10, s18
-; GFX9-NEXT: s_mov_b32 s11, s19
-; GFX9-NEXT: s_mov_b32 s14, s16
-; GFX9-NEXT: s_mov_b32 s15, s17
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_4_6:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s18
+; GFX900-NEXT: s_mov_b32 s11, s19
+; GFX900-NEXT: s_mov_b32 s14, s16
+; GFX900-NEXT: s_mov_b32 s15, s17
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_4_6:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s18
+; GFX90A-NEXT: s_mov_b32 s11, s19
+; GFX90A-NEXT: s_mov_b32 s14, s16
+; GFX90A-NEXT: s_mov_b32 s15, s17
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_4_6:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[12:19]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[18:19]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[16:17]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 4, i32 6>
@@ -21594,14 +24208,10 @@ define void @s_shuffle_v4p0_v4p0__7_7_5_6() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s6
-; GFX942-NEXT: s_mov_b32 s11, s7
-; GFX942-NEXT: s_mov_b32 s12, s2
-; GFX942-NEXT: s_mov_b32 s13, s3
-; GFX942-NEXT: s_mov_b32 s14, s4
-; GFX942-NEXT: s_mov_b32 s15, s5
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[4:5]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -21614,20 +24224,48 @@ define void @s_shuffle_v4p0_v4p0__7_7_5_6() {
}
define void @s_shuffle_v4p0_v4p0__u_7_7_7() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__u_7_7_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__u_7_7_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__u_7_7_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__u_7_7_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 poison, i32 7, i32 7, i32 7>
@@ -21685,12 +24323,9 @@ define void @s_shuffle_v4p0_v4p0__0_7_7_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s6
-; GFX942-NEXT: s_mov_b32 s11, s7
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
-; GFX942-NEXT: s_mov_b32 s14, s6
-; GFX942-NEXT: s_mov_b32 s15, s7
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -21753,12 +24388,9 @@ define void @s_shuffle_v4p0_v4p0__1_7_7_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s2
-; GFX942-NEXT: s_mov_b32 s9, s3
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -21821,12 +24453,9 @@ define void @s_shuffle_v4p0_v4p0__2_7_7_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s10, s6
-; GFX942-NEXT: s_mov_b32 s11, s7
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
-; GFX942-NEXT: s_mov_b32 s14, s6
-; GFX942-NEXT: s_mov_b32 s15, s7
+; GFX942-NEXT: s_mov_b64 s[10:11], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -21889,12 +24518,9 @@ define void @s_shuffle_v4p0_v4p0__3_7_7_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s12, s10
-; GFX942-NEXT: s_mov_b32 s13, s11
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -21907,20 +24533,48 @@ define void @s_shuffle_v4p0_v4p0__3_7_7_7() {
}
define void @s_shuffle_v4p0_v4p0__4_7_7_7() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__4_7_7_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__4_7_7_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__4_7_7_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__4_7_7_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 4, i32 7, i32 7, i32 7>
@@ -21929,22 +24583,53 @@ define void @s_shuffle_v4p0_v4p0__4_7_7_7() {
}
define void @s_shuffle_v4p0_v4p0__5_7_7_7() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__5_7_7_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s6
-; GFX9-NEXT: s_mov_b32 s9, s7
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__5_7_7_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s6
+; GFX900-NEXT: s_mov_b32 s9, s7
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__5_7_7_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s6
+; GFX90A-NEXT: s_mov_b32 s9, s7
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__5_7_7_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 5, i32 7, i32 7, i32 7>
@@ -21953,20 +24638,48 @@ define void @s_shuffle_v4p0_v4p0__5_7_7_7() {
}
define void @s_shuffle_v4p0_v4p0__6_7_7_7() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__6_7_7_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s12, s10
-; GFX9-NEXT: s_mov_b32 s13, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__6_7_7_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s12, s10
+; GFX900-NEXT: s_mov_b32 s13, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__6_7_7_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s12, s10
+; GFX90A-NEXT: s_mov_b32 s13, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__6_7_7_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[12:13], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 6, i32 7, i32 7, i32 7>
@@ -21975,20 +24688,48 @@ define void @s_shuffle_v4p0_v4p0__6_7_7_7() {
}
define void @s_shuffle_v4p0_v4p0__7_u_7_7() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_u_7_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_u_7_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_u_7_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_u_7_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 poison, i32 7, i32 7>
@@ -22046,12 +24787,9 @@ define void @s_shuffle_v4p0_v4p0__7_0_7_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -22113,12 +24851,9 @@ define void @s_shuffle_v4p0_v4p0__7_1_7_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
-; GFX942-NEXT: s_mov_b32 s14, s6
-; GFX942-NEXT: s_mov_b32 s15, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -22180,12 +24915,9 @@ define void @s_shuffle_v4p0_v4p0__7_2_7_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s14
-; GFX942-NEXT: s_mov_b32 s9, s15
-; GFX942-NEXT: s_mov_b32 s10, s4
-; GFX942-NEXT: s_mov_b32 s11, s5
-; GFX942-NEXT: s_mov_b32 s12, s14
-; GFX942-NEXT: s_mov_b32 s13, s15
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -22238,183 +24970,297 @@ define void @s_shuffle_v4p0_v4p0__7_3_7_7() {
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_3_7_7:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_3_7_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_nop 0
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 3, i32 7, i32 7>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_4_7_7() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_4_7_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[12:19]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s18
+; GFX900-NEXT: s_mov_b32 s9, s19
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s18
+; GFX900-NEXT: s_mov_b32 s13, s19
+; GFX900-NEXT: s_mov_b32 s14, s18
+; GFX900-NEXT: s_mov_b32 s15, s19
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_4_7_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[12:19]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s18
+; GFX90A-NEXT: s_mov_b32 s9, s19
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s18
+; GFX90A-NEXT: s_mov_b32 s13, s19
+; GFX90A-NEXT: s_mov_b32 s14, s18
+; GFX90A-NEXT: s_mov_b32 s15, s19
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_4_7_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[0:1]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[6:7]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 4, i32 7, i32 7>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_5_7_7() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_5_7_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_5_7_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_5_7_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 5, i32 7, i32 7>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_6_7_7() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_6_7_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s12
+; GFX900-NEXT: s_mov_b32 s11, s13
+; GFX900-NEXT: s_mov_b32 s12, s14
+; GFX900-NEXT: s_mov_b32 s13, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_6_7_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s12
+; GFX90A-NEXT: s_mov_b32 s11, s13
+; GFX90A-NEXT: s_mov_b32 s12, s14
+; GFX90A-NEXT: s_mov_b32 s13, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_6_7_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[12:13]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
+ %vec0 = call <4 x ptr> asm "; def $0", "=s"()
+ %vec1 = call <4 x ptr> asm "; def $0", "=s"()
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 6, i32 7, i32 7>
+ call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
+ ret void
+}
+
+define void @s_shuffle_v4p0_v4p0__7_7_u_7() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_u_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_u_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_u_7:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_nop 0
-; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
-; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
-; GFX942-NEXT: s_mov_b32 s14, s6
-; GFX942-NEXT: s_mov_b32 s15, s7
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 3, i32 7, i32 7>
+ %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 poison, i32 7>
call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
ret void
}
-define void @s_shuffle_v4p0_v4p0__7_4_7_7() {
-; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_4_7_7:
+define void @s_shuffle_v4p0_v4p0__7_7_0_7() {
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_0_7:
; GFX900: ; %bb.0:
; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; def s[12:19]
; GFX900-NEXT: ;;#ASMEND
-; GFX900-NEXT: s_mov_b32 s8, s18
-; GFX900-NEXT: s_mov_b32 s9, s19
-; GFX900-NEXT: s_mov_b32 s10, s12
-; GFX900-NEXT: s_mov_b32 s11, s13
-; GFX900-NEXT: s_mov_b32 s12, s18
-; GFX900-NEXT: s_mov_b32 s13, s19
-; GFX900-NEXT: s_mov_b32 s14, s18
-; GFX900-NEXT: s_mov_b32 s15, s19
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
; GFX900-NEXT: ;;#ASMSTART
; GFX900-NEXT: ; use s[8:15]
; GFX900-NEXT: ;;#ASMEND
; GFX900-NEXT: s_setpc_b64 s[30:31]
;
-; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_4_7_7:
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_0_7:
; GFX90A: ; %bb.0:
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; def s[12:19]
; GFX90A-NEXT: ;;#ASMEND
-; GFX90A-NEXT: s_mov_b32 s8, s18
-; GFX90A-NEXT: s_mov_b32 s9, s19
-; GFX90A-NEXT: s_mov_b32 s10, s12
-; GFX90A-NEXT: s_mov_b32 s11, s13
-; GFX90A-NEXT: s_mov_b32 s12, s18
-; GFX90A-NEXT: s_mov_b32 s13, s19
-; GFX90A-NEXT: s_mov_b32 s14, s18
-; GFX90A-NEXT: s_mov_b32 s15, s19
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
; GFX90A-NEXT: ;;#ASMSTART
; GFX90A-NEXT: ; use s[8:15]
; GFX90A-NEXT: ;;#ASMEND
; GFX90A-NEXT: s_setpc_b64 s[30:31]
;
-; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_4_7_7:
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_0_7:
; GFX942: ; %bb.0:
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX942-NEXT: ;;#ASMSTART
-; GFX942-NEXT: ; def s[0:7]
+; GFX942-NEXT: ; def s[12:19]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s6
-; GFX942-NEXT: s_mov_b32 s9, s7
-; GFX942-NEXT: s_mov_b32 s10, s0
-; GFX942-NEXT: s_mov_b32 s11, s1
-; GFX942-NEXT: s_mov_b32 s12, s6
-; GFX942-NEXT: s_mov_b32 s13, s7
-; GFX942-NEXT: s_mov_b32 s14, s6
-; GFX942-NEXT: s_mov_b32 s15, s7
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
; GFX942-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 4, i32 7, i32 7>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_5_7_7() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_5_7_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 5, i32 7, i32 7>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_6_7_7() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_6_7_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s12
-; GFX9-NEXT: s_mov_b32 s11, s13
-; GFX9-NEXT: s_mov_b32 s12, s14
-; GFX9-NEXT: s_mov_b32 s13, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 6, i32 7, i32 7>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_7_u_7() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_u_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
- %vec0 = call <4 x ptr> asm "; def $0", "=s"()
- %vec1 = call <4 x ptr> asm "; def $0", "=s"()
- %shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 poison, i32 7>
- call void asm sideeffect "; use $0", "{s[8:15]}"(<4 x ptr> %shuf)
- ret void
-}
-
-define void @s_shuffle_v4p0_v4p0__7_7_0_7() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_0_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[12:19]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 0, i32 7>
@@ -22469,15 +25315,12 @@ define void @s_shuffle_v4p0_v4p0__7_7_1_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[0:7]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s2
+; GFX942-NEXT: s_mov_b64 s[12:13], s[2:3]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s13, s3
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -22536,10 +25379,8 @@ define void @s_shuffle_v4p0_v4p0__7_7_2_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -22598,15 +25439,12 @@ define void @s_shuffle_v4p0_v4p0__7_7_3_7() {
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[8:15]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s12, s14
+; GFX942-NEXT: s_mov_b64 s[12:13], s[14:15]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; def s[4:11]
; GFX942-NEXT: ;;#ASMEND
-; GFX942-NEXT: s_mov_b32 s8, s10
-; GFX942-NEXT: s_mov_b32 s9, s11
-; GFX942-NEXT: s_mov_b32 s13, s15
-; GFX942-NEXT: s_mov_b32 s14, s10
-; GFX942-NEXT: s_mov_b32 s15, s11
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
; GFX942-NEXT: ;;#ASMSTART
; GFX942-NEXT: ; use s[8:15]
; GFX942-NEXT: ;;#ASMEND
@@ -22619,22 +25457,53 @@ define void @s_shuffle_v4p0_v4p0__7_7_3_7() {
}
define void @s_shuffle_v4p0_v4p0__7_7_4_7() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_4_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s4
-; GFX9-NEXT: s_mov_b32 s13, s5
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_4_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s4
+; GFX900-NEXT: s_mov_b32 s13, s5
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_4_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s4
+; GFX90A-NEXT: s_mov_b32 s13, s5
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_4_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[4:5]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 4, i32 7>
@@ -22643,22 +25512,53 @@ define void @s_shuffle_v4p0_v4p0__7_7_4_7() {
}
define void @s_shuffle_v4p0_v4p0__7_7_5_7() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_5_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[4:11]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s10
-; GFX9-NEXT: s_mov_b32 s9, s11
-; GFX9-NEXT: s_mov_b32 s12, s6
-; GFX9-NEXT: s_mov_b32 s13, s7
-; GFX9-NEXT: s_mov_b32 s14, s10
-; GFX9-NEXT: s_mov_b32 s15, s11
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_5_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[4:11]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s10
+; GFX900-NEXT: s_mov_b32 s9, s11
+; GFX900-NEXT: s_mov_b32 s12, s6
+; GFX900-NEXT: s_mov_b32 s13, s7
+; GFX900-NEXT: s_mov_b32 s14, s10
+; GFX900-NEXT: s_mov_b32 s15, s11
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_5_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[4:11]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s10
+; GFX90A-NEXT: s_mov_b32 s9, s11
+; GFX90A-NEXT: s_mov_b32 s12, s6
+; GFX90A-NEXT: s_mov_b32 s13, s7
+; GFX90A-NEXT: s_mov_b32 s14, s10
+; GFX90A-NEXT: s_mov_b32 s15, s11
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_5_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[4:11]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[10:11]
+; GFX942-NEXT: s_mov_b64 s[12:13], s[6:7]
+; GFX942-NEXT: s_mov_b64 s[14:15], s[10:11]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 5, i32 7>
@@ -22667,20 +25567,48 @@ define void @s_shuffle_v4p0_v4p0__7_7_5_7() {
}
define void @s_shuffle_v4p0_v4p0__7_7_6_7() {
-; GFX9-LABEL: s_shuffle_v4p0_v4p0__7_7_6_7:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; def s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_mov_b32 s8, s14
-; GFX9-NEXT: s_mov_b32 s9, s15
-; GFX9-NEXT: s_mov_b32 s10, s14
-; GFX9-NEXT: s_mov_b32 s11, s15
-; GFX9-NEXT: ;;#ASMSTART
-; GFX9-NEXT: ; use s[8:15]
-; GFX9-NEXT: ;;#ASMEND
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-LABEL: s_shuffle_v4p0_v4p0__7_7_6_7:
+; GFX900: ; %bb.0:
+; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; def s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_mov_b32 s8, s14
+; GFX900-NEXT: s_mov_b32 s9, s15
+; GFX900-NEXT: s_mov_b32 s10, s14
+; GFX900-NEXT: s_mov_b32 s11, s15
+; GFX900-NEXT: ;;#ASMSTART
+; GFX900-NEXT: ; use s[8:15]
+; GFX900-NEXT: ;;#ASMEND
+; GFX900-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX90A-LABEL: s_shuffle_v4p0_v4p0__7_7_6_7:
+; GFX90A: ; %bb.0:
+; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; def s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_mov_b32 s8, s14
+; GFX90A-NEXT: s_mov_b32 s9, s15
+; GFX90A-NEXT: s_mov_b32 s10, s14
+; GFX90A-NEXT: s_mov_b32 s11, s15
+; GFX90A-NEXT: ;;#ASMSTART
+; GFX90A-NEXT: ; use s[8:15]
+; GFX90A-NEXT: ;;#ASMEND
+; GFX90A-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX942-LABEL: s_shuffle_v4p0_v4p0__7_7_6_7:
+; GFX942: ; %bb.0:
+; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; def s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_mov_b64 s[8:9], s[14:15]
+; GFX942-NEXT: s_mov_b64 s[10:11], s[14:15]
+; GFX942-NEXT: ;;#ASMSTART
+; GFX942-NEXT: ; use s[8:15]
+; GFX942-NEXT: ;;#ASMEND
+; GFX942-NEXT: s_setpc_b64 s[30:31]
%vec0 = call <4 x ptr> asm "; def $0", "=s"()
%vec1 = call <4 x ptr> asm "; def $0", "=s"()
%shuf = shufflevector <4 x ptr> %vec0, <4 x ptr> %vec1, <4 x i32> <i32 7, i32 7, i32 6, i32 7>
diff --git a/llvm/test/CodeGen/AMDGPU/smfmac_no_agprs.ll b/llvm/test/CodeGen/AMDGPU/smfmac_no_agprs.ll
index a2c5db0d2646d..c2dfb9c95dcf4 100644
--- a/llvm/test/CodeGen/AMDGPU/smfmac_no_agprs.ll
+++ b/llvm/test/CodeGen/AMDGPU/smfmac_no_agprs.ll
@@ -6,25 +6,22 @@ define protected amdgpu_kernel void @test(ptr addrspace(1) %in, ptr addrspace(1)
; GFX942-LABEL: test:
; GFX942: ; %bb.0: ; %entry
; GFX942-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x0
-; GFX942-NEXT: v_mov_b32_e32 v0, 0
-; GFX942-NEXT: v_mov_b32_e32 v1, v0
-; GFX942-NEXT: v_mov_b32_e32 v2, v0
-; GFX942-NEXT: v_mov_b32_e32 v3, v0
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], 0
+; GFX942-NEXT: v_mov_b64_e32 v[6:7], v[4:5]
+; GFX942-NEXT: v_mov_b32_e32 v10, 0
; GFX942-NEXT: s_waitcnt lgkmcnt(0)
; GFX942-NEXT: s_load_dwordx4 s[4:7], s[0:1], 0x0
-; GFX942-NEXT: v_mov_b64_e32 v[12:13], v[2:3]
-; GFX942-NEXT: v_mov_b64_e32 v[10:11], v[0:1]
; GFX942-NEXT: s_waitcnt lgkmcnt(0)
; GFX942-NEXT: v_mov_b32_e32 v8, s4
; GFX942-NEXT: v_mov_b32_e32 v9, s5
-; GFX942-NEXT: v_mov_b32_e32 v4, s6
-; GFX942-NEXT: v_mov_b32_e32 v5, s7
-; GFX942-NEXT: v_mov_b32_e32 v6, s7
-; GFX942-NEXT: v_mov_b32_e32 v7, s7
+; GFX942-NEXT: v_mov_b32_e32 v0, s6
+; GFX942-NEXT: v_mov_b32_e32 v1, s7
+; GFX942-NEXT: v_mov_b32_e32 v2, s7
+; GFX942-NEXT: v_mov_b32_e32 v3, s7
; GFX942-NEXT: s_nop 1
-; GFX942-NEXT: v_smfmac_i32_16x16x64_i8 v[10:13], v[8:9], v[4:7], v9
+; GFX942-NEXT: v_smfmac_i32_16x16x64_i8 v[4:7], v[8:9], v[0:3], v9
; GFX942-NEXT: s_nop 6
-; GFX942-NEXT: global_store_dword v0, v13, s[2:3] offset:12
+; GFX942-NEXT: global_store_dword v10, v7, s[2:3] offset:12
; GFX942-NEXT: s_endpgm
entry:
%arrayidx = getelementptr inbounds i32, ptr addrspace(1) %in, i64 0
diff --git a/llvm/test/CodeGen/AMDGPU/swp-amdgpu-pipeline-minimal.ll b/llvm/test/CodeGen/AMDGPU/swp-amdgpu-pipeline-minimal.ll
index 3ce8d528b34b1..48f397eba7ed0 100644
--- a/llvm/test/CodeGen/AMDGPU/swp-amdgpu-pipeline-minimal.ll
+++ b/llvm/test/CodeGen/AMDGPU/swp-amdgpu-pipeline-minimal.ll
@@ -7,21 +7,19 @@ define amdgpu_kernel void @swp_amdgpu_pipeline_minimal(i1 %arg) {
; CHECK-UNPIPELINED-LABEL: swp_amdgpu_pipeline_minimal:
; CHECK-UNPIPELINED: ; %bb.0: ; %bb
; CHECK-UNPIPELINED-NEXT: s_load_dword s0, s[4:5], 0x0
-; CHECK-UNPIPELINED-NEXT: s_mov_b32 s4, 0
+; CHECK-UNPIPELINED-NEXT: s_mov_b64 s[4:5], 0
+; CHECK-UNPIPELINED-NEXT: s_mov_b32 s2, 0
; CHECK-UNPIPELINED-NEXT: v_mov_b32_e32 v1, 0
; CHECK-UNPIPELINED-NEXT: v_mov_b32_e32 v0, 0
-; CHECK-UNPIPELINED-NEXT: v_mov_b32_e32 v3, 0
; CHECK-UNPIPELINED-NEXT: s_waitcnt lgkmcnt(0)
; CHECK-UNPIPELINED-NEXT: s_bitcmp1_b32 s0, 0
+; CHECK-UNPIPELINED-NEXT: v_mov_b32_e32 v3, 0
; CHECK-UNPIPELINED-NEXT: s_cselect_b64 vcc, -1, 0
; CHECK-UNPIPELINED-NEXT: v_mov_b32_e32 v2, 0
-; CHECK-UNPIPELINED-NEXT: s_mov_b32 s5, s4
-; CHECK-UNPIPELINED-NEXT: s_mov_b32 s6, s4
-; CHECK-UNPIPELINED-NEXT: s_mov_b32 s7, s4
-; CHECK-UNPIPELINED-NEXT: s_mov_b32 s2, s4
-; CHECK-UNPIPELINED-NEXT: s_mov_b32 s9, s4
-; CHECK-UNPIPELINED-NEXT: s_mov_b32 s3, s4
-; CHECK-UNPIPELINED-NEXT: s_mov_b32 s8, s4
+; CHECK-UNPIPELINED-NEXT: s_mov_b64 s[6:7], s[4:5]
+; CHECK-UNPIPELINED-NEXT: s_mov_b32 s9, 0
+; CHECK-UNPIPELINED-NEXT: s_mov_b32 s3, 0
+; CHECK-UNPIPELINED-NEXT: s_mov_b32 s8, 0
; CHECK-UNPIPELINED-NEXT: .LBB0_1: ; %bb1
; CHECK-UNPIPELINED-NEXT: ; =>This Inner Loop Header: Depth=1
; CHECK-UNPIPELINED-NEXT: s_cmp_lt_i32 s9, 1
@@ -49,31 +47,30 @@ define amdgpu_kernel void @swp_amdgpu_pipeline_minimal(i1 %arg) {
;
; CHECK-PIPELINED-LABEL: swp_amdgpu_pipeline_minimal:
; CHECK-PIPELINED: ; %bb.0: ; %bb
-; CHECK-PIPELINED-NEXT: s_load_dword s1, s[4:5], 0x0
-; CHECK-PIPELINED-NEXT: s_mov_b32 s0, 0
-; CHECK-PIPELINED-NEXT: s_mov_b32 s2, s0
-; CHECK-PIPELINED-NEXT: s_mov_b32 s3, s0
-; CHECK-PIPELINED-NEXT: v_mov_b32_e32 v6, s0
+; CHECK-PIPELINED-NEXT: s_load_dword s0, s[4:5], 0x0
+; CHECK-PIPELINED-NEXT: s_mov_b32 s6, 0
+; CHECK-PIPELINED-NEXT: v_mov_b32_e32 v6, s6
+; CHECK-PIPELINED-NEXT: v_mov_b32_e32 v3, 0
+; CHECK-PIPELINED-NEXT: v_mov_b32_e32 v2, 0
; CHECK-PIPELINED-NEXT: s_waitcnt lgkmcnt(0)
-; CHECK-PIPELINED-NEXT: s_bitcmp1_b32 s1, 0
+; CHECK-PIPELINED-NEXT: s_bitcmp1_b32 s0, 0
; CHECK-PIPELINED-NEXT: s_cselect_b64 vcc, -1, 0
-; CHECK-PIPELINED-NEXT: s_cmp_lt_i32 s0, 1
-; CHECK-PIPELINED-NEXT: s_mov_b32 s1, s0
+; CHECK-PIPELINED-NEXT: s_mov_b64 s[0:1], 0
+; CHECK-PIPELINED-NEXT: s_cmp_lt_i32 s6, 1
+; CHECK-PIPELINED-NEXT: s_mov_b64 s[2:3], s[0:1]
; CHECK-PIPELINED-NEXT: s_cselect_b64 s[4:5], -1, 0
-; CHECK-PIPELINED-NEXT: s_or_b32 s6, s0, 1
-; CHECK-PIPELINED-NEXT: v_mov_b32_e32 v7, s6
+; CHECK-PIPELINED-NEXT: s_or_b32 s7, s6, 1
+; CHECK-PIPELINED-NEXT: v_mov_b32_e32 v7, s7
; CHECK-PIPELINED-NEXT: buffer_load_dword v4, v6, s[0:3], 0 offen
; CHECK-PIPELINED-NEXT: buffer_load_dword v5, v7, s[0:3], 0 offen
-; CHECK-PIPELINED-NEXT: v_mov_b32_e32 v3, 0
-; CHECK-PIPELINED-NEXT: v_mov_b32_e32 v2, 0
; CHECK-PIPELINED-NEXT: s_and_b64 s[4:5], vcc, s[4:5]
-; CHECK-PIPELINED-NEXT: s_add_i32 s9, s0, 1
-; CHECK-PIPELINED-NEXT: s_add_i32 s10, s0, 2
+; CHECK-PIPELINED-NEXT: s_add_i32 s9, s6, 1
+; CHECK-PIPELINED-NEXT: s_add_i32 s10, s6, 2
; CHECK-PIPELINED-NEXT: v_mov_b32_e32 v1, 0
; CHECK-PIPELINED-NEXT: v_mov_b32_e32 v0, 0
; CHECK-PIPELINED-NEXT: s_mov_b32 s8, 1
; CHECK-PIPELINED-NEXT: v_pk_add_f32 v[2:3], v[2:3], 1.0 op_sel_hi:[1,0]
-; CHECK-PIPELINED-NEXT: s_cmp_lg_u32 s0, 0
+; CHECK-PIPELINED-NEXT: s_cmp_lg_u32 s6, 0
; CHECK-PIPELINED-NEXT: s_movk_i32 s6, 0x100
; CHECK-PIPELINED-NEXT: s_cbranch_scc0 .LBB0_4
; CHECK-PIPELINED-NEXT: ; %bb.1: ; %bb1
diff --git a/llvm/test/CodeGen/AMDGPU/uint_to_fp.f64.ll b/llvm/test/CodeGen/AMDGPU/uint_to_fp.f64.ll
index bfb499108b158..94c4f86c780f8 100644
--- a/llvm/test/CodeGen/AMDGPU/uint_to_fp.f64.ll
+++ b/llvm/test/CodeGen/AMDGPU/uint_to_fp.f64.ll
@@ -263,24 +263,24 @@ define amdgpu_kernel void @s_uint_to_fp_v4i64_to_v4f64(ptr addrspace(1) %out, <4
; GFX942-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x0
; GFX942-NEXT: v_mov_b32_e32 v10, 0
; GFX942-NEXT: s_waitcnt lgkmcnt(0)
-; GFX942-NEXT: v_cvt_f64_u32_e32 v[0:1], s11
-; GFX942-NEXT: v_cvt_f64_u32_e32 v[2:3], s10
-; GFX942-NEXT: v_cvt_f64_u32_e32 v[4:5], s9
+; GFX942-NEXT: v_cvt_f64_u32_e32 v[0:1], s15
+; GFX942-NEXT: v_cvt_f64_u32_e32 v[2:3], s14
+; GFX942-NEXT: v_cvt_f64_u32_e32 v[4:5], s13
; GFX942-NEXT: v_ldexp_f64 v[0:1], v[0:1], 32
; GFX942-NEXT: v_add_f64 v[2:3], v[0:1], v[2:3]
; GFX942-NEXT: v_ldexp_f64 v[0:1], v[4:5], 32
-; GFX942-NEXT: v_cvt_f64_u32_e32 v[4:5], s8
+; GFX942-NEXT: v_cvt_f64_u32_e32 v[4:5], s12
; GFX942-NEXT: v_add_f64 v[0:1], v[0:1], v[4:5]
-; GFX942-NEXT: v_cvt_f64_u32_e32 v[4:5], s15
+; GFX942-NEXT: v_cvt_f64_u32_e32 v[4:5], s11
; GFX942-NEXT: v_ldexp_f64 v[4:5], v[4:5], 32
-; GFX942-NEXT: v_cvt_f64_u32_e32 v[6:7], s14
+; GFX942-NEXT: v_cvt_f64_u32_e32 v[6:7], s10
; GFX942-NEXT: v_add_f64 v[6:7], v[4:5], v[6:7]
-; GFX942-NEXT: v_cvt_f64_u32_e32 v[4:5], s13
+; GFX942-NEXT: v_cvt_f64_u32_e32 v[4:5], s9
; GFX942-NEXT: v_ldexp_f64 v[4:5], v[4:5], 32
-; GFX942-NEXT: v_cvt_f64_u32_e32 v[8:9], s12
+; GFX942-NEXT: v_cvt_f64_u32_e32 v[8:9], s8
; GFX942-NEXT: v_add_f64 v[4:5], v[4:5], v[8:9]
-; GFX942-NEXT: global_store_dwordx4 v10, v[4:7], s[0:1] offset:16
-; GFX942-NEXT: global_store_dwordx4 v10, v[0:3], s[0:1]
+; GFX942-NEXT: global_store_dwordx4 v10, v[0:3], s[0:1] offset:16
+; GFX942-NEXT: global_store_dwordx4 v10, v[4:7], s[0:1]
; GFX942-NEXT: s_endpgm
%cast = uitofp <4 x i64> %in to <4 x double>
store <4 x double> %cast, ptr addrspace(1) %out, align 16
@@ -412,12 +412,12 @@ define amdgpu_kernel void @s_uint_to_fp_v4i32_to_v4f64(ptr addrspace(1) %out, <4
; GFX942-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x0
; GFX942-NEXT: v_mov_b32_e32 v8, 0
; GFX942-NEXT: s_waitcnt lgkmcnt(0)
-; GFX942-NEXT: v_cvt_f64_u32_e32 v[6:7], s3
-; GFX942-NEXT: v_cvt_f64_u32_e32 v[4:5], s2
-; GFX942-NEXT: v_cvt_f64_u32_e32 v[2:3], s1
-; GFX942-NEXT: v_cvt_f64_u32_e32 v[0:1], s0
-; GFX942-NEXT: global_store_dwordx4 v8, v[4:7], s[6:7] offset:16
-; GFX942-NEXT: global_store_dwordx4 v8, v[0:3], s[6:7]
+; GFX942-NEXT: v_cvt_f64_u32_e32 v[2:3], s3
+; GFX942-NEXT: v_cvt_f64_u32_e32 v[0:1], s2
+; GFX942-NEXT: v_cvt_f64_u32_e32 v[6:7], s1
+; GFX942-NEXT: v_cvt_f64_u32_e32 v[4:5], s0
+; GFX942-NEXT: global_store_dwordx4 v8, v[0:3], s[6:7] offset:16
+; GFX942-NEXT: global_store_dwordx4 v8, v[4:7], s[6:7]
; GFX942-NEXT: s_endpgm
%cast = uitofp <4 x i32> %in to <4 x double>
store <4 x double> %cast, ptr addrspace(1) %out, align 16
diff --git a/llvm/test/CodeGen/AMDGPU/vni8-across-blocks.ll b/llvm/test/CodeGen/AMDGPU/vni8-across-blocks.ll
index 643dffbf7c168..e87452ac88aaa 100644
--- a/llvm/test/CodeGen/AMDGPU/vni8-across-blocks.ll
+++ b/llvm/test/CodeGen/AMDGPU/vni8-across-blocks.ll
@@ -458,13 +458,11 @@ define amdgpu_kernel void @v8i8_phi_zeroinit(ptr addrspace(1) %src1, ptr addrspa
; GFX942-NEXT: s_cbranch_execz .LBB9_2
; GFX942-NEXT: ; %bb.1: ; %bb.1
; GFX942-NEXT: global_load_dwordx2 v[2:3], v1, s[10:11]
-; GFX942-NEXT: s_mov_b32 s4, 0
; GFX942-NEXT: v_cmp_gt_u32_e32 vcc, 7, v0
-; GFX942-NEXT: s_mov_b32 s5, s4
-; GFX942-NEXT: s_waitcnt vmcnt(1)
-; GFX942-NEXT: v_mov_b64_e32 v[4:5], s[4:5]
; GFX942-NEXT: s_andn2_b64 s[0:1], s[0:1], exec
; GFX942-NEXT: s_and_b64 s[4:5], vcc, exec
+; GFX942-NEXT: s_waitcnt vmcnt(1)
+; GFX942-NEXT: v_mov_b64_e32 v[4:5], 0
; GFX942-NEXT: s_or_b64 s[0:1], s[0:1], s[4:5]
; GFX942-NEXT: .LBB9_2: ; %Flow
; GFX942-NEXT: s_or_b64 exec, exec, s[2:3]
More information about the llvm-commits
mailing list