[PATCH] D75111: [MC] Allowing the use of $-prefixed integer as asm identifiers

Lucas Prates via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 2 01:55:07 PST 2020


pratlucas updated this revision to Diff 247572.
pratlucas added a comment.

Updating outdated comment.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D75111/new/

https://reviews.llvm.org/D75111

Files:
  llvm/lib/MC/MCParser/AsmParser.cpp
  llvm/test/MC/ARM/arm-branches.s
  llvm/test/MC/MachO/bad-dollar.s
  llvm/test/MC/MachO/dollar-identifier.s
  llvm/test/MC/Mips/cpsetup-bad.s
  llvm/test/MC/Mips/invalid-instructions-spellcheck.s


Index: llvm/test/MC/Mips/invalid-instructions-spellcheck.s
===================================================================
--- llvm/test/MC/Mips/invalid-instructions-spellcheck.s
+++ llvm/test/MC/Mips/invalid-instructions-spellcheck.s
@@ -13,7 +13,7 @@
 
 $2, $1, $25
 
-# ALL:      error: unexpected token at start of statement
+# ALL:      error: unknown instruction
 # ALL-NEXT: $2, $1, $25
 # ALL-NEXT:  ^
 
Index: llvm/test/MC/Mips/cpsetup-bad.s
===================================================================
--- llvm/test/MC/Mips/cpsetup-bad.s
+++ llvm/test/MC/Mips/cpsetup-bad.s
@@ -12,8 +12,6 @@
 # ASM: :[[@LINE-1]]:23: error: expected save register or stack offset
         .cpsetup $31, $32, __cerror
 # ASM: :[[@LINE-1]]:23: error: invalid register
-        .cpsetup $25, $2, $3
-# ASM: :[[@LINE-1]]:27: error: expected expression
         .cpsetup $25, $2, 4
 # ASM: :[[@LINE-1]]:28: error: expected symbol
         .cpsetup $25, $2, 4+65
Index: llvm/test/MC/MachO/dollar-identifier.s
===================================================================
--- /dev/null
+++ llvm/test/MC/MachO/dollar-identifier.s
@@ -0,0 +1,4 @@
+// RUN: llvm-mc -triple x86_64-apple-darwin10 %s | FileCheck %s
+
+.long $1
+// CHECK: .long ($1)
Index: llvm/test/MC/MachO/bad-dollar.s
===================================================================
--- llvm/test/MC/MachO/bad-dollar.s
+++ /dev/null
@@ -1,5 +0,0 @@
-// RUN: not llvm-mc -triple x86_64-apple-darwin10 %s 2> %t.err > %t
-// RUN: FileCheck --check-prefix=CHECK-ERROR < %t.err %s
-
-.long $1
-// CHECK-ERROR: 4:7: error: invalid token in expression
Index: llvm/test/MC/ARM/arm-branches.s
===================================================================
--- llvm/test/MC/ARM/arm-branches.s
+++ llvm/test/MC/ARM/arm-branches.s
@@ -19,17 +19,22 @@
 @------------------------------------------------------------------------------
 
         .global $foo
+        .global $4
         b $foo
         bl $foo
         beq $foo
         blx $foo
         b $foo + 4
+        bl $4
+        beq $4 + 4
 
 @ CHECK: b      ($foo)                      @ encoding: [A,A,A,0xea]
 @ CHECK: bl     ($foo)                      @ encoding: [A,A,A,0xeb]
 @ CHECK: beq    ($foo)                      @ encoding: [A,A,A,0x0a]
 @ CHECK: blx    ($foo)                      @ encoding: [A,A,A,0xfa]
 @ CHECK: b      #($foo)+4                   @ encoding: [A,A,A,0xea]
+@ CHECK: bl     ($4)                        @ encoding: [A,A,A,0xeb]
+@ CHECK: beq    #($4)+4                     @ encoding: [A,A,A,0x0a]
 
 @------------------------------------------------------------------------------
 @ Leading '$' should be allowed to introduce an expression
Index: llvm/lib/MC/MCParser/AsmParser.cpp
===================================================================
--- llvm/lib/MC/MCParser/AsmParser.cpp
+++ llvm/lib/MC/MCParser/AsmParser.cpp
@@ -2855,10 +2855,11 @@
     AsmToken Buf[1];
     Lexer.peekTokens(Buf, false);
 
-    if (Buf[0].isNot(AsmToken::Identifier))
+    if (Buf[0].isNot(AsmToken::Identifier) && Buf[0].isNot(AsmToken::Integer))
       return true;
 
-    // We have a '$' or '@' followed by an identifier, make sure they are adjacent.
+    // We have a '$' or '@' followed by an identifier or integer token, make
+    // sure they are adjacent.
     if (PrefixLoc.getPointer() + 1 != Buf[0].getLoc().getPointer())
       return true;
 
@@ -2866,7 +2867,7 @@
     Lexer.Lex(); // Lexer's Lex guarantees consecutive token.
     // Construct the joined identifier and consume the token.
     Res =
-        StringRef(PrefixLoc.getPointer(), getTok().getIdentifier().size() + 1);
+        StringRef(PrefixLoc.getPointer(), getTok().getString().size() + 1);
     Lex(); // Parser Lex to maintain invariants.
     return false;
   }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D75111.247572.patch
Type: text/x-patch
Size: 3794 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200302/1d8ef08a/attachment.bin>


More information about the llvm-commits mailing list