Skip to content

Commit

Permalink
[AArch64][SME] Support ptrue(s) in streaming mode
Browse files Browse the repository at this point in the history
The ptrue and ptrues instructions are legal in streaming mode, missed in
D106272.

The reference can be found here:
https://developer.arm.com/documentation/ddi0602/2021-06/SVE-Instructions

Reviewed By: paulwalker-arm

Differential Revision: https://reviews.llvm.org/D107807
  • Loading branch information
c-rhodes committed Aug 11, 2021
1 parent 7bbbf29 commit 1fe0e6a
Show file tree
Hide file tree
Showing 4 changed files with 86 additions and 86 deletions.
2 changes: 1 addition & 1 deletion llvm/lib/Target/AArch64/SVEInstrFormats.td
Expand Up @@ -321,7 +321,7 @@ multiclass sve_int_ptrue<bits<3> opc, string asm, SDPatternOperator op> {
def SDT_AArch64PTrue : SDTypeProfile<1, 1, [SDTCisVec<0>, SDTCisVT<1, i32>]>;
def AArch64ptrue : SDNode<"AArch64ISD::PTRUE", SDT_AArch64PTrue>;

let Predicates = [HasSVE] in {
let Predicates = [HasSVEorStreamingSVE] in {
defm PTRUE : sve_int_ptrue<0b000, "ptrue", AArch64ptrue>;
defm PTRUES : sve_int_ptrue<0b001, "ptrues", null_frag>;
}
Expand Down
Expand Up @@ -3,5 +3,5 @@
.arch_extension nosve

ptrue p0.b, pow2
// CHECK: error: instruction requires: sve
// CHECK: error: instruction requires: streaming-sve or sve
// CHECK-NEXT: ptrue p0.b, pow2
84 changes: 42 additions & 42 deletions llvm/test/MC/AArch64/SVE/ptrue.s
@@ -1,9 +1,9 @@
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve < %s \
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+streaming-sve < %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: not llvm-mc -triple=aarch64 -show-encoding -mattr=+streaming-sve < %s 2>&1 \
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve < %s \
// RUN: | llvm-objdump -d --mattr=+sve - | FileCheck %s --check-prefix=CHECK-INST
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve < %s \
Expand All @@ -16,25 +16,25 @@
ptrue p0.b, pow2
// CHECK-INST: ptrue p0.b, pow2
// CHECK-ENCODING: [0x00,0xe0,0x18,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: 00 e0 18 25 <unknown>

ptrue p0.h, pow2
// CHECK-INST: ptrue p0.h, pow2
// CHECK-ENCODING: [0x00,0xe0,0x58,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: 00 e0 58 25 <unknown>

ptrue p0.s, pow2
// CHECK-INST: ptrue p0.s, pow2
// CHECK-ENCODING: [0x00,0xe0,0x98,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: 00 e0 98 25 <unknown>

ptrue p0.d, pow2
// CHECK-INST: ptrue p0.d, pow2
// CHECK-ENCODING: [0x00,0xe0,0xd8,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: 00 e0 d8 25 <unknown>

// ---------------------------------------------------------------------------//
Expand All @@ -44,25 +44,25 @@ ptrue p0.d, pow2
ptrue p15.b
// CHECK-INST: ptrue p15.b
// CHECK-ENCODING: [0xef,0xe3,0x18,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: ef e3 18 25 <unknown>

ptrue p15.h
// CHECK-INST: ptrue p15.h
// CHECK-ENCODING: [0xef,0xe3,0x58,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: ef e3 58 25 <unknown>

ptrue p15.s
// CHECK-INST: ptrue p15.s
// CHECK-ENCODING: [0xef,0xe3,0x98,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: ef e3 98 25 <unknown>

ptrue p15.d
// CHECK-INST: ptrue p15.d
// CHECK-ENCODING: [0xef,0xe3,0xd8,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: ef e3 d8 25 <unknown>

// ---------------------------------------------------------------------------//
Expand All @@ -72,103 +72,103 @@ ptrue p15.d
ptrue p7.s, #1
// CHECK-INST: ptrue p7.s, vl1
// CHECK-ENCODING: [0x27,0xe0,0x98,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: 27 e0 98 25 <unknown>

ptrue p7.s, vl1
// CHECK-INST: ptrue p7.s, vl1
// CHECK-ENCODING: [0x27,0xe0,0x98,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: 27 e0 98 25 <unknown>

ptrue p7.s, vl2
// CHECK-INST: ptrue p7.s, vl2
// CHECK-ENCODING: [0x47,0xe0,0x98,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: 47 e0 98 25 <unknown>

ptrue p7.s, vl3
// CHECK-INST: ptrue p7.s, vl3
// CHECK-ENCODING: [0x67,0xe0,0x98,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: 67 e0 98 25 <unknown>

ptrue p7.s, vl4
// CHECK-INST: ptrue p7.s, vl4
// CHECK-ENCODING: [0x87,0xe0,0x98,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: 87 e0 98 25 <unknown>

ptrue p7.s, vl5
// CHECK-INST: ptrue p7.s, vl5
// CHECK-ENCODING: [0xa7,0xe0,0x98,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: a7 e0 98 25 <unknown>

ptrue p7.s, vl6
// CHECK-INST: ptrue p7.s, vl6
// CHECK-ENCODING: [0xc7,0xe0,0x98,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: c7 e0 98 25 <unknown>

ptrue p7.s, vl7
// CHECK-INST: ptrue p7.s, vl7
// CHECK-ENCODING: [0xe7,0xe0,0x98,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: e7 e0 98 25 <unknown>

ptrue p7.s, vl8
// CHECK-INST: ptrue p7.s, vl8
// CHECK-ENCODING: [0x07,0xe1,0x98,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: 07 e1 98 25 <unknown>

ptrue p7.s, vl16
// CHECK-INST: ptrue p7.s, vl16
// CHECK-ENCODING: [0x27,0xe1,0x98,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: 27 e1 98 25 <unknown>

ptrue p7.s, vl32
// CHECK-INST: ptrue p7.s, vl32
// CHECK-ENCODING: [0x47,0xe1,0x98,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: 47 e1 98 25 <unknown>

ptrue p7.s, vl64
// CHECK-INST: ptrue p7.s, vl64
// CHECK-ENCODING: [0x67,0xe1,0x98,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: 67 e1 98 25 <unknown>

ptrue p7.s, vl128
// CHECK-INST: ptrue p7.s, vl128
// CHECK-ENCODING: [0x87,0xe1,0x98,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: 87 e1 98 25 <unknown>

ptrue p7.s, vl256
// CHECK-INST: ptrue p7.s, vl256
// CHECK-ENCODING: [0xa7,0xe1,0x98,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: a7 e1 98 25 <unknown>

ptrue p7.s, mul4
// CHECK-INST: ptrue p7.s, mul4
// CHECK-ENCODING: [0xa7,0xe3,0x98,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: a7 e3 98 25 <unknown>

ptrue p7.s, mul3
// CHECK-INST: ptrue p7.s, mul3
// CHECK-ENCODING: [0xc7,0xe3,0x98,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: c7 e3 98 25 <unknown>

ptrue p7.s, all
// CHECK-INST: ptrue p7.s
// CHECK-ENCODING: [0xe7,0xe3,0x98,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: e7 e3 98 25 <unknown>

// ---------------------------------------------------------------------------//
Expand All @@ -178,89 +178,89 @@ ptrue p7.s, all
ptrue p7.s, #14
// CHECK-INST: ptrue p7.s, #14
// CHECK-ENCODING: [0xc7,0xe1,0x98,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: c7 e1 98 25 <unknown>

ptrue p7.s, #15
// CHECK-INST: ptrue p7.s, #15
// CHECK-ENCODING: [0xe7,0xe1,0x98,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: e7 e1 98 25 <unknown>

ptrue p7.s, #16
// CHECK-INST: ptrue p7.s, #16
// CHECK-ENCODING: [0x07,0xe2,0x98,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: 07 e2 98 25 <unknown>

ptrue p7.s, #17
// CHECK-INST: ptrue p7.s, #17
// CHECK-ENCODING: [0x27,0xe2,0x98,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: 27 e2 98 25 <unknown>

ptrue p7.s, #18
// CHECK-INST: ptrue p7.s, #18
// CHECK-ENCODING: [0x47,0xe2,0x98,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: 47 e2 98 25 <unknown>

ptrue p7.s, #19
// CHECK-INST: ptrue p7.s, #19
// CHECK-ENCODING: [0x67,0xe2,0x98,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: 67 e2 98 25 <unknown>

ptrue p7.s, #20
// CHECK-INST: ptrue p7.s, #20
// CHECK-ENCODING: [0x87,0xe2,0x98,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: 87 e2 98 25 <unknown>

ptrue p7.s, #21
// CHECK-INST: ptrue p7.s, #21
// CHECK-ENCODING: [0xa7,0xe2,0x98,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: a7 e2 98 25 <unknown>

ptrue p7.s, #22
// CHECK-INST: ptrue p7.s, #22
// CHECK-ENCODING: [0xc7,0xe2,0x98,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: c7 e2 98 25 <unknown>

ptrue p7.s, #23
// CHECK-INST: ptrue p7.s, #23
// CHECK-ENCODING: [0xe7,0xe2,0x98,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: e7 e2 98 25 <unknown>

ptrue p7.s, #24
// CHECK-INST: ptrue p7.s, #24
// CHECK-ENCODING: [0x07,0xe3,0x98,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: 07 e3 98 25 <unknown>

ptrue p7.s, #25
// CHECK-INST: ptrue p7.s, #25
// CHECK-ENCODING: [0x27,0xe3,0x98,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: 27 e3 98 25 <unknown>

ptrue p7.s, #26
// CHECK-INST: ptrue p7.s, #26
// CHECK-ENCODING: [0x47,0xe3,0x98,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: 47 e3 98 25 <unknown>

ptrue p7.s, #27
// CHECK-INST: ptrue p7.s, #27
// CHECK-ENCODING: [0x67,0xe3,0x98,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: 67 e3 98 25 <unknown>

ptrue p7.s, #28
// CHECK-INST: ptrue p7.s, #28
// CHECK-ENCODING: [0x87,0xe3,0x98,0x25]
// CHECK-ERROR: instruction requires: sve
// CHECK-ERROR: instruction requires: streaming-sve or sve
// CHECK-UNKNOWN: 87 e3 98 25 <unknown>

0 comments on commit 1fe0e6a

Please sign in to comment.