[llvm] r365715 - [AMDGPU] gfx908 dot instruction support

Stanislav Mekhanoshin via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 10 17:00:28 PDT 2019


Author: rampitec
Date: Wed Jul 10 17:00:27 2019
New Revision: 365715

URL: http://llvm.org/viewvc/llvm-project?rev=365715&view=rev
Log:
[AMDGPU] gfx908 dot instruction support

Differential Revision: https://reviews.llvm.org/D64431

Added:
    llvm/trunk/test/MC/AMDGPU/xdl-insts-err.s
Modified:
    llvm/trunk/lib/Target/AMDGPU/VOP2Instructions.td
    llvm/trunk/test/CodeGen/AMDGPU/llvm.amdgcn.sdot2.ll
    llvm/trunk/test/CodeGen/AMDGPU/llvm.amdgcn.sdot8.ll
    llvm/trunk/test/MC/AMDGPU/dl-insts-err.s
    llvm/trunk/test/MC/AMDGPU/xdl-insts-gfx908.s
    llvm/trunk/test/MC/Disassembler/AMDGPU/xdl-insts-gfx908.txt

Modified: llvm/trunk/lib/Target/AMDGPU/VOP2Instructions.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AMDGPU/VOP2Instructions.td?rev=365715&r1=365714&r2=365715&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AMDGPU/VOP2Instructions.td (original)
+++ llvm/trunk/lib/Target/AMDGPU/VOP2Instructions.td Wed Jul 10 17:00:27 2019
@@ -658,6 +658,11 @@ let Constraints = "$vdst = $src2",
     defm V_DOT2C_F32_F16 : VOP2Inst_e32<"v_dot2c_f32_f16", VOP_DOT_ACC_F32_V2F16>;
   let SubtargetPredicate = HasDot6Insts in
     defm V_DOT4C_I32_I8  : VOP2Inst_e32<"v_dot4c_i32_i8",  VOP_DOT_ACC_I32_I32>;
+
+  let SubtargetPredicate = HasDot4Insts in
+    defm V_DOT2C_I32_I16 : VOP2Inst_e32<"v_dot2c_i32_i16", VOP_DOT_ACC_I32_I32>;
+  let SubtargetPredicate = HasDot3Insts in
+    defm V_DOT8C_I32_I4  : VOP2Inst_e32<"v_dot8c_i32_i4",  VOP_DOT_ACC_I32_I32>;
 }
 
 let AddedComplexity = 30 in {
@@ -673,6 +678,18 @@ let AddedComplexity = 30 in {
   > {
     let SubtargetPredicate = HasDot6Insts;
   }
+  def : GCNPat<
+    (i32 (int_amdgcn_sdot2 v2i16:$src0, v2i16:$src1, i32:$src2, (i1 DSTCLAMP.NONE))),
+    (i32 (V_DOT2C_I32_I16_e32 $src0, $src1, $src2))
+  > {
+    let SubtargetPredicate = HasDot4Insts;
+  }
+  def : GCNPat<
+    (i32 (int_amdgcn_sdot8 i32:$src0, i32:$src1, i32:$src2, (i1 DSTCLAMP.NONE))),
+    (i32 (V_DOT8C_I32_I4_e32 $src0, $src1, $src2))
+  > {
+    let SubtargetPredicate = HasDot3Insts;
+  }
 } // End AddedComplexity = 30
 
 let SubtargetPredicate = isGFX10Plus in {
@@ -1536,21 +1553,34 @@ defm V_XNOR_B32 : VOP2_Real_e32e64_vi <0
 
 } // End SubtargetPredicate = HasDLInsts
 
+multiclass VOP2_Real_DOT_ACC_gfx9<bits<6> op> : VOP2_Real_e32_vi<op> {
+  def _dpp : VOP2_DPP<op, !cast<VOP2_Pseudo>(NAME#"_e32")>;
+}
+
 multiclass VOP2_Real_DOT_ACC_gfx10<bits<6> op> :
   VOP2_Real_e32_gfx10<op>,
   VOP2_Real_dpp_gfx10<op>,
   VOP2_Real_dpp8_gfx10<op>;
 
 let SubtargetPredicate = HasDot5Insts in {
+  defm V_DOT2C_F32_F16 : VOP2_Real_DOT_ACC_gfx9<0x37>;
   // NB: Opcode conflicts with V_DOT8C_I32_I4
   // This opcode exists in gfx 10.1* only
   defm V_DOT2C_F32_F16 : VOP2_Real_DOT_ACC_gfx10<0x02>;
 }
 
 let SubtargetPredicate = HasDot6Insts in {
+  defm V_DOT4C_I32_I8  : VOP2_Real_DOT_ACC_gfx9<0x39>;
   defm V_DOT4C_I32_I8  : VOP2_Real_DOT_ACC_gfx10<0x0d>;
 }
 
+let SubtargetPredicate = HasDot4Insts in {
+  defm V_DOT2C_I32_I16 : VOP2_Real_DOT_ACC_gfx9<0x38>;
+}
+let SubtargetPredicate = HasDot3Insts in {
+  defm V_DOT8C_I32_I4  : VOP2_Real_DOT_ACC_gfx9<0x3a>;
+}
+
 let SubtargetPredicate = HasPkFmacF16Inst in {
 defm V_PK_FMAC_F16 : VOP2_Real_e32_vi<0x3c>;
 } // End SubtargetPredicate = HasPkFmacF16Inst

Modified: llvm/trunk/test/CodeGen/AMDGPU/llvm.amdgcn.sdot2.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AMDGPU/llvm.amdgcn.sdot2.ll?rev=365715&r1=365714&r2=365715&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/AMDGPU/llvm.amdgcn.sdot2.ll (original)
+++ llvm/trunk/test/CodeGen/AMDGPU/llvm.amdgcn.sdot2.ll Wed Jul 10 17:00:27 2019
@@ -1,4 +1,5 @@
 ; RUN: llc -march=amdgcn -mcpu=gfx906 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=GCN,GFX906
+; RUN: llc -march=amdgcn -mcpu=gfx908 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=GCN,GFX908
 ; RUN: llc -march=amdgcn -mcpu=gfx1011 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=GCN,GFX10
 ; RUN: llc -march=amdgcn -mcpu=gfx1012 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=GCN,GFX10
 
@@ -6,6 +7,7 @@ declare i32 @llvm.amdgcn.sdot2(<2 x i16>
 
 ; GCN-LABEL: {{^}}test_llvm_amdgcn_sdot2_clamp
 ; GFX906: v_dot2_i32_i16 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} clamp{{$}}
+; GFX908: v_dot2_i32_i16 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} clamp{{$}}
 ; GFX10:  v_dot2_i32_i16 v{{[0-9]+}}, s{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}} clamp{{$}}
 define amdgpu_kernel void @test_llvm_amdgcn_sdot2_clamp(
     i32 addrspace(1)* %r,
@@ -23,6 +25,7 @@ entry:
 
 ; GCN-LABEL: {{^}}test_llvm_amdgcn_sdot2_no_clamp
 ; GFX906: v_dot2_i32_i16 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}{{$}}
+; GFX908: v_dot2c_i32_i16_e32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}{{$}}
 ; GFX10:  v_dot2_i32_i16 v{{[0-9]+}}, s{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}{{$}}
 define amdgpu_kernel void @test_llvm_amdgcn_sdot2_no_clamp(
     i32 addrspace(1)* %r,

Modified: llvm/trunk/test/CodeGen/AMDGPU/llvm.amdgcn.sdot8.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AMDGPU/llvm.amdgcn.sdot8.ll?rev=365715&r1=365714&r2=365715&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/AMDGPU/llvm.amdgcn.sdot8.ll (original)
+++ llvm/trunk/test/CodeGen/AMDGPU/llvm.amdgcn.sdot8.ll Wed Jul 10 17:00:27 2019
@@ -1,4 +1,5 @@
 ; RUN: llc -march=amdgcn -mcpu=gfx906 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=GCN,GFX906
+; RUN: llc -march=amdgcn -mcpu=gfx908 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=GCN,GFX908
 ; RUN: llc -march=amdgcn -mcpu=gfx1011 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=GCN,GFX10,GFX1011
 ; RUN: llc -march=amdgcn -mcpu=gfx1012 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=GCN,GFX10,GFX1011
 
@@ -6,6 +7,7 @@ declare i32 @llvm.amdgcn.sdot8(i32 %a, i
 
 ; GCN-LABEL: {{^}}test_llvm_amdgcn_sdot8_clamp
 ; GFX906: v_dot8_i32_i4 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} clamp{{$}}
+; GFX908: v_dot8_i32_i4 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} clamp{{$}}
 ; GFX10:  v_dot8_i32_i4 v{{[0-9]+}}, s{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}} clamp{{$}}
 define amdgpu_kernel void @test_llvm_amdgcn_sdot8_clamp(
     i32 addrspace(1)* %r,
@@ -25,6 +27,7 @@ entry:
 
 ; GCN-LABEL: {{^}}test_llvm_amdgcn_sdot8_no_clamp
 ; GFX906: v_dot8_i32_i4 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}{{$}}
+; GFX908: v_dot8c_i32_i4_e32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}{{$}}
 ; GFX1011:  v_dot8_i32_i4 v{{[0-9]+}}, s{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}{{$}}
 define amdgpu_kernel void @test_llvm_amdgcn_sdot8_no_clamp(
     i32 addrspace(1)* %r,

Modified: llvm/trunk/test/MC/AMDGPU/dl-insts-err.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AMDGPU/dl-insts-err.s?rev=365715&r1=365714&r2=365715&view=diff
==============================================================================
--- llvm/trunk/test/MC/AMDGPU/dl-insts-err.s (original)
+++ llvm/trunk/test/MC/AMDGPU/dl-insts-err.s Wed Jul 10 17:00:27 2019
@@ -1,6 +1,7 @@
 // RUN: not llvm-mc -arch=amdgcn -mcpu=gfx800 -show-encoding %s 2>&1 | FileCheck %s
 // RUN: not llvm-mc -arch=amdgcn -mcpu=gfx900 -show-encoding %s 2>&1 | FileCheck %s
-// RUN: not llvm-mc -arch=amdgcn -mcpu=gfx906 -show-encoding %s 2>&1 | FileCheck %s --check-prefix=GFX906
+// RUN: not llvm-mc -arch=amdgcn -mcpu=gfx906 -show-encoding %s 2>&1 | FileCheck %s --check-prefix=GFX906-GFX908
+// RUN: not llvm-mc -arch=amdgcn -mcpu=gfx908 -show-encoding %s 2>&1 | FileCheck %s --check-prefix=GFX906-GFX908
 
 //
 // Test unsupported GPUs.
@@ -29,233 +30,233 @@ v_dot8_u32_u4 v0, v1, v2, v3
 // Test invalid operands.
 //
 
-// GFX906: error: invalid operand for instruction
+// GFX906-GFX908: error: invalid operand for instruction
 v_dot2_f32_f16 v0, v1, v2, v3 op_sel
-// GFX906: error: expected a left square bracket
+// GFX906-GFX908: error: expected a left square bracket
 v_dot2_f32_f16 v0, v1, v2, v3 op_sel:
-// GFX906: error: unknown token in expression
+// GFX906-GFX908: error: unknown token in expression
 v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[
-// GFX906: error: expected a left square bracket
+// GFX906-GFX908: error: expected a left square bracket
 v_dot2_f32_f16 v0, v1, v2, v3 op_sel:]
-// GFX906: error: unknown token in expression
+// GFX906-GFX908: error: unknown token in expression
 v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[]
-// GFX906: error: unknown token in expression
+// GFX906-GFX908: error: unknown token in expression
 v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[,]
-// GFX906: error: unknown token in expression
+// GFX906-GFX908: error: unknown token in expression
 v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[,0]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[0,2]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[2,0]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[2,2]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[0,-1]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[-1,0]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[-1,-1]
-// GFX906: error: expected a closing square bracket
+// GFX906-GFX908: error: expected a closing square bracket
 v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[0,0,0,0,0]
-// GFX906: error: invalid operand for instruction
+// GFX906-GFX908: error: invalid operand for instruction
 v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi
-// GFX906: error: expected a left square bracket
+// GFX906-GFX908: error: expected a left square bracket
 v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:
-// GFX906: error: unknown token in expression
+// GFX906-GFX908: error: unknown token in expression
 v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[
-// GFX906: error: expected a left square bracket
+// GFX906-GFX908: error: expected a left square bracket
 v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:]
-// GFX906: error: unknown token in expression
+// GFX906-GFX908: error: unknown token in expression
 v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[]
-// GFX906: error: unknown token in expression
+// GFX906-GFX908: error: unknown token in expression
 v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[,]
-// GFX906: error: unknown token in expression
+// GFX906-GFX908: error: unknown token in expression
 v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[,0]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[0,2]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[2,0]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[2,2]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[0,-1]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[-1,0]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[-1,-1]
-// GFX906: error: expected a closing square bracket
+// GFX906-GFX908: error: expected a closing square bracket
 v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[0,0,0,0,0]
-// GFX906: error: invalid operand for instruction
+// GFX906-GFX908: error: invalid operand for instruction
 v_dot2_f32_f16 v0, v1, v2, v3 neg_lo
-// GFX906: error: expected a left square bracket
+// GFX906-GFX908: error: expected a left square bracket
 v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:
-// GFX906: error: unknown token in expression
+// GFX906-GFX908: error: unknown token in expression
 v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[
-// GFX906: error: expected a left square bracket
+// GFX906-GFX908: error: expected a left square bracket
 v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:]
-// GFX906: error: unknown token in expression
+// GFX906-GFX908: error: unknown token in expression
 v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[]
-// GFX906: error: unknown token in expression
+// GFX906-GFX908: error: unknown token in expression
 v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[,]
-// GFX906: error: unknown token in expression
+// GFX906-GFX908: error: unknown token in expression
 v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[,0]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[0,2]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[2,0]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[2,2]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[0,-1]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[-1,0]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[-1,-1]
-// GFX906: error: expected a closing square bracket
+// GFX906-GFX908: error: expected a closing square bracket
 v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[0,0,0,0,0]
-// GFX906: error: invalid operand for instruction
+// GFX906-GFX908: error: invalid operand for instruction
 v_dot2_f32_f16 v0, v1, v2, v3 neg_hi
-// GFX906: error: expected a left square bracket
+// GFX906-GFX908: error: expected a left square bracket
 v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:
-// GFX906: error: unknown token in expression
+// GFX906-GFX908: error: unknown token in expression
 v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[
-// GFX906: error: expected a left square bracket
+// GFX906-GFX908: error: expected a left square bracket
 v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:]
-// GFX906: error: unknown token in expression
+// GFX906-GFX908: error: unknown token in expression
 v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[]
-// GFX906: error: unknown token in expression
+// GFX906-GFX908: error: unknown token in expression
 v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[,]
-// GFX906: error: unknown token in expression
+// GFX906-GFX908: error: unknown token in expression
 v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[,0]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[0,2]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[2,0]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[2,2]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[0,-1]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[-1,0]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[-1,-1]
-// GFX906: error: expected a closing square bracket
+// GFX906-GFX908: error: expected a closing square bracket
 v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[0,0,0,0,0]
-// GFX906: error: invalid operand for instruction
+// GFX906-GFX908: error: invalid operand for instruction
 v_dot2_i32_i16 v0, v1, v2, v3 op_sel
-// GFX906: error: expected a left square bracket
+// GFX906-GFX908: error: expected a left square bracket
 v_dot2_i32_i16 v0, v1, v2, v3 op_sel:
-// GFX906: error: unknown token in expression
+// GFX906-GFX908: error: unknown token in expression
 v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[
-// GFX906: error: expected a left square bracket
+// GFX906-GFX908: error: expected a left square bracket
 v_dot2_i32_i16 v0, v1, v2, v3 op_sel:]
-// GFX906: error: unknown token in expression
+// GFX906-GFX908: error: unknown token in expression
 v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[]
-// GFX906: error: unknown token in expression
+// GFX906-GFX908: error: unknown token in expression
 v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[,]
-// GFX906: error: unknown token in expression
+// GFX906-GFX908: error: unknown token in expression
 v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[,0]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[0,2]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[2,0]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[2,2]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[0,-1]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[-1,0]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[-1,-1]
-// GFX906: error: expected a closing square bracket
+// GFX906-GFX908: error: expected a closing square bracket
 v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[0,0,0,0,0]
-// GFX906: error: invalid operand for instruction
+// GFX906-GFX908: error: invalid operand for instruction
 v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi
-// GFX906: error: expected a left square bracket
+// GFX906-GFX908: error: expected a left square bracket
 v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:
-// GFX906: error: unknown token in expression
+// GFX906-GFX908: error: unknown token in expression
 v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[
-// GFX906: error: expected a left square bracket
+// GFX906-GFX908: error: expected a left square bracket
 v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:]
-// GFX906: error: unknown token in expression
+// GFX906-GFX908: error: unknown token in expression
 v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[]
-// GFX906: error: unknown token in expression
+// GFX906-GFX908: error: unknown token in expression
 v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[,]
-// GFX906: error: unknown token in expression
+// GFX906-GFX908: error: unknown token in expression
 v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[,0]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[0,2]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[2,0]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[2,2]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[0,-1]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[-1,0]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[-1,-1]
-// GFX906: error: expected a closing square bracket
+// GFX906-GFX908: error: expected a closing square bracket
 v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[0,0,0,0,0]
 // FIXME-GFX906: error: invalid operand for instruction
 v_dot2_i32_i16 v0, v1, v2, v3 neg_lo:[0,0]
 // FIXME-GFX906: error: invalid operand for instruction
 v_dot2_i32_i16 v0, v1, v2, v3 neg_hi:[0,0]
-// GFX906: error: invalid operand for instruction
+// GFX906-GFX908: error: invalid operand for instruction
 v_dot2_u32_u16 v0, v1, v2, v3 op_sel
-// GFX906: error: expected a left square bracket
+// GFX906-GFX908: error: expected a left square bracket
 v_dot2_u32_u16 v0, v1, v2, v3 op_sel:
-// GFX906: error: unknown token in expression
+// GFX906-GFX908: error: unknown token in expression
 v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[
-// GFX906: error: expected a left square bracket
+// GFX906-GFX908: error: expected a left square bracket
 v_dot2_u32_u16 v0, v1, v2, v3 op_sel:]
-// GFX906: error: unknown token in expression
+// GFX906-GFX908: error: unknown token in expression
 v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[]
-// GFX906: error: unknown token in expression
+// GFX906-GFX908: error: unknown token in expression
 v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[,]
-// GFX906: error: unknown token in expression
+// GFX906-GFX908: error: unknown token in expression
 v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[,0]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[0,2]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[2,0]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[2,2]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[0,-1]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[-1,0]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[-1,-1]
-// GFX906: error: expected a closing square bracket
+// GFX906-GFX908: error: expected a closing square bracket
 v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[0,0,0,0,0]
-// GFX906: error: invalid operand for instruction
+// GFX906-GFX908: error: invalid operand for instruction
 v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi
-// GFX906: error: expected a left square bracket
+// GFX906-GFX908: error: expected a left square bracket
 v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:
-// GFX906: error: unknown token in expression
+// GFX906-GFX908: error: unknown token in expression
 v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[
-// GFX906: error: expected a left square bracket
+// GFX906-GFX908: error: expected a left square bracket
 v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:]
-// GFX906: error: unknown token in expression
+// GFX906-GFX908: error: unknown token in expression
 v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[]
-// GFX906: error: unknown token in expression
+// GFX906-GFX908: error: unknown token in expression
 v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[,]
-// GFX906: error: unknown token in expression
+// GFX906-GFX908: error: unknown token in expression
 v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[,0]
-// GFX906: error: invalid op_sel_hi value
+// GFX906-GFX908: error: invalid op_sel_hi value
 v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[0,2]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[2,0]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[2,2]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[0,-1]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[-1,0]
-// GFX906: error: failed parsing operand
+// GFX906-GFX908: error: failed parsing operand
 v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[-1,-1]
-// GFX906: error: expected a closing square bracket
+// GFX906-GFX908: error: expected a closing square bracket
 v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[0,0,0,0,0]
 // FIXME-GFX906: error: invalid operand for instruction
 v_dot2_u32_u16 v0, v1, v2, v3 neg_lo:[0,0]
@@ -266,122 +267,122 @@ v_dot2_u32_u16 v0, v1, v2, v3 neg_hi:[0,
 // Test regular modifiers.
 //
 
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_f32_f16 v0, |v1|, v2, v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_f32_f16 v0, v1, |v2|, v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_f32_f16 v0, v1, v2, |v3|
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_f32_f16 v0, |v1|, |v2|, v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_f32_f16 v0, |v1|, v2, |v3|
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_f32_f16 v0, |v1|, |v2|, |v3|
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_f32_f16 v0, abs(v1), v2, v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_f32_f16 v0, v1, abs(v2), v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_f32_f16 v0, v1, v2, abs(v3)
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_f32_f16 v0, abs(v1), abs(v2), v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_f32_f16 v0, abs(v1), v2, abs(v3)
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_f32_f16 v0, abs(v1), abs(v2), abs(v3)
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_f32_f16 v0, -v1, v2, v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_f32_f16 v0, v1, -v2, v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_f32_f16 v0, v1, v2, -v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_f32_f16 v0, -v1, -v2, v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_f32_f16 v0, -v1, v2, -v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_f32_f16 v0, -v1, -v2, -v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_i32_i16 v0, |v1|, v2, v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_i32_i16 v0, v1, |v2|, v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_i32_i16 v0, v1, v2, |v3|
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_i32_i16 v0, |v1|, |v2|, v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_i32_i16 v0, |v1|, v2, |v3|
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_i32_i16 v0, |v1|, |v2|, |v3|
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_i32_i16 v0, abs(v1), v2, v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_i32_i16 v0, v1, abs(v2), v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_i32_i16 v0, v1, v2, abs(v3)
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_i32_i16 v0, abs(v1), abs(v2), v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_i32_i16 v0, abs(v1), v2, abs(v3)
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_i32_i16 v0, abs(v1), abs(v2), abs(v3)
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_i32_i16 v0, -v1, v2, v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_i32_i16 v0, v1, -v2, v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_i32_i16 v0, v1, v2, -v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_i32_i16 v0, -v1, -v2, v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_i32_i16 v0, -v1, v2, -v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_i32_i16 v0, -v1, -v2, -v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_u32_u16 v0, |v1|, v2, v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_u32_u16 v0, v1, |v2|, v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_u32_u16 v0, v1, v2, |v3|
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_u32_u16 v0, |v1|, |v2|, v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_u32_u16 v0, |v1|, v2, |v3|
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_u32_u16 v0, |v1|, |v2|, |v3|
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_u32_u16 v0, abs(v1), v2, v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_u32_u16 v0, v1, abs(v2), v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_u32_u16 v0, v1, v2, abs(v3)
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_u32_u16 v0, abs(v1), abs(v2), v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_u32_u16 v0, abs(v1), v2, abs(v3)
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_u32_u16 v0, abs(v1), abs(v2), abs(v3)
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_u32_u16 v0, -v1, v2, v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_u32_u16 v0, v1, -v2, v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_u32_u16 v0, v1, v2, -v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_u32_u16 v0, -v1, -v2, v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_u32_u16 v0, -v1, v2, -v3
-// GFX906: error: not a valid operand
+// GFX906-GFX908: error: not a valid operand
 v_dot2_u32_u16 v0, -v1, -v2, -v3
 
 //
 // Test constant bus restrictions.
 //
 
-// GFX906: error: invalid operand (violates constant bus restrictions)
+// GFX906-GFX908: error: invalid operand (violates constant bus restrictions)
 v_dot2_f32_f16 v255, s1, s2, s3
-// GFX906: error: invalid operand (violates constant bus restrictions)
+// GFX906-GFX908: error: invalid operand (violates constant bus restrictions)
 v_dot2_i32_i16 v255, s1, s2, s3
-// GFX906: error: invalid operand (violates constant bus restrictions)
+// GFX906-GFX908: error: invalid operand (violates constant bus restrictions)
 v_dot2_u32_u16 v255, s1, s2, s3

Added: llvm/trunk/test/MC/AMDGPU/xdl-insts-err.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AMDGPU/xdl-insts-err.s?rev=365715&view=auto
==============================================================================
--- llvm/trunk/test/MC/AMDGPU/xdl-insts-err.s (added)
+++ llvm/trunk/test/MC/AMDGPU/xdl-insts-err.s Wed Jul 10 17:00:27 2019
@@ -0,0 +1,41 @@
+// RUN: not llvm-mc -arch=amdgcn -mcpu=gfx906 -show-encoding %s 2>&1 | FileCheck --check-prefixes=GCN-ERR,GFX906-ERR %s
+// RUN: not llvm-mc -arch=amdgcn -mcpu=gfx908 -show-encoding %s 2>&1 | FileCheck --check-prefixes=GCN-ERR,GFX908-ERR %s
+
+// GFX906-ERR: error: instruction not supported on this GPU
+v_dot2c_f32_f16 v0, v1, v2
+
+// GCN-ERR: error: invalid instruction
+v_dot2c_f32_f16_e64 v0, v1, v2
+
+// GCN-ERR: error: invalid instruction
+v_dot2c_f32_f16_sdwa v0, v1, v2
+
+// GFX906-ERR: error: instruction not supported on this GPU
+v_dot2c_i32_i16 v0, v1, v2
+
+// GCN-ERR: error: invalid instruction
+v_dot2c_i32_i16_e64 v0, v1, v2
+
+// GCN-ERR: error: invalid instruction
+v_dot2c_i32_i16_sdwa v0, v1, v2
+
+// GFX906-ERR: error: instruction not supported on this GPU
+v_dot4c_i32_i8 v0, v1, v2
+
+// GCN-ERR: error: invalid instruction
+v_dot4c_i32_i8_e64 v0, v1, v2
+
+// GCN-ERR: error: invalid instruction
+v_dot4c_i32_i8_sdwa v0, v1, v2
+
+// GFX906-ERR: error: instruction not supported on this GPU
+v_dot8c_i32_i4 v0, v1, v2
+
+// GCN-ERR: error: invalid instruction
+v_dot8c_i32_i4_e64 v0, v1, v2
+
+// GCN-ERR: error: invalid instruction
+v_dot8c_i32_i4_sdwa v0, v1, v2
+
+// GFX906-ERR: error: instruction not supported on this GPU
+v_pk_fmac_f16 v0, v1, v2

Modified: llvm/trunk/test/MC/AMDGPU/xdl-insts-gfx908.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AMDGPU/xdl-insts-gfx908.s?rev=365715&r1=365714&r2=365715&view=diff
==============================================================================
--- llvm/trunk/test/MC/AMDGPU/xdl-insts-gfx908.s (original)
+++ llvm/trunk/test/MC/AMDGPU/xdl-insts-gfx908.s Wed Jul 10 17:00:27 2019
@@ -1,5 +1,377 @@
 // RUN: llvm-mc -arch=amdgcn -mcpu=gfx908 -show-encoding %s | FileCheck %s
 
+// CHECK: encoding: [0x01,0x05,0x0a,0x6e]
+v_dot2c_f32_f16 v5, v1, v2
+
+// CHECK: encoding: [0x01,0x05,0xfe,0x6f]
+v_dot2c_f32_f16 v255, v1, v2
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x00]
+v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0xfe,0x6f,0x01,0xe4,0x00,0x00]
+v_dot2c_f32_f16_dpp v255, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0xff,0xe4,0x00,0x00]
+v_dot2c_f32_f16_dpp v5, v255, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0xfe,0x0b,0x6e,0x01,0xe4,0x00,0x00]
+v_dot2c_f32_f16_dpp v5, v1, v255 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x1b,0x00,0x00]
+v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[3,2,1,0] row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x40,0x01,0x00]
+v_dot2c_f32_f16_dpp v5, v1, v2 row_mirror row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x41,0x01,0x00]
+v_dot2c_f32_f16_dpp v5, v1, v2 row_half_mirror row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x42,0x01,0x00]
+v_dot2c_f32_f16_dpp v5, v1, v2 row_bcast:15 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x43,0x01,0x00]
+v_dot2c_f32_f16_dpp v5, v1, v2 row_bcast:31 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x30,0x01,0x00]
+v_dot2c_f32_f16_dpp v5, v1, v2 wave_shl:1 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x34,0x01,0x00]
+v_dot2c_f32_f16_dpp v5, v1, v2 wave_rol:1 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x38,0x01,0x00]
+v_dot2c_f32_f16_dpp v5, v1, v2 wave_shr:1 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x3c,0x01,0x00]
+v_dot2c_f32_f16_dpp v5, v1, v2 wave_ror:1 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x01,0x01,0x00]
+v_dot2c_f32_f16_dpp v5, v1, v2 row_shl:1 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x0f,0x01,0x00]
+v_dot2c_f32_f16_dpp v5, v1, v2 row_shl:15 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x11,0x01,0x00]
+v_dot2c_f32_f16_dpp v5, v1, v2 row_shr:1 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x1f,0x01,0x00]
+v_dot2c_f32_f16_dpp v5, v1, v2 row_shr:15 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x21,0x01,0x00]
+v_dot2c_f32_f16_dpp v5, v1, v2 row_ror:1 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x2f,0x01,0x00]
+v_dot2c_f32_f16_dpp v5, v1, v2 row_ror:15 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x10]
+v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x1 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x30]
+v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x3 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0xf0]
+v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0xf0]
+v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x01]
+v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x1
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x03]
+v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x3
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x0f]
+v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0xf
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x0f]
+v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x08,0x00]
+v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 bound_ctrl:0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x10,0x00]
+v_dot2c_f32_f16_dpp v5, -v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x20,0x00]
+v_dot2c_f32_f16_dpp v5, |v1|, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x40,0x00]
+v_dot2c_f32_f16_dpp v5, v1, -v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x80,0x00]
+v_dot2c_f32_f16_dpp v5, v1, |v2| quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0x01,0x05,0x0a,0x70]
+v_dot2c_i32_i16 v5, v1, v2
+
+// CHECK: encoding: [0x01,0x05,0xfe,0x71]
+v_dot2c_i32_i16 v255, v1, v2
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x00]
+v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0xfe,0x71,0x01,0xe4,0x00,0x00]
+v_dot2c_i32_i16_dpp v255, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0xff,0xe4,0x00,0x00]
+v_dot2c_i32_i16_dpp v5, v255, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0xfe,0x0b,0x70,0x01,0xe4,0x00,0x00]
+v_dot2c_i32_i16_dpp v5, v1, v255 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0x1b,0x00,0x00]
+v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[3,2,1,0] row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0x40,0x01,0x00]
+v_dot2c_i32_i16_dpp v5, v1, v2 row_mirror row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0x41,0x01,0x00]
+v_dot2c_i32_i16_dpp v5, v1, v2 row_half_mirror row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0x42,0x01,0x00]
+v_dot2c_i32_i16_dpp v5, v1, v2 row_bcast:15 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0x43,0x01,0x00]
+v_dot2c_i32_i16_dpp v5, v1, v2 row_bcast:31 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0x30,0x01,0x00]
+v_dot2c_i32_i16_dpp v5, v1, v2 wave_shl:1 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0x34,0x01,0x00]
+v_dot2c_i32_i16_dpp v5, v1, v2 wave_rol:1 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0x38,0x01,0x00]
+v_dot2c_i32_i16_dpp v5, v1, v2 wave_shr:1 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0x3c,0x01,0x00]
+v_dot2c_i32_i16_dpp v5, v1, v2 wave_ror:1 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0x01,0x01,0x00]
+v_dot2c_i32_i16_dpp v5, v1, v2 row_shl:1 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0x0f,0x01,0x00]
+v_dot2c_i32_i16_dpp v5, v1, v2 row_shl:15 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0x11,0x01,0x00]
+v_dot2c_i32_i16_dpp v5, v1, v2 row_shr:1 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0x1f,0x01,0x00]
+v_dot2c_i32_i16_dpp v5, v1, v2 row_shr:15 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0x21,0x01,0x00]
+v_dot2c_i32_i16_dpp v5, v1, v2 row_ror:1 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0x2f,0x01,0x00]
+v_dot2c_i32_i16_dpp v5, v1, v2 row_ror:15 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x10]
+v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x1 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x30]
+v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x3 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0xf0]
+v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0xf0]
+v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x01]
+v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x1
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x03]
+v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x3
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x0f]
+v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0xf
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x0f]
+v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x08,0x00]
+v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 bound_ctrl:0
+
+// CHECK: encoding: [0x01,0x05,0x0a,0x72]
+v_dot4c_i32_i8 v5, v1, v2
+
+// CHECK: encoding: [0x01,0x05,0xfe,0x73]
+v_dot4c_i32_i8 v255, v1, v2
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x00]
+v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0xfe,0x73,0x01,0xe4,0x00,0x00]
+v_dot4c_i32_i8_dpp v255, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0xff,0xe4,0x00,0x00]
+v_dot4c_i32_i8_dpp v5, v255, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0xfe,0x0b,0x72,0x01,0xe4,0x00,0x00]
+v_dot4c_i32_i8_dpp v5, v1, v255 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0x1b,0x00,0x00]
+v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[3,2,1,0] row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0x40,0x01,0x00]
+v_dot4c_i32_i8_dpp v5, v1, v2 row_mirror row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0x41,0x01,0x00]
+v_dot4c_i32_i8_dpp v5, v1, v2 row_half_mirror row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0x42,0x01,0x00]
+v_dot4c_i32_i8_dpp v5, v1, v2 row_bcast:15 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0x43,0x01,0x00]
+v_dot4c_i32_i8_dpp v5, v1, v2 row_bcast:31 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0x30,0x01,0x00]
+v_dot4c_i32_i8_dpp v5, v1, v2 wave_shl:1 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0x34,0x01,0x00]
+v_dot4c_i32_i8_dpp v5, v1, v2 wave_rol:1 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0x38,0x01,0x00]
+v_dot4c_i32_i8_dpp v5, v1, v2 wave_shr:1 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0x3c,0x01,0x00]
+v_dot4c_i32_i8_dpp v5, v1, v2 wave_ror:1 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0x01,0x01,0x00]
+v_dot4c_i32_i8_dpp v5, v1, v2 row_shl:1 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0x0f,0x01,0x00]
+v_dot4c_i32_i8_dpp v5, v1, v2 row_shl:15 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0x11,0x01,0x00]
+v_dot4c_i32_i8_dpp v5, v1, v2 row_shr:1 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0x1f,0x01,0x00]
+v_dot4c_i32_i8_dpp v5, v1, v2 row_shr:15 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0x21,0x01,0x00]
+v_dot4c_i32_i8_dpp v5, v1, v2 row_ror:1 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0x2f,0x01,0x00]
+v_dot4c_i32_i8_dpp v5, v1, v2 row_ror:15 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x10]
+v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x1 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x30]
+v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x3 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0xf0]
+v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0xf0]
+v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x01]
+v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x1
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x03]
+v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x3
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x0f]
+v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0xf
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x0f]
+v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x08,0x00]
+v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 bound_ctrl:0
+
+// CHECK: encoding: [0x01,0x05,0x0a,0x74]
+v_dot8c_i32_i4 v5, v1, v2
+
+// CHECK: encoding: [0x01,0x05,0xfe,0x75]
+v_dot8c_i32_i4 v255, v1, v2
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x00]
+v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0xfe,0x75,0x01,0xe4,0x00,0x00]
+v_dot8c_i32_i4_dpp v255, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0xff,0xe4,0x00,0x00]
+v_dot8c_i32_i4_dpp v5, v255, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0xfe,0x0b,0x74,0x01,0xe4,0x00,0x00]
+v_dot8c_i32_i4_dpp v5, v1, v255 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0x1b,0x00,0x00]
+v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[3,2,1,0] row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0x40,0x01,0x00]
+v_dot8c_i32_i4_dpp v5, v1, v2 row_mirror row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0x41,0x01,0x00]
+v_dot8c_i32_i4_dpp v5, v1, v2 row_half_mirror row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0x42,0x01,0x00]
+v_dot8c_i32_i4_dpp v5, v1, v2 row_bcast:15 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0x43,0x01,0x00]
+v_dot8c_i32_i4_dpp v5, v1, v2 row_bcast:31 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0x30,0x01,0x00]
+v_dot8c_i32_i4_dpp v5, v1, v2 wave_shl:1 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0x34,0x01,0x00]
+v_dot8c_i32_i4_dpp v5, v1, v2 wave_rol:1 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0x38,0x01,0x00]
+v_dot8c_i32_i4_dpp v5, v1, v2 wave_shr:1 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0x3c,0x01,0x00]
+v_dot8c_i32_i4_dpp v5, v1, v2 wave_ror:1 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0x01,0x01,0x00]
+v_dot8c_i32_i4_dpp v5, v1, v2 row_shl:1 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0x0f,0x01,0x00]
+v_dot8c_i32_i4_dpp v5, v1, v2 row_shl:15 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0x11,0x01,0x00]
+v_dot8c_i32_i4_dpp v5, v1, v2 row_shr:1 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0x1f,0x01,0x00]
+v_dot8c_i32_i4_dpp v5, v1, v2 row_shr:15 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0x21,0x01,0x00]
+v_dot8c_i32_i4_dpp v5, v1, v2 row_ror:1 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0x2f,0x01,0x00]
+v_dot8c_i32_i4_dpp v5, v1, v2 row_ror:15 row_mask:0x0 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x10]
+v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x1 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x30]
+v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x3 bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0xf0]
+v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0xf0]
+v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] bank_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x01]
+v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x1
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x03]
+v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x3
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x0f]
+v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0xf
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x0f]
+v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0
+
+// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x08,0x00]
+v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 bound_ctrl:0
+
 // CHECK: encoding: [0x01,0x05,0x0a,0x78]
 v_pk_fmac_f16 v5, v1, v2
 

Modified: llvm/trunk/test/MC/Disassembler/AMDGPU/xdl-insts-gfx908.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Disassembler/AMDGPU/xdl-insts-gfx908.txt?rev=365715&r1=365714&r2=365715&view=diff
==============================================================================
--- llvm/trunk/test/MC/Disassembler/AMDGPU/xdl-insts-gfx908.txt (original)
+++ llvm/trunk/test/MC/Disassembler/AMDGPU/xdl-insts-gfx908.txt Wed Jul 10 17:00:27 2019
@@ -1,5 +1,353 @@
 # RUN: llvm-mc -arch=amdgcn -mcpu=gfx908 -disassemble -show-encoding < %s | FileCheck %s
 
+# CHECK: v_dot2c_f32_f16_e32 v5, v1, v2 ; encoding: [0x01,0x05,0x0a,0x6e]
+0x01,0x05,0x0a,0x6e
+
+# CHECK: v_dot2c_f32_f16_e32 v255, v1, v2 ; encoding: [0x01,0x05,0xfe,0x6f]
+0x01,0x05,0xfe,0x6f
+
+# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x00]
+0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x00
+
+# CHECK: v_dot2c_f32_f16_dpp v255, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0xfe,0x6f,0x01,0xe4,0x00,0x00]
+0xfa,0x04,0xfe,0x6f,0x01,0xe4,0x00,0x00
+
+# CHECK: v_dot2c_f32_f16_dpp v5, v255, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0xff,0xe4,0x00,0x00]
+0xfa,0x04,0x0a,0x6e,0xff,0xe4,0x00,0x00
+
+# CHECK: v_dot2c_f32_f16_dpp v5, v1, v255 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0xfe,0x0b,0x6e,0x01,0xe4,0x00,0x00]
+0xfa,0xfe,0x0b,0x6e,0x01,0xe4,0x00,0x00
+
+# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[3,2,1,0] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x1b,0x00,0x00]
+0xfa,0x04,0x0a,0x6e,0x01,0x1b,0x00,0x00
+
+# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 row_mirror row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x40,0x01,0x00]
+0xfa,0x04,0x0a,0x6e,0x01,0x40,0x01,0x00
+
+# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 row_half_mirror row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x41,0x01,0x00]
+0xfa,0x04,0x0a,0x6e,0x01,0x41,0x01,0x00
+
+# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 row_bcast:15 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x42,0x01,0x00]
+0xfa,0x04,0x0a,0x6e,0x01,0x42,0x01,0x00
+
+# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 row_bcast:31 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x43,0x01,0x00]
+0xfa,0x04,0x0a,0x6e,0x01,0x43,0x01,0x00
+
+# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 wave_shl:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x30,0x01,0x00]
+0xfa,0x04,0x0a,0x6e,0x01,0x30,0x01,0x00
+
+# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 wave_rol:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x34,0x01,0x00]
+0xfa,0x04,0x0a,0x6e,0x01,0x34,0x01,0x00
+
+# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 wave_shr:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x38,0x01,0x00]
+0xfa,0x04,0x0a,0x6e,0x01,0x38,0x01,0x00
+
+# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 wave_ror:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x3c,0x01,0x00]
+0xfa,0x04,0x0a,0x6e,0x01,0x3c,0x01,0x00
+
+# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 row_shl:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x01,0x01,0x00]
+0xfa,0x04,0x0a,0x6e,0x01,0x01,0x01,0x00
+
+# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 row_shl:15 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x0f,0x01,0x00]
+0xfa,0x04,0x0a,0x6e,0x01,0x0f,0x01,0x00
+
+# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 row_shr:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x11,0x01,0x00]
+0xfa,0x04,0x0a,0x6e,0x01,0x11,0x01,0x00
+
+# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 row_shr:15 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x1f,0x01,0x00]
+0xfa,0x04,0x0a,0x6e,0x01,0x1f,0x01,0x00
+
+# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 row_ror:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x21,0x01,0x00]
+0xfa,0x04,0x0a,0x6e,0x01,0x21,0x01,0x00
+
+# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 row_ror:15 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x2f,0x01,0x00]
+0xfa,0x04,0x0a,0x6e,0x01,0x2f,0x01,0x00
+
+# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x1 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x10]
+0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x10
+
+# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x3 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x30]
+0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x30
+
+# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0xf0]
+0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0xf0
+
+# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x01]
+0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x01
+
+# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x3 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x03]
+0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x03
+
+# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0xf ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x0f]
+0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x0f
+
+# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 bound_ctrl:0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x08,0x00]
+0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x08,0x00
+
+# CHECK: v_dot2c_f32_f16_dpp v5, -v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x10,0x00]
+0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x10,0x00
+
+# CHECK: v_dot2c_f32_f16_dpp v5, |v1|, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x20,0x00]
+0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x20,0x00
+
+# CHECK: v_dot2c_f32_f16_dpp v5, v1, -v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x40,0x00]
+0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x40,0x00
+
+# CHECK: v_dot2c_f32_f16_dpp v5, v1, |v2| quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x80,0x00]
+0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x80,0x00
+
+# CHECK: v_dot2c_i32_i16_e32 v5, v1, v2 ; encoding: [0x01,0x05,0x0a,0x70]
+0x01,0x05,0x0a,0x70
+
+# CHECK: v_dot2c_i32_i16_e32 v255, v1, v2 ; encoding: [0x01,0x05,0xfe,0x71]
+0x01,0x05,0xfe,0x71
+
+# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x00]
+0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x00
+
+# CHECK: v_dot2c_i32_i16_dpp v255, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0xfe,0x71,0x01,0xe4,0x00,0x00]
+0xfa,0x04,0xfe,0x71,0x01,0xe4,0x00,0x00
+
+# CHECK: v_dot2c_i32_i16_dpp v5, v255, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0xff,0xe4,0x00,0x00]
+0xfa,0x04,0x0a,0x70,0xff,0xe4,0x00,0x00
+
+# CHECK: v_dot2c_i32_i16_dpp v5, v1, v255 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0xfe,0x0b,0x70,0x01,0xe4,0x00,0x00]
+0xfa,0xfe,0x0b,0x70,0x01,0xe4,0x00,0x00
+
+# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[3,2,1,0] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0x1b,0x00,0x00]
+0xfa,0x04,0x0a,0x70,0x01,0x1b,0x00,0x00
+
+# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 row_mirror row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0x40,0x01,0x00]
+0xfa,0x04,0x0a,0x70,0x01,0x40,0x01,0x00
+
+# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 row_half_mirror row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0x41,0x01,0x00]
+0xfa,0x04,0x0a,0x70,0x01,0x41,0x01,0x00
+
+# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 row_bcast:15 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0x42,0x01,0x00]
+0xfa,0x04,0x0a,0x70,0x01,0x42,0x01,0x00
+
+# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 row_bcast:31 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0x43,0x01,0x00]
+0xfa,0x04,0x0a,0x70,0x01,0x43,0x01,0x00
+
+# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 wave_shl:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0x30,0x01,0x00]
+0xfa,0x04,0x0a,0x70,0x01,0x30,0x01,0x00
+
+# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 wave_rol:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0x34,0x01,0x00]
+0xfa,0x04,0x0a,0x70,0x01,0x34,0x01,0x00
+
+# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 wave_shr:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0x38,0x01,0x00]
+0xfa,0x04,0x0a,0x70,0x01,0x38,0x01,0x00
+
+# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 wave_ror:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0x3c,0x01,0x00]
+0xfa,0x04,0x0a,0x70,0x01,0x3c,0x01,0x00
+
+# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 row_shl:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0x01,0x01,0x00]
+0xfa,0x04,0x0a,0x70,0x01,0x01,0x01,0x00
+
+# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 row_shl:15 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0x0f,0x01,0x00]
+0xfa,0x04,0x0a,0x70,0x01,0x0f,0x01,0x00
+
+# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 row_shr:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0x11,0x01,0x00]
+0xfa,0x04,0x0a,0x70,0x01,0x11,0x01,0x00
+
+# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 row_shr:15 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0x1f,0x01,0x00]
+0xfa,0x04,0x0a,0x70,0x01,0x1f,0x01,0x00
+
+# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 row_ror:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0x21,0x01,0x00]
+0xfa,0x04,0x0a,0x70,0x01,0x21,0x01,0x00
+
+# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 row_ror:15 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0x2f,0x01,0x00]
+0xfa,0x04,0x0a,0x70,0x01,0x2f,0x01,0x00
+
+# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x1 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x10]
+0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x10
+
+# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x3 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x30]
+0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x30
+
+# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0xf0]
+0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0xf0
+
+# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x01]
+0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x01
+
+# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x3 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x03]
+0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x03
+
+# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0xf ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x0f]
+0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x0f
+
+# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 bound_ctrl:0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x08,0x00]
+0xfa,0x04,0x0a,0x70,0x01,0xe4,0x08,0x00
+
+# CHECK: v_dot4c_i32_i8_e32 v5, v1, v2 ; encoding: [0x01,0x05,0x0a,0x72]
+0x01,0x05,0x0a,0x72
+
+# CHECK: v_dot4c_i32_i8_e32 v255, v1, v2 ; encoding: [0x01,0x05,0xfe,0x73]
+0x01,0x05,0xfe,0x73
+
+# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x00]
+0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x00
+
+# CHECK: v_dot4c_i32_i8_dpp v255, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0xfe,0x73,0x01,0xe4,0x00,0x00]
+0xfa,0x04,0xfe,0x73,0x01,0xe4,0x00,0x00
+
+# CHECK: v_dot4c_i32_i8_dpp v5, v255, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0xff,0xe4,0x00,0x00]
+0xfa,0x04,0x0a,0x72,0xff,0xe4,0x00,0x00
+
+# CHECK: v_dot4c_i32_i8_dpp v5, v1, v255 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0xfe,0x0b,0x72,0x01,0xe4,0x00,0x00]
+0xfa,0xfe,0x0b,0x72,0x01,0xe4,0x00,0x00
+
+# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[3,2,1,0] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0x1b,0x00,0x00]
+0xfa,0x04,0x0a,0x72,0x01,0x1b,0x00,0x00
+
+# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 row_mirror row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0x40,0x01,0x00]
+0xfa,0x04,0x0a,0x72,0x01,0x40,0x01,0x00
+
+# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 row_half_mirror row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0x41,0x01,0x00]
+0xfa,0x04,0x0a,0x72,0x01,0x41,0x01,0x00
+
+# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 row_bcast:15 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0x42,0x01,0x00]
+0xfa,0x04,0x0a,0x72,0x01,0x42,0x01,0x00
+
+# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 row_bcast:31 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0x43,0x01,0x00]
+0xfa,0x04,0x0a,0x72,0x01,0x43,0x01,0x00
+
+# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 wave_shl:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0x30,0x01,0x00]
+0xfa,0x04,0x0a,0x72,0x01,0x30,0x01,0x00
+
+# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 wave_rol:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0x34,0x01,0x00]
+0xfa,0x04,0x0a,0x72,0x01,0x34,0x01,0x00
+
+# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 wave_shr:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0x38,0x01,0x00]
+0xfa,0x04,0x0a,0x72,0x01,0x38,0x01,0x00
+
+# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 wave_ror:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0x3c,0x01,0x00]
+0xfa,0x04,0x0a,0x72,0x01,0x3c,0x01,0x00
+
+# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 row_shl:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0x01,0x01,0x00]
+0xfa,0x04,0x0a,0x72,0x01,0x01,0x01,0x00
+
+# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 row_shl:15 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0x0f,0x01,0x00]
+0xfa,0x04,0x0a,0x72,0x01,0x0f,0x01,0x00
+
+# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 row_shr:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0x11,0x01,0x00]
+0xfa,0x04,0x0a,0x72,0x01,0x11,0x01,0x00
+
+# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 row_shr:15 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0x1f,0x01,0x00]
+0xfa,0x04,0x0a,0x72,0x01,0x1f,0x01,0x00
+
+# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 row_ror:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0x21,0x01,0x00]
+0xfa,0x04,0x0a,0x72,0x01,0x21,0x01,0x00
+
+# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 row_ror:15 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0x2f,0x01,0x00]
+0xfa,0x04,0x0a,0x72,0x01,0x2f,0x01,0x00
+
+# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x1 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x10]
+0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x10
+
+# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x3 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x30]
+0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x30
+
+# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0xf0]
+0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0xf0
+
+# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x01]
+0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x01
+
+# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x3 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x03]
+0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x03
+
+# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0xf ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x0f]
+0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x0f
+
+# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 bound_ctrl:0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x08,0x00]
+0xfa,0x04,0x0a,0x72,0x01,0xe4,0x08,0x00
+
+# CHECK: v_dot8c_i32_i4_e32 v5, v1, v2 ; encoding: [0x01,0x05,0x0a,0x74]
+0x01,0x05,0x0a,0x74
+
+# CHECK: v_dot8c_i32_i4_e32 v255, v1, v2 ; encoding: [0x01,0x05,0xfe,0x75]
+0x01,0x05,0xfe,0x75
+
+# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x00]
+0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x00
+
+# CHECK: v_dot8c_i32_i4_dpp v255, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0xfe,0x75,0x01,0xe4,0x00,0x00]
+0xfa,0x04,0xfe,0x75,0x01,0xe4,0x00,0x00
+
+# CHECK: v_dot8c_i32_i4_dpp v5, v255, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0xff,0xe4,0x00,0x00]
+0xfa,0x04,0x0a,0x74,0xff,0xe4,0x00,0x00
+
+# CHECK: v_dot8c_i32_i4_dpp v5, v1, v255 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0xfe,0x0b,0x74,0x01,0xe4,0x00,0x00]
+0xfa,0xfe,0x0b,0x74,0x01,0xe4,0x00,0x00
+
+# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[3,2,1,0] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0x1b,0x00,0x00]
+0xfa,0x04,0x0a,0x74,0x01,0x1b,0x00,0x00
+
+# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 row_mirror row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0x40,0x01,0x00]
+0xfa,0x04,0x0a,0x74,0x01,0x40,0x01,0x00
+
+# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 row_half_mirror row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0x41,0x01,0x00]
+0xfa,0x04,0x0a,0x74,0x01,0x41,0x01,0x00
+
+# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 row_bcast:15 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0x42,0x01,0x00]
+0xfa,0x04,0x0a,0x74,0x01,0x42,0x01,0x00
+
+# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 row_bcast:31 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0x43,0x01,0x00]
+0xfa,0x04,0x0a,0x74,0x01,0x43,0x01,0x00
+
+# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 wave_shl:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0x30,0x01,0x00]
+0xfa,0x04,0x0a,0x74,0x01,0x30,0x01,0x00
+
+# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 wave_rol:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0x34,0x01,0x00]
+0xfa,0x04,0x0a,0x74,0x01,0x34,0x01,0x00
+
+# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 wave_shr:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0x38,0x01,0x00]
+0xfa,0x04,0x0a,0x74,0x01,0x38,0x01,0x00
+
+# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 wave_ror:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0x3c,0x01,0x00]
+0xfa,0x04,0x0a,0x74,0x01,0x3c,0x01,0x00
+
+# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 row_shl:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0x01,0x01,0x00]
+0xfa,0x04,0x0a,0x74,0x01,0x01,0x01,0x00
+
+# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 row_shl:15 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0x0f,0x01,0x00]
+0xfa,0x04,0x0a,0x74,0x01,0x0f,0x01,0x00
+
+# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 row_shr:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0x11,0x01,0x00]
+0xfa,0x04,0x0a,0x74,0x01,0x11,0x01,0x00
+
+# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 row_shr:15 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0x1f,0x01,0x00]
+0xfa,0x04,0x0a,0x74,0x01,0x1f,0x01,0x00
+
+# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 row_ror:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0x21,0x01,0x00]
+0xfa,0x04,0x0a,0x74,0x01,0x21,0x01,0x00
+
+# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 row_ror:15 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0x2f,0x01,0x00]
+0xfa,0x04,0x0a,0x74,0x01,0x2f,0x01,0x00
+
+# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x1 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x10]
+0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x10
+
+# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x3 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x30]
+0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x30
+
+# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0xf0]
+0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0xf0
+
+# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x01]
+0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x01
+
+# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x3 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x03]
+0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x03
+
+# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0xf ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x0f]
+0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x0f
+
+# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 bound_ctrl:0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x08,0x00]
+0xfa,0x04,0x0a,0x74,0x01,0xe4,0x08,0x00
+
 # CHECK: v_pk_fmac_f16_e32 v5, v1, v2 ; encoding: [0x01,0x05,0x0a,0x78]
 0x01,0x05,0x0a,0x78
 




More information about the llvm-commits mailing list