[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