-
Notifications
You must be signed in to change notification settings - Fork 11.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[AArch64][SVE] Asm: Support for contiguous PRF prefetch instructions.
Reviewers: rengolin, fhahn, samparker, SjoerdMeijer, javed.absar Reviewed By: SjoerdMeijer Differential Revision: https://reviews.llvm.org/D46682 llvm-svn: 332433
- Loading branch information
1 parent
2cafed7
commit 67f9154
Showing
13 changed files
with
1,106 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve 2>&1 < %s| FileCheck %s | ||
|
||
|
||
// --------------------------------------------------------------------------// | ||
// invalid/missing predicate operation specifier | ||
|
||
prfb p0, [x0] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: prefetch hint expected | ||
// CHECK-NEXT: prfb p0, [x0] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
prfb #16, p0, [x0] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: prefetch operand out of range, [0,15] expected | ||
// CHECK-NEXT: prfb #16, p0, [x0] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
prfb plil1keep, p0, [x0] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: prefetch hint expected | ||
// CHECK-NEXT: prfb plil1keep, p0, [x0] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
prfb #pldl1keep, p0, [x0] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate value expected for prefetch operand | ||
// CHECK-NEXT: prfb #pldl1keep, p0, [x0] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
|
||
// --------------------------------------------------------------------------// | ||
// invalid addressing modes | ||
|
||
prfb #0, p0, [x0, #-33, mul vl] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be an integer in range [-32, 31]. | ||
// CHECK-NEXT: prfb #0, p0, [x0, #-33, mul vl] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
prfb #0, p0, [x0, #32, mul vl] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be an integer in range [-32, 31]. | ||
// CHECK-NEXT: prfb #0, p0, [x0, #32, mul vl] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
prfb #0, p0, [x0, w0] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: register must be x0..x30 without shift | ||
// CHECK-NEXT: prfb #0, p0, [x0, w0] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
prfb #0, p0, [x0, x0, uxtw] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: register must be x0..x30 without shift | ||
// CHECK-NEXT: prfb #0, p0, [x0, x0, uxtw] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
prfb #0, p0, [x0, x0, lsl #2] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: register must be x0..x30 without shift | ||
// CHECK-NEXT: prfb #0, p0, [x0, x0, lsl #2] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
|
||
// --------------------------------------------------------------------------// | ||
// invalid predicate | ||
|
||
prfb #0, p8, [x0] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: restricted predicate has range [0, 7]. | ||
// CHECK-NEXT: prfb #0, p8, [x0] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,194 @@ | ||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+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: 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 \ | ||
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN | ||
|
||
// --------------------------------------------------------------------------// | ||
// Test all possible prefetch operation specifiers | ||
|
||
prfb #0, p0, [x0] | ||
// CHECK-INST: prfb pldl1keep, p0, [x0] | ||
// CHECK-ENCODING: [0x00,0x00,0xc0,0x85] | ||
// CHECK-ERROR: instruction requires: sve | ||
// CHECK-UNKNOWN: 00 00 c0 85 <unknown> | ||
|
||
prfb pldl1keep, p0, [x0] | ||
// CHECK-INST: prfb pldl1keep, p0, [x0] | ||
// CHECK-ENCODING: [0x00,0x00,0xc0,0x85] | ||
// CHECK-ERROR: instruction requires: sve | ||
// CHECK-UNKNOWN: 00 00 c0 85 <unknown> | ||
|
||
prfb #1, p0, [x0] | ||
// CHECK-INST: prfb pldl1strm, p0, [x0] | ||
// CHECK-ENCODING: [0x01,0x00,0xc0,0x85] | ||
// CHECK-ERROR: instruction requires: sve | ||
// CHECK-UNKNOWN: 01 00 c0 85 <unknown> | ||
|
||
prfb pldl1strm, p0, [x0] | ||
// CHECK-INST: prfb pldl1strm, p0, [x0] | ||
// CHECK-ENCODING: [0x01,0x00,0xc0,0x85] | ||
// CHECK-ERROR: instruction requires: sve | ||
// CHECK-UNKNOWN: 01 00 c0 85 <unknown> | ||
|
||
prfb #2, p0, [x0] | ||
// CHECK-INST: prfb pldl2keep, p0, [x0] | ||
// CHECK-ENCODING: [0x02,0x00,0xc0,0x85] | ||
// CHECK-ERROR: instruction requires: sve | ||
// CHECK-UNKNOWN: 02 00 c0 85 <unknown> | ||
|
||
prfb pldl2keep, p0, [x0] | ||
// CHECK-INST: prfb pldl2keep, p0, [x0] | ||
// CHECK-ENCODING: [0x02,0x00,0xc0,0x85] | ||
// CHECK-ERROR: instruction requires: sve | ||
// CHECK-UNKNOWN: 02 00 c0 85 <unknown> | ||
|
||
prfb #3, p0, [x0] | ||
// CHECK-INST: prfb pldl2strm, p0, [x0] | ||
// CHECK-ENCODING: [0x03,0x00,0xc0,0x85] | ||
// CHECK-ERROR: instruction requires: sve | ||
// CHECK-UNKNOWN: 03 00 c0 85 <unknown> | ||
|
||
prfb pldl2strm, p0, [x0] | ||
// CHECK-INST: prfb pldl2strm, p0, [x0] | ||
// CHECK-ENCODING: [0x03,0x00,0xc0,0x85] | ||
// CHECK-ERROR: instruction requires: sve | ||
// CHECK-UNKNOWN: 03 00 c0 85 <unknown> | ||
|
||
prfb #4, p0, [x0] | ||
// CHECK-INST: prfb pldl3keep, p0, [x0] | ||
// CHECK-ENCODING: [0x04,0x00,0xc0,0x85] | ||
// CHECK-ERROR: instruction requires: sve | ||
// CHECK-UNKNOWN: 04 00 c0 85 <unknown> | ||
|
||
prfb pldl3keep, p0, [x0] | ||
// CHECK-INST: prfb pldl3keep, p0, [x0] | ||
// CHECK-ENCODING: [0x04,0x00,0xc0,0x85] | ||
// CHECK-ERROR: instruction requires: sve | ||
// CHECK-UNKNOWN: 04 00 c0 85 <unknown> | ||
|
||
prfb #5, p0, [x0] | ||
// CHECK-INST: prfb pldl3strm, p0, [x0] | ||
// CHECK-ENCODING: [0x05,0x00,0xc0,0x85] | ||
// CHECK-ERROR: instruction requires: sve | ||
// CHECK-UNKNOWN: 05 00 c0 85 <unknown> | ||
|
||
prfb pldl3strm, p0, [x0] | ||
// CHECK-INST: prfb pldl3strm, p0, [x0] | ||
// CHECK-ENCODING: [0x05,0x00,0xc0,0x85] | ||
// CHECK-ERROR: instruction requires: sve | ||
// CHECK-UNKNOWN: 05 00 c0 85 <unknown> | ||
|
||
prfb #6, p0, [x0] | ||
// CHECK-INST: prfb #6, p0, [x0] | ||
// CHECK-ENCODING: [0x06,0x00,0xc0,0x85] | ||
// CHECK-ERROR: instruction requires: sve | ||
// CHECK-UNKNOWN: 06 00 c0 85 <unknown> | ||
|
||
prfb #7, p0, [x0] | ||
// CHECK-INST: prfb #7, p0, [x0] | ||
// CHECK-ENCODING: [0x07,0x00,0xc0,0x85] | ||
// CHECK-ERROR: instruction requires: sve | ||
// CHECK-UNKNOWN: 07 00 c0 85 <unknown> | ||
|
||
prfb #8, p0, [x0] | ||
// CHECK-INST: prfb pstl1keep, p0, [x0] | ||
// CHECK-ENCODING: [0x08,0x00,0xc0,0x85] | ||
// CHECK-ERROR: instruction requires: sve | ||
// CHECK-UNKNOWN: 08 00 c0 85 <unknown> | ||
|
||
prfb pstl1keep, p0, [x0] | ||
// CHECK-INST: prfb pstl1keep, p0, [x0] | ||
// CHECK-ENCODING: [0x08,0x00,0xc0,0x85] | ||
// CHECK-ERROR: instruction requires: sve | ||
// CHECK-UNKNOWN: 08 00 c0 85 <unknown> | ||
|
||
prfb #9, p0, [x0] | ||
// CHECK-INST: prfb pstl1strm, p0, [x0] | ||
// CHECK-ENCODING: [0x09,0x00,0xc0,0x85] | ||
// CHECK-ERROR: instruction requires: sve | ||
// CHECK-UNKNOWN: 09 00 c0 85 <unknown> | ||
|
||
prfb pstl1strm, p0, [x0] | ||
// CHECK-INST: prfb pstl1strm, p0, [x0] | ||
// CHECK-ENCODING: [0x09,0x00,0xc0,0x85] | ||
// CHECK-ERROR: instruction requires: sve | ||
// CHECK-UNKNOWN: 09 00 c0 85 <unknown> | ||
|
||
prfb #10, p0, [x0] | ||
// CHECK-INST: prfb pstl2keep, p0, [x0] | ||
// CHECK-ENCODING: [0x0a,0x00,0xc0,0x85] | ||
// CHECK-ERROR: instruction requires: sve | ||
// CHECK-UNKNOWN: 0a 00 c0 85 <unknown> | ||
|
||
prfb pstl2keep, p0, [x0] | ||
// CHECK-INST: prfb pstl2keep, p0, [x0] | ||
// CHECK-ENCODING: [0x0a,0x00,0xc0,0x85] | ||
// CHECK-ERROR: instruction requires: sve | ||
// CHECK-UNKNOWN: 0a 00 c0 85 <unknown> | ||
|
||
prfb #11, p0, [x0] | ||
// CHECK-INST: prfb pstl2strm, p0, [x0] | ||
// CHECK-ENCODING: [0x0b,0x00,0xc0,0x85] | ||
// CHECK-ERROR: instruction requires: sve | ||
// CHECK-UNKNOWN: 0b 00 c0 85 <unknown> | ||
|
||
prfb pstl2strm, p0, [x0] | ||
// CHECK-INST: prfb pstl2strm, p0, [x0] | ||
// CHECK-ENCODING: [0x0b,0x00,0xc0,0x85] | ||
// CHECK-ERROR: instruction requires: sve | ||
// CHECK-UNKNOWN: 0b 00 c0 85 <unknown> | ||
|
||
prfb #12, p0, [x0] | ||
// CHECK-INST: prfb pstl3keep, p0, [x0] | ||
// CHECK-ENCODING: [0x0c,0x00,0xc0,0x85] | ||
// CHECK-ERROR: instruction requires: sve | ||
// CHECK-UNKNOWN: 0c 00 c0 85 <unknown> | ||
|
||
prfb pstl3keep, p0, [x0] | ||
// CHECK-INST: prfb pstl3keep, p0, [x0] | ||
// CHECK-ENCODING: [0x0c,0x00,0xc0,0x85] | ||
// CHECK-ERROR: instruction requires: sve | ||
// CHECK-UNKNOWN: 0c 00 c0 85 <unknown> | ||
|
||
prfb #13, p0, [x0] | ||
// CHECK-INST: prfb pstl3strm, p0, [x0] | ||
// CHECK-ENCODING: [0x0d,0x00,0xc0,0x85] | ||
// CHECK-ERROR: instruction requires: sve | ||
// CHECK-UNKNOWN: 0d 00 c0 85 <unknown> | ||
|
||
prfb pstl3strm, p0, [x0] | ||
// CHECK-INST: prfb pstl3strm, p0, [x0] | ||
// CHECK-ENCODING: [0x0d,0x00,0xc0,0x85] | ||
// CHECK-ERROR: instruction requires: sve | ||
// CHECK-UNKNOWN: 0d 00 c0 85 <unknown> | ||
|
||
prfb #14, p0, [x0] | ||
// CHECK-INST: prfb #14, p0, [x0] | ||
// CHECK-ENCODING: [0x0e,0x00,0xc0,0x85] | ||
// CHECK-ERROR: instruction requires: sve | ||
// CHECK-UNKNOWN: 0e 00 c0 85 <unknown> | ||
|
||
prfb #15, p0, [x0] | ||
// CHECK-INST: prfb #15, p0, [x0] | ||
// CHECK-ENCODING: [0x0f,0x00,0xc0,0x85] | ||
// CHECK-ERROR: instruction requires: sve | ||
// CHECK-UNKNOWN: 0f 00 c0 85 <unknown> | ||
|
||
// --------------------------------------------------------------------------// | ||
// Test addressing modes | ||
|
||
prfb #1, p0, [x0, #-32, mul vl] | ||
// CHECK-INST: prfb pldl1strm, p0, [x0, #-32, mul vl] | ||
// CHECK-ENCODING: [0x01,0x00,0xe0,0x85] | ||
// CHECK-ERROR: instruction requires: sve | ||
// CHECK-UNKNOWN: 01 00 e0 85 <unknown> | ||
|
||
prfb #1, p0, [x0, #31, mul vl] | ||
// CHECK-INST: prfb pldl1strm, p0, [x0, #31, mul vl] | ||
// CHECK-ENCODING: [0x01,0x00,0xdf,0x85] | ||
// CHECK-ERROR: instruction requires: sve | ||
// CHECK-UNKNOWN: 01 00 df 85 <unknown> |
Oops, something went wrong.