[llvm] 1781309 - [AArch64][SVE2] Add the SVE2.1 FP quadword reduction instructions

David Sherwood via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 8 01:49:43 PST 2022


Author: David Sherwood
Date: 2022-11-08T09:49:19Z
New Revision: 17813095de1769abb3ab6196115556fce6d81496

URL: https://github.com/llvm/llvm-project/commit/17813095de1769abb3ab6196115556fce6d81496
DIFF: https://github.com/llvm/llvm-project/commit/17813095de1769abb3ab6196115556fce6d81496.diff

LOG: [AArch64][SVE2] Add the SVE2.1 FP quadword reduction instructions

This patch adds the assembly/disassembly for the following instructions:

faddqv   : Floating-point add recursive reduction of quadword vector segments
fmaxqv   : Floating-point maximum reduction of quadword vector segments
fmaxnmqv : Floating-point maximum number recursive reduction of quadword vector segments
fminqv   : Floating-point minimum recursive reduction of quadword vector segments
fminnmqv : Floating-point minimum number recursive reduction of quadword vector segments

The reference can be found here:
https://developer.arm.com/documentation/ddi0602/2022-09

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

Added: 
    llvm/test/MC/AArch64/SVE2p1/faddqv-diagnostics.s
    llvm/test/MC/AArch64/SVE2p1/faddqv.s
    llvm/test/MC/AArch64/SVE2p1/fmaxnmqv-diagnostics.s
    llvm/test/MC/AArch64/SVE2p1/fmaxnmqv.s
    llvm/test/MC/AArch64/SVE2p1/fmaxqv-diagnostics.s
    llvm/test/MC/AArch64/SVE2p1/fmaxqv.s
    llvm/test/MC/AArch64/SVE2p1/fminnmqv-diagnostics.s
    llvm/test/MC/AArch64/SVE2p1/fminnmqv.s
    llvm/test/MC/AArch64/SVE2p1/fminqv-diagnostics.s
    llvm/test/MC/AArch64/SVE2p1/fminqv.s

Modified: 
    llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td
    llvm/lib/Target/AArch64/AArch64SchedA64FX.td
    llvm/lib/Target/AArch64/SVEInstrFormats.td

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td b/llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td
index 32bdf17a4c3e3..c8d131a3ba4a9 100644
--- a/llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td
+++ b/llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td
@@ -3748,3 +3748,15 @@ defm BFMUL_ZZZI : sve2p1_fp_bfmul_by_indexed_elem<"bfmul">;
 
 def BFCLAMP_ZZZ : sve2p1_fclamp<"bfclamp", 0b00, ZPR16>;
 } // End HasSVE2p1_or_HasSME2p1, HasB16B16
+
+
+//===----------------------------------------------------------------------===//
+// SME2.1 or SVE2.1 instructions
+//===----------------------------------------------------------------------===//
+let Predicates = [HasSVE2p1_or_HasSME2p1] in {
+defm FADDQV   : sve2p1_fp_reduction_q<0b000, "faddqv">;
+defm FMAXNMQV : sve2p1_fp_reduction_q<0b100, "fmaxnmqv">;
+defm FMINNMQV : sve2p1_fp_reduction_q<0b101, "fminnmqv">;
+defm FMAXQV   : sve2p1_fp_reduction_q<0b110, "fmaxqv">;
+defm FMINQV   : sve2p1_fp_reduction_q<0b111, "fminqv">;
+}

diff  --git a/llvm/lib/Target/AArch64/AArch64SchedA64FX.td b/llvm/lib/Target/AArch64/AArch64SchedA64FX.td
index dec56e7f8d38e..afdb1d47d39ff 100644
--- a/llvm/lib/Target/AArch64/AArch64SchedA64FX.td
+++ b/llvm/lib/Target/AArch64/AArch64SchedA64FX.td
@@ -22,7 +22,8 @@ def A64FXModel : SchedMachineModel {
 
   list<Predicate> UnsupportedFeatures =
     [HasSVE2, HasSVE2AES, HasSVE2SM4, HasSVE2SHA3, HasSVE2BitPerm, HasPAuth,
-     HasSVE2orSME, HasMTE, HasMatMulInt8, HasBF16, HasSME2];
+     HasSVE2orSME, HasMTE, HasMatMulInt8, HasBF16, HasSME2, HasSME2p1, HasSVE2p1,
+     HasSVE2p1_or_HasSME2p1];
 
   let FullInstRWOverlapCheck = 0;
 }

diff  --git a/llvm/lib/Target/AArch64/SVEInstrFormats.td b/llvm/lib/Target/AArch64/SVEInstrFormats.td
index f9d6abdd52929..c036db4497a4c 100644
--- a/llvm/lib/Target/AArch64/SVEInstrFormats.td
+++ b/llvm/lib/Target/AArch64/SVEInstrFormats.td
@@ -9283,3 +9283,29 @@ multiclass sve_mem_128b_cld_ss<bits<2> dtype, string mnemonic, RegisterOperand g
   def : InstAlias<mnemonic # " $Zt, $Pg/z, [$Rn, $Rm]",
                  (!cast<Instruction>(NAME) ZPR128:$Zt, PPR3bAny:$Pg, GPR64sp:$Rn, gprsh_ty:$Rm), 0>;
 }
+
+
+// SVE floating-point recursive reduction (quadwords)
+class sve2p1_fp_reduction_q<bits<2> sz, bits<3> opc, string mnemonic,
+                            RegisterOperand zpr_ty, string vec_sfx>
+    : I<(outs V128:$Vd), (ins PPR3bAny:$Pg, zpr_ty:$Zn),
+        mnemonic, "\t$Vd." # vec_sfx # ", $Pg, $Zn",
+        "", []>, Sched<[]> {
+  bits<5> Vd;
+  bits<5> Zn;
+  bits<3> Pg;
+  let Inst{31-24} = 0b01100100;
+  let Inst{23-22} = sz;
+  let Inst{21-19} = 0b010;
+  let Inst{18-16} = opc;
+  let Inst{15-13} = 0b101;
+  let Inst{12-10} = Pg;
+  let Inst{9-5}   = Zn;
+  let Inst{4-0}   = Vd;
+}
+
+multiclass sve2p1_fp_reduction_q<bits<3> opc, string mnemonic> {
+  def _H : sve2p1_fp_reduction_q<0b01, opc, mnemonic, ZPR16, "8h">;
+  def _S : sve2p1_fp_reduction_q<0b10, opc, mnemonic, ZPR32, "4s">;
+  def _D : sve2p1_fp_reduction_q<0b11, opc, mnemonic, ZPR64, "2d">;
+}

diff  --git a/llvm/test/MC/AArch64/SVE2p1/faddqv-diagnostics.s b/llvm/test/MC/AArch64/SVE2p1/faddqv-diagnostics.s
new file mode 100644
index 0000000000000..85a2ab2070f7e
--- /dev/null
+++ b/llvm/test/MC/AArch64/SVE2p1/faddqv-diagnostics.s
@@ -0,0 +1,30 @@
+// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2p1 2>&1 < %s | FileCheck %s
+
+// --------------------------------------------------------------------------//
+// Invalid predicate register
+
+faddqv v0.2d, p11, z0.d
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid restricted predicate register, expected p0..p7 (without element suffix)
+// CHECK-NEXT: faddqv v0.2d, p11, z0.d
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+// --------------------------------------------------------------------------//
+// Invalid vector register
+
+faddqv v0.4h, p1, z0.h
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// CHECK-NEXT: faddqv v0.4h, p1, z0.h
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+faddqv z1.s, p1, z0.s
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// CHECK-NEXT: faddqv z1.s, p1, z0.s
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+// --------------------------------------------------------------------------//
+// Invalid vector suffix
+
+faddqv v0.2d, p1, z0.s
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
+// CHECK-NEXT: faddqv v0.2d, p1, z0.s
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:

diff  --git a/llvm/test/MC/AArch64/SVE2p1/faddqv.s b/llvm/test/MC/AArch64/SVE2p1/faddqv.s
new file mode 100644
index 0000000000000..cc1dbb4c01750
--- /dev/null
+++ b/llvm/test/MC/AArch64/SVE2p1/faddqv.s
@@ -0,0 +1,90 @@
+// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sme2p1 < %s \
+// RUN:        | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2p1 < %s \
+// RUN:        | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
+// RUN:        | FileCheck %s --check-prefix=CHECK-ERROR
+// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sme2p1 < %s \
+// RUN:        | llvm-objdump -d --no-print-imm-hex --mattr=+sme2p1 - | FileCheck %s --check-prefix=CHECK-INST
+// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sme2p1 < %s \
+// RUN:        | llvm-objdump -d --mattr=-sme2p1,-sve2p1 - | FileCheck %s --check-prefix=CHECK-UNKNOWN
+// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sme2p1 < %s \
+// RUN:        | sed '/.text/d' | sed 's/.*encoding: //g' \
+// RUN:        | llvm-mc -triple=aarch64 -mattr=+sme2p1 -disassemble -show-encoding \
+// RUN:        | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+
+
+faddqv  v0.2d, p0, z0.d  // 01100100-11010000-10100000-00000000
+// CHECK-INST: faddqv  v0.2d, p0, z0.d
+// CHECK-ENCODING: [0x00,0xa0,0xd0,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 64d0a000 <unknown>
+
+faddqv  v21.2d, p5, z10.d  // 01100100-11010000-10110101-01010101
+// CHECK-INST: faddqv  v21.2d, p5, z10.d
+// CHECK-ENCODING: [0x55,0xb5,0xd0,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 64d0b555 <unknown>
+
+faddqv  v23.2d, p3, z13.d  // 01100100-11010000-10101101-10110111
+// CHECK-INST: faddqv  v23.2d, p3, z13.d
+// CHECK-ENCODING: [0xb7,0xad,0xd0,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 64d0adb7 <unknown>
+
+faddqv  v31.2d, p7, z31.d  // 01100100-11010000-10111111-11111111
+// CHECK-INST: faddqv  v31.2d, p7, z31.d
+// CHECK-ENCODING: [0xff,0xbf,0xd0,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 64d0bfff <unknown>
+
+
+faddqv  v0.8h, p0, z0.h  // 01100100-01010000-10100000-00000000
+// CHECK-INST: faddqv  v0.8h, p0, z0.h
+// CHECK-ENCODING: [0x00,0xa0,0x50,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6450a000 <unknown>
+
+faddqv  v21.8h, p5, z10.h  // 01100100-01010000-10110101-01010101
+// CHECK-INST: faddqv  v21.8h, p5, z10.h
+// CHECK-ENCODING: [0x55,0xb5,0x50,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6450b555 <unknown>
+
+faddqv  v23.8h, p3, z13.h  // 01100100-01010000-10101101-10110111
+// CHECK-INST: faddqv  v23.8h, p3, z13.h
+// CHECK-ENCODING: [0xb7,0xad,0x50,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6450adb7 <unknown>
+
+faddqv  v31.8h, p7, z31.h  // 01100100-01010000-10111111-11111111
+// CHECK-INST: faddqv  v31.8h, p7, z31.h
+// CHECK-ENCODING: [0xff,0xbf,0x50,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6450bfff <unknown>
+
+
+faddqv  v0.4s, p0, z0.s  // 01100100-10010000-10100000-00000000
+// CHECK-INST: faddqv  v0.4s, p0, z0.s
+// CHECK-ENCODING: [0x00,0xa0,0x90,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6490a000 <unknown>
+
+faddqv  v21.4s, p5, z10.s  // 01100100-10010000-10110101-01010101
+// CHECK-INST: faddqv  v21.4s, p5, z10.s
+// CHECK-ENCODING: [0x55,0xb5,0x90,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6490b555 <unknown>
+
+faddqv  v23.4s, p3, z13.s  // 01100100-10010000-10101101-10110111
+// CHECK-INST: faddqv  v23.4s, p3, z13.s
+// CHECK-ENCODING: [0xb7,0xad,0x90,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6490adb7 <unknown>
+
+faddqv  v31.4s, p7, z31.s  // 01100100-10010000-10111111-11111111
+// CHECK-INST: faddqv  v31.4s, p7, z31.s
+// CHECK-ENCODING: [0xff,0xbf,0x90,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6490bfff <unknown>
+

diff  --git a/llvm/test/MC/AArch64/SVE2p1/fmaxnmqv-diagnostics.s b/llvm/test/MC/AArch64/SVE2p1/fmaxnmqv-diagnostics.s
new file mode 100644
index 0000000000000..0dd80cbc5b204
--- /dev/null
+++ b/llvm/test/MC/AArch64/SVE2p1/fmaxnmqv-diagnostics.s
@@ -0,0 +1,30 @@
+// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2p1 2>&1 < %s | FileCheck %s
+
+// --------------------------------------------------------------------------//
+// Invalid predicate register
+
+fmaxnmqv v0.2d, p11, z0.d
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid restricted predicate register, expected p0..p7 (without element suffix)
+// CHECK-NEXT: fmaxnmqv v0.2d, p11, z0.d
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+// --------------------------------------------------------------------------//
+// Invalid vector register
+
+fmaxnmqv v0.4h, p1, z0.h
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// CHECK-NEXT: fmaxnmqv v0.4h, p1, z0.h
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+fmaxnmqv z1.s, p1, z0.s
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// CHECK-NEXT: fmaxnmqv z1.s, p1, z0.s
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+// --------------------------------------------------------------------------//
+// Invalid vector suffix
+
+fmaxnmqv v0.2d, p1, z0.s
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
+// CHECK-NEXT: fmaxnmqv v0.2d, p1, z0.s
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:

diff  --git a/llvm/test/MC/AArch64/SVE2p1/fmaxnmqv.s b/llvm/test/MC/AArch64/SVE2p1/fmaxnmqv.s
new file mode 100644
index 0000000000000..de1c312ddcf0e
--- /dev/null
+++ b/llvm/test/MC/AArch64/SVE2p1/fmaxnmqv.s
@@ -0,0 +1,90 @@
+// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sme2p1 < %s \
+// RUN:        | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2p1 < %s \
+// RUN:        | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
+// RUN:        | FileCheck %s --check-prefix=CHECK-ERROR
+// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sme2p1 < %s \
+// RUN:        | llvm-objdump -d --no-print-imm-hex --mattr=+sme2p1 - | FileCheck %s --check-prefix=CHECK-INST
+// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sme2p1 < %s \
+// RUN:        | llvm-objdump -d --mattr=-sme2p1,-sve2p1 - | FileCheck %s --check-prefix=CHECK-UNKNOWN
+// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sme2p1 < %s \
+// RUN:        | sed '/.text/d' | sed 's/.*encoding: //g' \
+// RUN:        | llvm-mc -triple=aarch64 -mattr=+sme2p1 -disassemble -show-encoding \
+// RUN:        | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+
+
+fmaxnmqv v0.2d, p0, z0.d  // 01100100-11010100-10100000-00000000
+// CHECK-INST: fmaxnmqv v0.2d, p0, z0.d
+// CHECK-ENCODING: [0x00,0xa0,0xd4,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 64d4a000 <unknown>
+
+fmaxnmqv v21.2d, p5, z10.d  // 01100100-11010100-10110101-01010101
+// CHECK-INST: fmaxnmqv v21.2d, p5, z10.d
+// CHECK-ENCODING: [0x55,0xb5,0xd4,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 64d4b555 <unknown>
+
+fmaxnmqv v23.2d, p3, z13.d  // 01100100-11010100-10101101-10110111
+// CHECK-INST: fmaxnmqv v23.2d, p3, z13.d
+// CHECK-ENCODING: [0xb7,0xad,0xd4,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 64d4adb7 <unknown>
+
+fmaxnmqv v31.2d, p7, z31.d  // 01100100-11010100-10111111-11111111
+// CHECK-INST: fmaxnmqv v31.2d, p7, z31.d
+// CHECK-ENCODING: [0xff,0xbf,0xd4,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 64d4bfff <unknown>
+
+
+fmaxnmqv v0.8h, p0, z0.h  // 01100100-01010100-10100000-00000000
+// CHECK-INST: fmaxnmqv v0.8h, p0, z0.h
+// CHECK-ENCODING: [0x00,0xa0,0x54,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6454a000 <unknown>
+
+fmaxnmqv v21.8h, p5, z10.h  // 01100100-01010100-10110101-01010101
+// CHECK-INST: fmaxnmqv v21.8h, p5, z10.h
+// CHECK-ENCODING: [0x55,0xb5,0x54,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6454b555 <unknown>
+
+fmaxnmqv v23.8h, p3, z13.h  // 01100100-01010100-10101101-10110111
+// CHECK-INST: fmaxnmqv v23.8h, p3, z13.h
+// CHECK-ENCODING: [0xb7,0xad,0x54,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6454adb7 <unknown>
+
+fmaxnmqv v31.8h, p7, z31.h  // 01100100-01010100-10111111-11111111
+// CHECK-INST: fmaxnmqv v31.8h, p7, z31.h
+// CHECK-ENCODING: [0xff,0xbf,0x54,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6454bfff <unknown>
+
+
+fmaxnmqv v0.4s, p0, z0.s  // 01100100-10010100-10100000-00000000
+// CHECK-INST: fmaxnmqv v0.4s, p0, z0.s
+// CHECK-ENCODING: [0x00,0xa0,0x94,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6494a000 <unknown>
+
+fmaxnmqv v21.4s, p5, z10.s  // 01100100-10010100-10110101-01010101
+// CHECK-INST: fmaxnmqv v21.4s, p5, z10.s
+// CHECK-ENCODING: [0x55,0xb5,0x94,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6494b555 <unknown>
+
+fmaxnmqv v23.4s, p3, z13.s  // 01100100-10010100-10101101-10110111
+// CHECK-INST: fmaxnmqv v23.4s, p3, z13.s
+// CHECK-ENCODING: [0xb7,0xad,0x94,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6494adb7 <unknown>
+
+fmaxnmqv v31.4s, p7, z31.s  // 01100100-10010100-10111111-11111111
+// CHECK-INST: fmaxnmqv v31.4s, p7, z31.s
+// CHECK-ENCODING: [0xff,0xbf,0x94,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6494bfff <unknown>
+

diff  --git a/llvm/test/MC/AArch64/SVE2p1/fmaxqv-diagnostics.s b/llvm/test/MC/AArch64/SVE2p1/fmaxqv-diagnostics.s
new file mode 100644
index 0000000000000..3a5366bb00a31
--- /dev/null
+++ b/llvm/test/MC/AArch64/SVE2p1/fmaxqv-diagnostics.s
@@ -0,0 +1,30 @@
+// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2p1 2>&1 < %s | FileCheck %s
+
+// --------------------------------------------------------------------------//
+// Invalid predicate register
+
+fmaxqv v0.2d, p11, z0.d
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid restricted predicate register, expected p0..p7 (without element suffix)
+// CHECK-NEXT: fmaxqv v0.2d, p11, z0.d
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+// --------------------------------------------------------------------------//
+// Invalid vector register
+
+fmaxqv v0.4h, p1, z0.h
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// CHECK-NEXT: fmaxqv v0.4h, p1, z0.h
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+fmaxqv z1.s, p1, z0.s
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// CHECK-NEXT: fmaxqv z1.s, p1, z0.s
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+// --------------------------------------------------------------------------//
+// Invalid vector suffix
+
+fmaxqv v0.2d, p1, z0.s
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
+// CHECK-NEXT: fmaxqv v0.2d, p1, z0.s
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:

diff  --git a/llvm/test/MC/AArch64/SVE2p1/fmaxqv.s b/llvm/test/MC/AArch64/SVE2p1/fmaxqv.s
new file mode 100644
index 0000000000000..1d00885654461
--- /dev/null
+++ b/llvm/test/MC/AArch64/SVE2p1/fmaxqv.s
@@ -0,0 +1,90 @@
+// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sme2p1 < %s \
+// RUN:        | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2p1 < %s \
+// RUN:        | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
+// RUN:        | FileCheck %s --check-prefix=CHECK-ERROR
+// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sme2p1 < %s \
+// RUN:        | llvm-objdump -d --no-print-imm-hex --mattr=+sme2p1 - | FileCheck %s --check-prefix=CHECK-INST
+// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sme2p1 < %s \
+// RUN:        | llvm-objdump -d --mattr=-sme2p1,-sve2p1 - | FileCheck %s --check-prefix=CHECK-UNKNOWN
+// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sme2p1 < %s \
+// RUN:        | sed '/.text/d' | sed 's/.*encoding: //g' \
+// RUN:        | llvm-mc -triple=aarch64 -mattr=+sme2p1 -disassemble -show-encoding \
+// RUN:        | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+
+
+fmaxqv  v0.2d, p0, z0.d  // 01100100-11010110-10100000-00000000
+// CHECK-INST: fmaxqv  v0.2d, p0, z0.d
+// CHECK-ENCODING: [0x00,0xa0,0xd6,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 64d6a000 <unknown>
+
+fmaxqv  v21.2d, p5, z10.d  // 01100100-11010110-10110101-01010101
+// CHECK-INST: fmaxqv  v21.2d, p5, z10.d
+// CHECK-ENCODING: [0x55,0xb5,0xd6,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 64d6b555 <unknown>
+
+fmaxqv  v23.2d, p3, z13.d  // 01100100-11010110-10101101-10110111
+// CHECK-INST: fmaxqv  v23.2d, p3, z13.d
+// CHECK-ENCODING: [0xb7,0xad,0xd6,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 64d6adb7 <unknown>
+
+fmaxqv  v31.2d, p7, z31.d  // 01100100-11010110-10111111-11111111
+// CHECK-INST: fmaxqv  v31.2d, p7, z31.d
+// CHECK-ENCODING: [0xff,0xbf,0xd6,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 64d6bfff <unknown>
+
+
+fmaxqv  v0.8h, p0, z0.h  // 01100100-01010110-10100000-00000000
+// CHECK-INST: fmaxqv  v0.8h, p0, z0.h
+// CHECK-ENCODING: [0x00,0xa0,0x56,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6456a000 <unknown>
+
+fmaxqv  v21.8h, p5, z10.h  // 01100100-01010110-10110101-01010101
+// CHECK-INST: fmaxqv  v21.8h, p5, z10.h
+// CHECK-ENCODING: [0x55,0xb5,0x56,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6456b555 <unknown>
+
+fmaxqv  v23.8h, p3, z13.h  // 01100100-01010110-10101101-10110111
+// CHECK-INST: fmaxqv  v23.8h, p3, z13.h
+// CHECK-ENCODING: [0xb7,0xad,0x56,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6456adb7 <unknown>
+
+fmaxqv  v31.8h, p7, z31.h  // 01100100-01010110-10111111-11111111
+// CHECK-INST: fmaxqv  v31.8h, p7, z31.h
+// CHECK-ENCODING: [0xff,0xbf,0x56,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6456bfff <unknown>
+
+
+fmaxqv  v0.4s, p0, z0.s  // 01100100-10010110-10100000-00000000
+// CHECK-INST: fmaxqv  v0.4s, p0, z0.s
+// CHECK-ENCODING: [0x00,0xa0,0x96,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6496a000 <unknown>
+
+fmaxqv  v21.4s, p5, z10.s  // 01100100-10010110-10110101-01010101
+// CHECK-INST: fmaxqv  v21.4s, p5, z10.s
+// CHECK-ENCODING: [0x55,0xb5,0x96,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6496b555 <unknown>
+
+fmaxqv  v23.4s, p3, z13.s  // 01100100-10010110-10101101-10110111
+// CHECK-INST: fmaxqv  v23.4s, p3, z13.s
+// CHECK-ENCODING: [0xb7,0xad,0x96,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6496adb7 <unknown>
+
+fmaxqv  v31.4s, p7, z31.s  // 01100100-10010110-10111111-11111111
+// CHECK-INST: fmaxqv  v31.4s, p7, z31.s
+// CHECK-ENCODING: [0xff,0xbf,0x96,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6496bfff <unknown>
+

diff  --git a/llvm/test/MC/AArch64/SVE2p1/fminnmqv-diagnostics.s b/llvm/test/MC/AArch64/SVE2p1/fminnmqv-diagnostics.s
new file mode 100644
index 0000000000000..4e76a56d0867b
--- /dev/null
+++ b/llvm/test/MC/AArch64/SVE2p1/fminnmqv-diagnostics.s
@@ -0,0 +1,30 @@
+// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2p1 2>&1 < %s | FileCheck %s
+
+// --------------------------------------------------------------------------//
+// Invalid predicate register
+
+fminnmqv v0.2d, p11, z0.d
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid restricted predicate register, expected p0..p7 (without element suffix)
+// CHECK-NEXT: fminnmqv v0.2d, p11, z0.d
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+// --------------------------------------------------------------------------//
+// Invalid vector register
+
+fminnmqv v0.4h, p1, z0.h
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// CHECK-NEXT: fminnmqv v0.4h, p1, z0.h
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+fminnmqv z1.s, p1, z0.s
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// CHECK-NEXT: fminnmqv z1.s, p1, z0.s
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+// --------------------------------------------------------------------------//
+// Invalid vector suffix
+
+fminnmqv v0.2d, p1, z0.s
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
+// CHECK-NEXT: fminnmqv v0.2d, p1, z0.s
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:

diff  --git a/llvm/test/MC/AArch64/SVE2p1/fminnmqv.s b/llvm/test/MC/AArch64/SVE2p1/fminnmqv.s
new file mode 100644
index 0000000000000..f239ac0dd823b
--- /dev/null
+++ b/llvm/test/MC/AArch64/SVE2p1/fminnmqv.s
@@ -0,0 +1,90 @@
+// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sme2p1 < %s \
+// RUN:        | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2p1 < %s \
+// RUN:        | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
+// RUN:        | FileCheck %s --check-prefix=CHECK-ERROR
+// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sme2p1 < %s \
+// RUN:        | llvm-objdump -d --no-print-imm-hex --mattr=+sme2p1 - | FileCheck %s --check-prefix=CHECK-INST
+// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sme2p1 < %s \
+// RUN:        | llvm-objdump -d --mattr=-sme2p1,-sve2p1 - | FileCheck %s --check-prefix=CHECK-UNKNOWN
+// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sme2p1 < %s \
+// RUN:        | sed '/.text/d' | sed 's/.*encoding: //g' \
+// RUN:        | llvm-mc -triple=aarch64 -mattr=+sme2p1 -disassemble -show-encoding \
+// RUN:        | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+
+
+fminnmqv v0.2d, p0, z0.d  // 01100100-11010101-10100000-00000000
+// CHECK-INST: fminnmqv v0.2d, p0, z0.d
+// CHECK-ENCODING: [0x00,0xa0,0xd5,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 64d5a000 <unknown>
+
+fminnmqv v21.2d, p5, z10.d  // 01100100-11010101-10110101-01010101
+// CHECK-INST: fminnmqv v21.2d, p5, z10.d
+// CHECK-ENCODING: [0x55,0xb5,0xd5,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 64d5b555 <unknown>
+
+fminnmqv v23.2d, p3, z13.d  // 01100100-11010101-10101101-10110111
+// CHECK-INST: fminnmqv v23.2d, p3, z13.d
+// CHECK-ENCODING: [0xb7,0xad,0xd5,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 64d5adb7 <unknown>
+
+fminnmqv v31.2d, p7, z31.d  // 01100100-11010101-10111111-11111111
+// CHECK-INST: fminnmqv v31.2d, p7, z31.d
+// CHECK-ENCODING: [0xff,0xbf,0xd5,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 64d5bfff <unknown>
+
+
+fminnmqv v0.8h, p0, z0.h  // 01100100-01010101-10100000-00000000
+// CHECK-INST: fminnmqv v0.8h, p0, z0.h
+// CHECK-ENCODING: [0x00,0xa0,0x55,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6455a000 <unknown>
+
+fminnmqv v21.8h, p5, z10.h  // 01100100-01010101-10110101-01010101
+// CHECK-INST: fminnmqv v21.8h, p5, z10.h
+// CHECK-ENCODING: [0x55,0xb5,0x55,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6455b555 <unknown>
+
+fminnmqv v23.8h, p3, z13.h  // 01100100-01010101-10101101-10110111
+// CHECK-INST: fminnmqv v23.8h, p3, z13.h
+// CHECK-ENCODING: [0xb7,0xad,0x55,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6455adb7 <unknown>
+
+fminnmqv v31.8h, p7, z31.h  // 01100100-01010101-10111111-11111111
+// CHECK-INST: fminnmqv v31.8h, p7, z31.h
+// CHECK-ENCODING: [0xff,0xbf,0x55,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6455bfff <unknown>
+
+
+fminnmqv v0.4s, p0, z0.s  // 01100100-10010101-10100000-00000000
+// CHECK-INST: fminnmqv v0.4s, p0, z0.s
+// CHECK-ENCODING: [0x00,0xa0,0x95,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6495a000 <unknown>
+
+fminnmqv v21.4s, p5, z10.s  // 01100100-10010101-10110101-01010101
+// CHECK-INST: fminnmqv v21.4s, p5, z10.s
+// CHECK-ENCODING: [0x55,0xb5,0x95,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6495b555 <unknown>
+
+fminnmqv v23.4s, p3, z13.s  // 01100100-10010101-10101101-10110111
+// CHECK-INST: fminnmqv v23.4s, p3, z13.s
+// CHECK-ENCODING: [0xb7,0xad,0x95,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6495adb7 <unknown>
+
+fminnmqv v31.4s, p7, z31.s  // 01100100-10010101-10111111-11111111
+// CHECK-INST: fminnmqv v31.4s, p7, z31.s
+// CHECK-ENCODING: [0xff,0xbf,0x95,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6495bfff <unknown>
+

diff  --git a/llvm/test/MC/AArch64/SVE2p1/fminqv-diagnostics.s b/llvm/test/MC/AArch64/SVE2p1/fminqv-diagnostics.s
new file mode 100644
index 0000000000000..787529eed772e
--- /dev/null
+++ b/llvm/test/MC/AArch64/SVE2p1/fminqv-diagnostics.s
@@ -0,0 +1,30 @@
+// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2p1 2>&1 < %s | FileCheck %s
+
+// --------------------------------------------------------------------------//
+// Invalid predicate register
+
+fminqv v0.2d, p11, z0.d
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid restricted predicate register, expected p0..p7 (without element suffix)
+// CHECK-NEXT: fminqv v0.2d, p11, z0.d
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+// --------------------------------------------------------------------------//
+// Invalid vector register
+
+fminqv v0.4h, p1, z0.h
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// CHECK-NEXT: fminqv v0.4h, p1, z0.h
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+fminqv z1.s, p1, z0.s
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// CHECK-NEXT: fminqv z1.s, p1, z0.s
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+// --------------------------------------------------------------------------//
+// Invalid vector suffix
+
+fminqv v0.2d, p1, z0.s
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
+// CHECK-NEXT: fminqv v0.2d, p1, z0.s
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:

diff  --git a/llvm/test/MC/AArch64/SVE2p1/fminqv.s b/llvm/test/MC/AArch64/SVE2p1/fminqv.s
new file mode 100644
index 0000000000000..480f496be9611
--- /dev/null
+++ b/llvm/test/MC/AArch64/SVE2p1/fminqv.s
@@ -0,0 +1,90 @@
+// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sme2p1 < %s \
+// RUN:        | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2p1 < %s \
+// RUN:        | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
+// RUN:        | FileCheck %s --check-prefix=CHECK-ERROR
+// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sme2p1 < %s \
+// RUN:        | llvm-objdump -d --no-print-imm-hex --mattr=+sme2p1 - | FileCheck %s --check-prefix=CHECK-INST
+// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sme2p1 < %s \
+// RUN:        | llvm-objdump -d --mattr=-sme2p1,-sve2p1 - | FileCheck %s --check-prefix=CHECK-UNKNOWN
+// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sme2p1 < %s \
+// RUN:        | sed '/.text/d' | sed 's/.*encoding: //g' \
+// RUN:        | llvm-mc -triple=aarch64 -mattr=+sme2p1 -disassemble -show-encoding \
+// RUN:        | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+
+
+fminqv  v0.2d, p0, z0.d  // 01100100-11010111-10100000-00000000
+// CHECK-INST: fminqv  v0.2d, p0, z0.d
+// CHECK-ENCODING: [0x00,0xa0,0xd7,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 64d7a000 <unknown>
+
+fminqv  v21.2d, p5, z10.d  // 01100100-11010111-10110101-01010101
+// CHECK-INST: fminqv  v21.2d, p5, z10.d
+// CHECK-ENCODING: [0x55,0xb5,0xd7,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 64d7b555 <unknown>
+
+fminqv  v23.2d, p3, z13.d  // 01100100-11010111-10101101-10110111
+// CHECK-INST: fminqv  v23.2d, p3, z13.d
+// CHECK-ENCODING: [0xb7,0xad,0xd7,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 64d7adb7 <unknown>
+
+fminqv  v31.2d, p7, z31.d  // 01100100-11010111-10111111-11111111
+// CHECK-INST: fminqv  v31.2d, p7, z31.d
+// CHECK-ENCODING: [0xff,0xbf,0xd7,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 64d7bfff <unknown>
+
+
+fminqv  v0.8h, p0, z0.h  // 01100100-01010111-10100000-00000000
+// CHECK-INST: fminqv  v0.8h, p0, z0.h
+// CHECK-ENCODING: [0x00,0xa0,0x57,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6457a000 <unknown>
+
+fminqv  v21.8h, p5, z10.h  // 01100100-01010111-10110101-01010101
+// CHECK-INST: fminqv  v21.8h, p5, z10.h
+// CHECK-ENCODING: [0x55,0xb5,0x57,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6457b555 <unknown>
+
+fminqv  v23.8h, p3, z13.h  // 01100100-01010111-10101101-10110111
+// CHECK-INST: fminqv  v23.8h, p3, z13.h
+// CHECK-ENCODING: [0xb7,0xad,0x57,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6457adb7 <unknown>
+
+fminqv  v31.8h, p7, z31.h  // 01100100-01010111-10111111-11111111
+// CHECK-INST: fminqv  v31.8h, p7, z31.h
+// CHECK-ENCODING: [0xff,0xbf,0x57,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6457bfff <unknown>
+
+
+fminqv  v0.4s, p0, z0.s  // 01100100-10010111-10100000-00000000
+// CHECK-INST: fminqv  v0.4s, p0, z0.s
+// CHECK-ENCODING: [0x00,0xa0,0x97,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6497a000 <unknown>
+
+fminqv  v21.4s, p5, z10.s  // 01100100-10010111-10110101-01010101
+// CHECK-INST: fminqv  v21.4s, p5, z10.s
+// CHECK-ENCODING: [0x55,0xb5,0x97,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6497b555 <unknown>
+
+fminqv  v23.4s, p3, z13.s  // 01100100-10010111-10101101-10110111
+// CHECK-INST: fminqv  v23.4s, p3, z13.s
+// CHECK-ENCODING: [0xb7,0xad,0x97,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6497adb7 <unknown>
+
+fminqv  v31.4s, p7, z31.s  // 01100100-10010111-10111111-11111111
+// CHECK-INST: fminqv  v31.4s, p7, z31.s
+// CHECK-ENCODING: [0xff,0xbf,0x97,0x64]
+// CHECK-ERROR: instruction requires: sme2p1 or sve2p1
+// CHECK-UNKNOWN: 6497bfff <unknown>
+


        


More information about the llvm-commits mailing list