[llvm] r357677 - [AArch64][AsmParser] Fix .arch_extension directive parsing
Sander de Smalen via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 4 02:11:17 PDT 2019
Author: s.desmalen
Date: Thu Apr 4 02:11:17 2019
New Revision: 357677
URL: http://llvm.org/viewvc/llvm-project?rev=357677&view=rev
Log:
[AArch64][AsmParser] Fix .arch_extension directive parsing
This patch fixes .arch_extension directive parsing to handle a wider
range of architecture extension options. The existing parser was parsing
extensions as an identifier which breaks for extensions containing a
"-", such as the "tlb-rmi" extension.
The extension is now parsed as a string. This is consistent with the
extension parsing in the .arch and .cpu directive parsing.
Patch by Cullen Rhodes (c-rhodes)
Reviewed By: SjoerdMeijer
Differential Revision: https://reviews.llvm.org/D60118
Added:
llvm/trunk/test/MC/AArch64/SVE/directive-arch_extension-negative.s
llvm/trunk/test/MC/AArch64/SVE/directive-arch_extension.s
llvm/trunk/test/MC/AArch64/directive-arch_extension-negative.s
llvm/trunk/test/MC/AArch64/directive-arch_extension.s
Removed:
llvm/trunk/test/MC/AArch64/directive-arch_extension-nosimd.s
llvm/trunk/test/MC/AArch64/directive-arch_extension-simd.s
Modified:
llvm/trunk/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
Modified: llvm/trunk/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp?rev=357677&r1=357676&r2=357677&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp (original)
+++ llvm/trunk/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp Thu Apr 4 02:11:17 2019
@@ -5153,15 +5153,9 @@ bool AArch64AsmParser::parseDirectiveArc
/// parseDirectiveArchExtension
/// ::= .arch_extension [no]feature
bool AArch64AsmParser::parseDirectiveArchExtension(SMLoc L) {
- MCAsmParser &Parser = getParser();
+ SMLoc ExtLoc = getLoc();
- if (getLexer().isNot(AsmToken::Identifier))
- return Error(getLexer().getLoc(), "expected architecture extension name");
-
- const AsmToken &Tok = Parser.getTok();
- StringRef Name = Tok.getString();
- SMLoc ExtLoc = Tok.getLoc();
- Lex();
+ StringRef Name = getParser().parseStringToEndOfStatement().trim();
if (parseToken(AsmToken::EndOfStatement,
"unexpected token in '.arch_extension' directive"))
Added: llvm/trunk/test/MC/AArch64/SVE/directive-arch_extension-negative.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/SVE/directive-arch_extension-negative.s?rev=357677&view=auto
==============================================================================
--- llvm/trunk/test/MC/AArch64/SVE/directive-arch_extension-negative.s (added)
+++ llvm/trunk/test/MC/AArch64/SVE/directive-arch_extension-negative.s Thu Apr 4 02:11:17 2019
@@ -0,0 +1,7 @@
+// RUN: not llvm-mc -triple aarch64 -filetype asm -o - %s 2>&1 | FileCheck %s
+
+.arch_extension nosve
+
+ptrue p0.b, pow2
+// CHECK: error: instruction requires: sve
+// CHECK-NEXT: ptrue p0.b, pow2
Added: llvm/trunk/test/MC/AArch64/SVE/directive-arch_extension.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/SVE/directive-arch_extension.s?rev=357677&view=auto
==============================================================================
--- llvm/trunk/test/MC/AArch64/SVE/directive-arch_extension.s (added)
+++ llvm/trunk/test/MC/AArch64/SVE/directive-arch_extension.s Thu Apr 4 02:11:17 2019
@@ -0,0 +1,6 @@
+// RUN: llvm-mc -triple=aarch64 < %s | FileCheck %s
+
+.arch_extension sve
+
+ptrue p0.b, pow2
+// CHECK: ptrue p0.b, pow2
Added: llvm/trunk/test/MC/AArch64/directive-arch_extension-negative.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/directive-arch_extension-negative.s?rev=357677&view=auto
==============================================================================
--- llvm/trunk/test/MC/AArch64/directive-arch_extension-negative.s (added)
+++ llvm/trunk/test/MC/AArch64/directive-arch_extension-negative.s Thu Apr 4 02:11:17 2019
@@ -0,0 +1,80 @@
+// RUN: not llvm-mc -triple aarch64 -filetype asm -o - %s 2>&1 | FileCheck %s
+
+.arch_extension axp64
+// CHECK: error: unknown architectural extension: axp64
+// CHECK-NEXT: .arch_extension axp64
+
+.arch_extension nocrc
+crc32cx w0, w1, x3
+// CHECK: error: instruction requires: crc
+// CHECK-NEXT: crc32cx w0, w1, x3
+
+.arch_extension nosm4
+sm4e v2.4s, v15.4s
+// CHECK: error: instruction requires: sm4
+// CHECK-NEXT: sm4e v2.4s, v15.4s
+
+.arch_extension nosha3
+sha512h q0, q1, v2.2d
+// CHECK: error: instruction requires: sha3
+// CHECK-NEXT: sha512h q0, q1, v2.2d
+
+.arch_extension nosha2
+sha1h s0, s1
+// CHECK: error: instruction requires: sha2
+// CHECK-NEXT: sha1h s0, s1
+
+.arch_extension noaes
+aese v0.16b, v1.16b
+// CHECK: error: instruction requires: aes
+// CHECK-NEXT: aese v0.16b, v1.16b
+
+.arch_extension nofp
+fminnm d0, d0, d1
+// CHECK: error: instruction requires: fp
+// CHECK-NEXT: fminnm d0, d0, d1
+
+.arch_extension nosimd
+addp v0.4s, v0.4s, v0.4s
+// CHECK: error: instruction requires: neon
+// CHECK-NEXT: addp v0.4s, v0.4s, v0.4s
+
+.arch_extension noras
+esb
+// CHECK: error: instruction requires: ras
+// CHECK-NEXT: esb
+
+.arch_extension nolse
+casa w5, w7, [x20]
+// CHECK: error: instruction requires: lse
+// CHECK-NEXT: casa w5, w7, [x20]
+
+.arch_extension nopredres
+cfp rctx, x0
+// CHECK: error: CFPRCTX requires predres
+// CHECK-NEXT: cfp rctx, x0
+
+.arch_extension noccdp
+dc cvadp, x7
+// CHECK: error: DC CVADP requires ccdp
+// CHECK-NEXT: dc cvadp, x7
+
+.arch_extension nomte
+irg x0, x1
+// CHECK: error: instruction requires: mte
+// CHECK-NEXT: irg x0, x1
+
+.arch_extension notlb-rmi
+tlbi vmalle1os
+// CHECK: error: TLBI VMALLE1OS requires tlb-rmi
+// CHECK-NEXT: tlbi vmalle1os
+
+.arch_extension nopan-rwv
+at s1e1wp, x2
+// CHECK: error: AT S1E1WP requires pan-rwv
+// CHECK-NEXT: at s1e1wp, x2
+
+.arch_extension noccpp
+dc cvap, x7
+// CHECK: error: DC CVAP requires ccpp
+// CHECK-NEXT: dc cvap, x7
Removed: llvm/trunk/test/MC/AArch64/directive-arch_extension-nosimd.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/directive-arch_extension-nosimd.s?rev=357676&view=auto
==============================================================================
--- llvm/trunk/test/MC/AArch64/directive-arch_extension-nosimd.s (original)
+++ llvm/trunk/test/MC/AArch64/directive-arch_extension-nosimd.s (removed)
@@ -1,6 +0,0 @@
-// RUN: not llvm-mc -triple aarch64 -filetype asm -o - %s 2>&1 | FileCheck %s
-
- .arch_extension nosimd
-
- add v0.8b, v0.8b, v0.8b
-// CHECK: error: instruction requires: neon
Removed: llvm/trunk/test/MC/AArch64/directive-arch_extension-simd.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/directive-arch_extension-simd.s?rev=357676&view=auto
==============================================================================
--- llvm/trunk/test/MC/AArch64/directive-arch_extension-simd.s (original)
+++ llvm/trunk/test/MC/AArch64/directive-arch_extension-simd.s (removed)
@@ -1,6 +0,0 @@
-// RUN: llvm-mc -triple aarch64 -mattr=-simd -filetype asm -o - %s | FileCheck %s
-
- .arch_extension simd
-
- add v0.8b, v0.8b, v0.8b
-// CHECK: add v0.8b, v0.8b, v0.8b
Added: llvm/trunk/test/MC/AArch64/directive-arch_extension.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/directive-arch_extension.s?rev=357677&view=auto
==============================================================================
--- llvm/trunk/test/MC/AArch64/directive-arch_extension.s (added)
+++ llvm/trunk/test/MC/AArch64/directive-arch_extension.s Thu Apr 4 02:11:17 2019
@@ -0,0 +1,61 @@
+// RUN: llvm-mc -triple aarch64 -filetype asm -o - %s | FileCheck %s
+
+.arch_extension crc
+crc32cx w0, w1, x3
+// CHECK: crc32cx w0, w1, x3
+
+.arch_extension sm4
+sm4e v2.4s, v15.4s
+// CHECK: sm4e v2.4s, v15.4s
+
+.arch_extension sha3
+sha512h q0, q1, v2.2d
+// CHECK: sha512h q0, q1, v2.2d
+
+.arch_extension sha2
+sha1h s0, s1
+// CHECK: sha1h s0, s1
+
+.arch_extension aes
+aese v0.16b, v1.16b
+// CHECK: aese v0.16b, v1.16b
+
+.arch_extension fp
+fminnm d0, d0, d1
+// CHECK: fminnm d0, d0, d1
+
+.arch_extension simd
+addp v0.4s, v0.4s, v0.4s
+// CHECK: addp v0.4s, v0.4s, v0.4s
+
+.arch_extension ras
+esb
+// CHECK: esb
+
+.arch_extension lse
+casa w5, w7, [x20]
+// CHECK: casa w5, w7, [x20]
+
+.arch_extension predres
+cfp rctx, x0
+// CHECK: cfp rctx, x0
+
+.arch_extension ccdp
+dc cvadp, x7
+// CHECK: dc cvadp, x7
+
+.arch_extension mte
+irg x0, x1
+// CHECK: irg x0, x1
+
+.arch_extension tlb-rmi
+tlbi vmalle1os
+// CHECK: tlbi vmalle1os
+
+.arch_extension pan-rwv
+at s1e1wp, x2
+// CHECK: at s1e1wp, x2
+
+.arch_extension ccpp
+dc cvap, x7
+// CHECK: dc cvap, x7
More information about the llvm-commits
mailing list