[llvm] r362215 - [AArch64][SVE2] Asm: support WHILE instructions

Cullen Rhodes via llvm-commits llvm-commits at lists.llvm.org
Fri May 31 02:13:55 PDT 2019


Author: c-rhodes
Date: Fri May 31 02:13:55 2019
New Revision: 362215

URL: http://llvm.org/viewvc/llvm-project?rev=362215&view=rev
Log:
[AArch64][SVE2] Asm: support WHILE instructions

Summary:
Patch adds support for the following instructions:
    * WHILEGE, WHILEGT, WHILEHS, WHILEHI, WHILEWR, WHILERW

The specification can be found here:
https://developer.arm.com/docs/ddi0602/latest

Reviewed By: chill

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

Added:
    llvm/trunk/test/MC/AArch64/SVE2/whilege-diagnostics.s
    llvm/trunk/test/MC/AArch64/SVE2/whilege.s
    llvm/trunk/test/MC/AArch64/SVE2/whilegt-diagnostics.s
    llvm/trunk/test/MC/AArch64/SVE2/whilegt.s
    llvm/trunk/test/MC/AArch64/SVE2/whilehi-diagnostics.s
    llvm/trunk/test/MC/AArch64/SVE2/whilehi.s
    llvm/trunk/test/MC/AArch64/SVE2/whilehs-diagnostics.s
    llvm/trunk/test/MC/AArch64/SVE2/whilehs.s
    llvm/trunk/test/MC/AArch64/SVE2/whilerw-diagnostics.s
    llvm/trunk/test/MC/AArch64/SVE2/whilerw.s
    llvm/trunk/test/MC/AArch64/SVE2/whilewr-diagnostics.s
    llvm/trunk/test/MC/AArch64/SVE2/whilewr.s
Modified:
    llvm/trunk/lib/Target/AArch64/AArch64SVEInstrInfo.td
    llvm/trunk/lib/Target/AArch64/SVEInstrFormats.td

Modified: llvm/trunk/lib/Target/AArch64/AArch64SVEInstrInfo.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64SVEInstrInfo.td?rev=362215&r1=362214&r2=362215&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AArch64/AArch64SVEInstrInfo.td (original)
+++ llvm/trunk/lib/Target/AArch64/AArch64SVEInstrInfo.td Fri May 31 02:13:55 2019
@@ -1371,6 +1371,21 @@ let Predicates = [HasSVE2] in {
   // SVE table lookup (three sources)
   defm TBL_ZZZZ : sve2_int_perm_tbl<"tbl">;
   defm TBX_ZZZ  : sve2_int_perm_tbx<"tbx">;
+
+  // SVE integer compare scalar count and limit
+  defm WHILEGE_PWW : sve_int_while4_rr<0b000, "whilege">;
+  defm WHILEGT_PWW : sve_int_while4_rr<0b001, "whilegt">;
+  defm WHILEHS_PWW : sve_int_while4_rr<0b100, "whilehs">;
+  defm WHILEHI_PWW : sve_int_while4_rr<0b101, "whilehi">;
+
+  defm WHILEGE_PXX : sve_int_while8_rr<0b000, "whilege">;
+  defm WHILEGT_PXX : sve_int_while8_rr<0b001, "whilegt">;
+  defm WHILEHS_PXX : sve_int_while8_rr<0b100, "whilehs">;
+  defm WHILEHI_PXX : sve_int_while8_rr<0b101, "whilehi">;
+
+  // SVE pointer conflict compare
+  defm WHILEWR_PXX : sve2_int_while_rr<0b0, "whilewr">;
+  defm WHILERW_PXX : sve2_int_while_rr<0b1, "whilerw">;
 }
 
 let Predicates = [HasSVE2AES] in {

Modified: llvm/trunk/lib/Target/AArch64/SVEInstrFormats.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/SVEInstrFormats.td?rev=362215&r1=362214&r2=362215&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AArch64/SVEInstrFormats.td (original)
+++ llvm/trunk/lib/Target/AArch64/SVEInstrFormats.td Fri May 31 02:13:55 2019
@@ -3270,6 +3270,32 @@ multiclass sve_int_while8_rr<bits<3> opc
   def _D : sve_int_while_rr<0b11, { 1, opc }, asm, GPR64, PPR64>;
 }
 
+class sve2_int_while_rr<bits<2> sz8_64, bits<1> rw, string asm,
+                        PPRRegOp pprty>
+: I<(outs pprty:$Pd), (ins GPR64:$Rn, GPR64:$Rm),
+  asm, "\t$Pd, $Rn, $Rm",
+  "", []>, Sched<[]> {
+  bits<4> Pd;
+  bits<5> Rm;
+  bits<5> Rn;
+  let Inst{31-24} = 0b00100101;
+  let Inst{23-22} = sz8_64;
+  let Inst{21}    = 0b1;
+  let Inst{20-16} = Rm;
+  let Inst{15-10} = 0b001100;
+  let Inst{9-5}   = Rn;
+  let Inst{4}     = rw;
+  let Inst{3-0}   = Pd;
+
+  let Defs = [NZCV];
+}
+
+multiclass sve2_int_while_rr<bits<1> rw, string asm> {
+  def _B : sve2_int_while_rr<0b00, rw, asm, PPR8>;
+  def _H : sve2_int_while_rr<0b01, rw, asm, PPR16>;
+  def _S : sve2_int_while_rr<0b10, rw, asm, PPR32>;
+  def _D : sve2_int_while_rr<0b11, rw, asm, PPR64>;
+}
 
 //===----------------------------------------------------------------------===//
 // SVE Floating Point Fast Reduction Group

Added: llvm/trunk/test/MC/AArch64/SVE2/whilege-diagnostics.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/SVE2/whilege-diagnostics.s?rev=362215&view=auto
==============================================================================
--- llvm/trunk/test/MC/AArch64/SVE2/whilege-diagnostics.s (added)
+++ llvm/trunk/test/MC/AArch64/SVE2/whilege-diagnostics.s Fri May 31 02:13:55 2019
@@ -0,0 +1,29 @@
+// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2  2>&1 < %s| FileCheck %s
+
+
+// ------------------------------------------------------------------------- //
+// Invalid scalar registers
+
+whilege  p15.b, xzr, sp
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// CHECK-NEXT: whilege  p15.b, xzr, sp
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+whilege  p15.b, xzr, w0
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// CHECK-NEXT: whilege  p15.b, xzr, w0
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+whilege  p15.b, w0, x0
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// CHECK-NEXT: whilege  p15.b, w0, x0
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+
+// ------------------------------------------------------------------------- //
+// Invalid predicate
+
+whilege  p15, w0, w0
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid predicate register.
+// CHECK-NEXT: whilege  p15, w0, w0
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:

Added: llvm/trunk/test/MC/AArch64/SVE2/whilege.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/SVE2/whilege.s?rev=362215&view=auto
==============================================================================
--- llvm/trunk/test/MC/AArch64/SVE2/whilege.s (added)
+++ llvm/trunk/test/MC/AArch64/SVE2/whilege.s Fri May 31 02:13:55 2019
@@ -0,0 +1,68 @@
+// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %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=+sve2 < %s \
+// RUN:        | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
+// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
+// RUN:        | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
+
+whilege  p15.b, xzr, x0
+// CHECK-INST: whilege	p15.b, xzr, x0
+// CHECK-ENCODING: [0xef,0x13,0x20,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: ef 13 20 25 <unknown>
+
+whilege  p15.b, x0, xzr
+// CHECK-INST: whilege	p15.b, x0, xzr
+// CHECK-ENCODING: [0x0f,0x10,0x3f,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: 0f 10 3f 25 <unknown>
+
+whilege  p15.b, wzr, w0
+// CHECK-INST: whilege	p15.b, wzr, w0
+// CHECK-ENCODING: [0xef,0x03,0x20,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: ef 03 20 25 <unknown>
+
+whilege  p15.b, w0, wzr
+// CHECK-INST: whilege	p15.b, w0, wzr
+// CHECK-ENCODING: [0x0f,0x00,0x3f,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: 0f 00 3f 25 <unknown>
+
+whilege  p15.h, x0, xzr
+// CHECK-INST: whilege	p15.h, x0, xzr
+// CHECK-ENCODING: [0x0f,0x10,0x7f,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: 0f 10 7f 25 <unknown>
+
+whilege  p15.h, w0, wzr
+// CHECK-INST: whilege	p15.h, w0, wzr
+// CHECK-ENCODING: [0x0f,0x00,0x7f,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: 0f 00 7f 25 <unknown>
+
+whilege  p15.s, x0, xzr
+// CHECK-INST: whilege	p15.s, x0, xzr
+// CHECK-ENCODING: [0x0f,0x10,0xbf,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: 0f 10 bf 25 <unknown>
+
+whilege  p15.s, w0, wzr
+// CHECK-INST: whilege	p15.s, w0, wzr
+// CHECK-ENCODING: [0x0f,0x00,0xbf,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: 0f 00 bf 25 <unknown>
+
+whilege  p15.d, w0, wzr
+// CHECK-INST: whilege	p15.d, w0, wzr
+// CHECK-ENCODING: [0x0f,0x00,0xff,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: 0f 00 ff 25 <unknown>
+
+whilege  p15.d, x0, xzr
+// CHECK-INST: whilege	p15.d, x0, xzr
+// CHECK-ENCODING: [0x0f,0x10,0xff,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: 0f 10 ff 25 <unknown>

Added: llvm/trunk/test/MC/AArch64/SVE2/whilegt-diagnostics.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/SVE2/whilegt-diagnostics.s?rev=362215&view=auto
==============================================================================
--- llvm/trunk/test/MC/AArch64/SVE2/whilegt-diagnostics.s (added)
+++ llvm/trunk/test/MC/AArch64/SVE2/whilegt-diagnostics.s Fri May 31 02:13:55 2019
@@ -0,0 +1,29 @@
+// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2  2>&1 < %s| FileCheck %s
+
+
+// ------------------------------------------------------------------------- //
+// Invalid scalar registers
+
+whilegt  p15.b, xzr, sp
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// CHECK-NEXT: whilegt  p15.b, xzr, sp
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+whilegt  p15.b, xzr, w0
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// CHECK-NEXT: whilegt  p15.b, xzr, w0
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+whilegt  p15.b, w0, x0
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// CHECK-NEXT: whilegt  p15.b, w0, x0
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+
+// ------------------------------------------------------------------------- //
+// Invalid predicate
+
+whilegt  p15, w0, w0
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid predicate register.
+// CHECK-NEXT: whilegt  p15, w0, w0
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:

Added: llvm/trunk/test/MC/AArch64/SVE2/whilegt.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/SVE2/whilegt.s?rev=362215&view=auto
==============================================================================
--- llvm/trunk/test/MC/AArch64/SVE2/whilegt.s (added)
+++ llvm/trunk/test/MC/AArch64/SVE2/whilegt.s Fri May 31 02:13:55 2019
@@ -0,0 +1,68 @@
+// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %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=+sve2 < %s \
+// RUN:        | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
+// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
+// RUN:        | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
+
+whilegt  p15.b, xzr, x0
+// CHECK-INST: whilegt	p15.b, xzr, x0
+// CHECK-ENCODING: [0xff,0x13,0x20,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: ff 13 20 25 <unknown>
+
+whilegt  p15.b, x0, xzr
+// CHECK-INST: whilegt	p15.b, x0, xzr
+// CHECK-ENCODING: [0x1f,0x10,0x3f,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: 1f 10 3f 25 <unknown>
+
+whilegt  p15.b, wzr, w0
+// CHECK-INST: whilegt	p15.b, wzr, w0
+// CHECK-ENCODING: [0xff,0x03,0x20,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: ff 03 20 25 <unknown>
+
+whilegt  p15.b, w0, wzr
+// CHECK-INST: whilegt	p15.b, w0, wzr
+// CHECK-ENCODING: [0x1f,0x00,0x3f,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: 1f 00 3f 25 <unknown>
+
+whilegt  p15.h, x0, xzr
+// CHECK-INST: whilegt	p15.h, x0, xzr
+// CHECK-ENCODING: [0x1f,0x10,0x7f,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: 1f 10 7f 25 <unknown>
+
+whilegt  p15.h, w0, wzr
+// CHECK-INST: whilegt	p15.h, w0, wzr
+// CHECK-ENCODING: [0x1f,0x00,0x7f,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: 1f 00 7f 25 <unknown>
+
+whilegt  p15.s, x0, xzr
+// CHECK-INST: whilegt	p15.s, x0, xzr
+// CHECK-ENCODING: [0x1f,0x10,0xbf,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: 1f 10 bf 25 <unknown>
+
+whilegt  p15.s, w0, wzr
+// CHECK-INST: whilegt	p15.s, w0, wzr
+// CHECK-ENCODING: [0x1f,0x00,0xbf,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: 1f 00 bf 25 <unknown>
+
+whilegt  p15.d, w0, wzr
+// CHECK-INST: whilegt	p15.d, w0, wzr
+// CHECK-ENCODING: [0x1f,0x00,0xff,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: 1f 00 ff 25 <unknown>
+
+whilegt  p15.d, x0, xzr
+// CHECK-INST: whilegt	p15.d, x0, xzr
+// CHECK-ENCODING: [0x1f,0x10,0xff,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: 1f 10 ff 25 <unknown>

Added: llvm/trunk/test/MC/AArch64/SVE2/whilehi-diagnostics.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/SVE2/whilehi-diagnostics.s?rev=362215&view=auto
==============================================================================
--- llvm/trunk/test/MC/AArch64/SVE2/whilehi-diagnostics.s (added)
+++ llvm/trunk/test/MC/AArch64/SVE2/whilehi-diagnostics.s Fri May 31 02:13:55 2019
@@ -0,0 +1,29 @@
+// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2  2>&1 < %s| FileCheck %s
+
+
+// ------------------------------------------------------------------------- //
+// Invalid scalar registers
+
+whilehi  p15.b, xzr, sp
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// CHECK-NEXT: whilehi  p15.b, xzr, sp
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+whilehi  p15.b, xzr, w0
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// CHECK-NEXT: whilehi  p15.b, xzr, w0
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+whilehi  p15.b, w0, x0
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// CHECK-NEXT: whilehi  p15.b, w0, x0
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+
+// ------------------------------------------------------------------------- //
+// Invalid predicate
+
+whilehi  p15, w0, w0
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid predicate register.
+// CHECK-NEXT: whilehi  p15, w0, w0
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:

Added: llvm/trunk/test/MC/AArch64/SVE2/whilehi.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/SVE2/whilehi.s?rev=362215&view=auto
==============================================================================
--- llvm/trunk/test/MC/AArch64/SVE2/whilehi.s (added)
+++ llvm/trunk/test/MC/AArch64/SVE2/whilehi.s Fri May 31 02:13:55 2019
@@ -0,0 +1,68 @@
+// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %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=+sve2 < %s \
+// RUN:        | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
+// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
+// RUN:        | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
+
+whilehi  p15.b, xzr, x0
+// CHECK-INST: whilehi	p15.b, xzr, x0
+// CHECK-ENCODING: [0xff,0x1b,0x20,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: ff 1b 20 25 <unknown>
+
+whilehi  p15.b, x0, xzr
+// CHECK-INST: whilehi	p15.b, x0, xzr
+// CHECK-ENCODING: [0x1f,0x18,0x3f,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: 1f 18 3f 25 <unknown>
+
+whilehi  p15.b, wzr, w0
+// CHECK-INST: whilehi	p15.b, wzr, w0
+// CHECK-ENCODING: [0xff,0x0b,0x20,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: ff 0b 20 25 <unknown>
+
+whilehi  p15.b, w0, wzr
+// CHECK-INST: whilehi	p15.b, w0, wzr
+// CHECK-ENCODING: [0x1f,0x08,0x3f,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: 1f 08 3f 25 <unknown>
+
+whilehi  p15.h, x0, xzr
+// CHECK-INST: whilehi	p15.h, x0, xzr
+// CHECK-ENCODING: [0x1f,0x18,0x7f,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: 1f 18 7f 25 <unknown>
+
+whilehi  p15.h, w0, wzr
+// CHECK-INST: whilehi	p15.h, w0, wzr
+// CHECK-ENCODING: [0x1f,0x08,0x7f,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: 1f 08 7f 25 <unknown>
+
+whilehi  p15.s, x0, xzr
+// CHECK-INST: whilehi	p15.s, x0, xzr
+// CHECK-ENCODING: [0x1f,0x18,0xbf,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: 1f 18 bf 25 <unknown>
+
+whilehi  p15.s, w0, wzr
+// CHECK-INST: whilehi	p15.s, w0, wzr
+// CHECK-ENCODING: [0x1f,0x08,0xbf,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: 1f 08 bf 25 <unknown>
+
+whilehi  p15.d, w0, wzr
+// CHECK-INST: whilehi	p15.d, w0, wzr
+// CHECK-ENCODING: [0x1f,0x08,0xff,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: 1f 08 ff 25 <unknown>
+
+whilehi  p15.d, x0, xzr
+// CHECK-INST: whilehi	p15.d, x0, xzr
+// CHECK-ENCODING: [0x1f,0x18,0xff,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: 1f 18 ff 25 <unknown>

Added: llvm/trunk/test/MC/AArch64/SVE2/whilehs-diagnostics.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/SVE2/whilehs-diagnostics.s?rev=362215&view=auto
==============================================================================
--- llvm/trunk/test/MC/AArch64/SVE2/whilehs-diagnostics.s (added)
+++ llvm/trunk/test/MC/AArch64/SVE2/whilehs-diagnostics.s Fri May 31 02:13:55 2019
@@ -0,0 +1,29 @@
+// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2  2>&1 < %s| FileCheck %s
+
+
+// ------------------------------------------------------------------------- //
+// Invalid scalar registers
+
+whilehs  p15.b, xzr, sp
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// CHECK-NEXT: whilehs  p15.b, xzr, sp
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+whilehs  p15.b, xzr, w0
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// CHECK-NEXT: whilehs  p15.b, xzr, w0
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+whilehs  p15.b, w0, x0
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// CHECK-NEXT: whilehs  p15.b, w0, x0
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+
+// ------------------------------------------------------------------------- //
+// Invalid predicate
+
+whilehs  p15, w0, w0
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid predicate register.
+// CHECK-NEXT: whilehs  p15, w0, w0
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:

Added: llvm/trunk/test/MC/AArch64/SVE2/whilehs.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/SVE2/whilehs.s?rev=362215&view=auto
==============================================================================
--- llvm/trunk/test/MC/AArch64/SVE2/whilehs.s (added)
+++ llvm/trunk/test/MC/AArch64/SVE2/whilehs.s Fri May 31 02:13:55 2019
@@ -0,0 +1,68 @@
+// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %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=+sve2 < %s \
+// RUN:        | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
+// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
+// RUN:        | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
+
+whilehs  p15.b, xzr, x0
+// CHECK-INST: whilehs	p15.b, xzr, x0
+// CHECK-ENCODING: [0xef,0x1b,0x20,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: ef 1b 20 25 <unknown>
+
+whilehs  p15.b, x0, xzr
+// CHECK-INST: whilehs	p15.b, x0, xzr
+// CHECK-ENCODING: [0x0f,0x18,0x3f,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: 0f 18 3f 25 <unknown>
+
+whilehs  p15.b, wzr, w0
+// CHECK-INST: whilehs	p15.b, wzr, w0
+// CHECK-ENCODING: [0xef,0x0b,0x20,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: ef 0b 20 25 <unknown>
+
+whilehs  p15.b, w0, wzr
+// CHECK-INST: whilehs	p15.b, w0, wzr
+// CHECK-ENCODING: [0x0f,0x08,0x3f,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: 0f 08 3f 25 <unknown>
+
+whilehs  p15.h, x0, xzr
+// CHECK-INST: whilehs	p15.h, x0, xzr
+// CHECK-ENCODING: [0x0f,0x18,0x7f,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: 0f 18 7f 25 <unknown>
+
+whilehs  p15.h, w0, wzr
+// CHECK-INST: whilehs	p15.h, w0, wzr
+// CHECK-ENCODING: [0x0f,0x08,0x7f,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: 0f 08 7f 25 <unknown>
+
+whilehs  p15.s, x0, xzr
+// CHECK-INST: whilehs	p15.s, x0, xzr
+// CHECK-ENCODING: [0x0f,0x18,0xbf,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: 0f 18 bf 25 <unknown>
+
+whilehs  p15.s, w0, wzr
+// CHECK-INST: whilehs	p15.s, w0, wzr
+// CHECK-ENCODING: [0x0f,0x08,0xbf,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: 0f 08 bf 25 <unknown>
+
+whilehs  p15.d, w0, wzr
+// CHECK-INST: whilehs	p15.d, w0, wzr
+// CHECK-ENCODING: [0x0f,0x08,0xff,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: 0f 08 ff 25 <unknown>
+
+whilehs  p15.d, x0, xzr
+// CHECK-INST: whilehs	p15.d, x0, xzr
+// CHECK-ENCODING: [0x0f,0x18,0xff,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: 0f 18 ff 25 <unknown>

Added: llvm/trunk/test/MC/AArch64/SVE2/whilerw-diagnostics.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/SVE2/whilerw-diagnostics.s?rev=362215&view=auto
==============================================================================
--- llvm/trunk/test/MC/AArch64/SVE2/whilerw-diagnostics.s (added)
+++ llvm/trunk/test/MC/AArch64/SVE2/whilerw-diagnostics.s Fri May 31 02:13:55 2019
@@ -0,0 +1,25 @@
+// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2  2>&1 < %s| FileCheck %s
+
+
+// ------------------------------------------------------------------------- //
+// Invalid scalar registers
+
+whilerw  p15.b, xzr, sp
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// CHECK-NEXT: whilerw  p15.b, xzr, sp
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+whilerw  p15.b, xzr, w0
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// CHECK-NEXT: whilerw  p15.b, xzr, w0
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+whilerw  p15.b, w0, x0
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// CHECK-NEXT: whilerw  p15.b, w0, x0
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+whilerw  p15.b, w0, w0
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// CHECK-NEXT: whilerw  p15.b, w0, w0
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:

Added: llvm/trunk/test/MC/AArch64/SVE2/whilerw.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/SVE2/whilerw.s?rev=362215&view=auto
==============================================================================
--- llvm/trunk/test/MC/AArch64/SVE2/whilerw.s (added)
+++ llvm/trunk/test/MC/AArch64/SVE2/whilerw.s Fri May 31 02:13:55 2019
@@ -0,0 +1,32 @@
+// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %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=+sve2 < %s \
+// RUN:        | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
+// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
+// RUN:        | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
+
+whilerw  p15.b, x30, x30
+// CHECK-INST: whilerw  p15.b, x30, x30
+// CHECK-ENCODING: [0xdf,0x33,0x3e,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: df 33 3e 25 <unknown>
+
+whilerw  p15.h, x30, x30
+// CHECK-INST: whilerw  p15.h, x30, x30
+// CHECK-ENCODING: [0xdf,0x33,0x7e,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: df 33 7e 25 <unknown>
+
+whilerw  p15.s, x30, x30
+// CHECK-INST: whilerw  p15.s, x30, x30
+// CHECK-ENCODING: [0xdf,0x33,0xbe,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: df 33 be 25 <unknown>
+
+whilerw  p15.d, x30, x30
+// CHECK-INST: whilerw  p15.d, x30, x30
+// CHECK-ENCODING: [0xdf,0x33,0xfe,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: df 33 fe 25 <unknown>

Added: llvm/trunk/test/MC/AArch64/SVE2/whilewr-diagnostics.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/SVE2/whilewr-diagnostics.s?rev=362215&view=auto
==============================================================================
--- llvm/trunk/test/MC/AArch64/SVE2/whilewr-diagnostics.s (added)
+++ llvm/trunk/test/MC/AArch64/SVE2/whilewr-diagnostics.s Fri May 31 02:13:55 2019
@@ -0,0 +1,25 @@
+// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2  2>&1 < %s| FileCheck %s
+
+
+// ------------------------------------------------------------------------- //
+// Invalid scalar registers
+
+whilewr  p15.b, xzr, sp
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// CHECK-NEXT: whilewr  p15.b, xzr, sp
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+whilewr  p15.b, xzr, w0
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// CHECK-NEXT: whilewr  p15.b, xzr, w0
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+whilewr  p15.b, w0, x0
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// CHECK-NEXT: whilewr  p15.b, w0, x0
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+whilewr  p15.b, w0, w0
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// CHECK-NEXT: whilewr  p15.b, w0, w0
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:

Added: llvm/trunk/test/MC/AArch64/SVE2/whilewr.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/SVE2/whilewr.s?rev=362215&view=auto
==============================================================================
--- llvm/trunk/test/MC/AArch64/SVE2/whilewr.s (added)
+++ llvm/trunk/test/MC/AArch64/SVE2/whilewr.s Fri May 31 02:13:55 2019
@@ -0,0 +1,32 @@
+// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %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=+sve2 < %s \
+// RUN:        | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
+// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
+// RUN:        | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
+
+whilewr  p15.b, x30, x30
+// CHECK-INST: whilewr  p15.b, x30, x30
+// CHECK-ENCODING: [0xcf,0x33,0x3e,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: cf 33 3e 25 <unknown>
+
+whilewr  p15.h, x30, x30
+// CHECK-INST: whilewr  p15.h, x30, x30
+// CHECK-ENCODING: [0xcf,0x33,0x7e,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: cf 33 7e 25 <unknown>
+
+whilewr  p15.s, x30, x30
+// CHECK-INST: whilewr  p15.s, x30, x30
+// CHECK-ENCODING: [0xcf,0x33,0xbe,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: cf 33 be 25 <unknown>
+
+whilewr  p15.d, x30, x30
+// CHECK-INST: whilewr  p15.d, x30, x30
+// CHECK-ENCODING: [0xcf,0x33,0xfe,0x25]
+// CHECK-ERROR: instruction requires: sve2
+// CHECK-UNKNOWN: cf 33 fe 25 <unknown>




More information about the llvm-commits mailing list