MIR Parser: Allow the dollar characters in all of the identifier tokens.
authorAlex Lorenz <arphaman@gmail.com>
Fri, 17 Jul 2015 22:48:04 +0000 (22:48 +0000)
committerAlex Lorenz <arphaman@gmail.com>
Fri, 17 Jul 2015 22:48:04 +0000 (22:48 +0000)
This commit modifies the machine instruction lexer so that it now accepts the
'$' characters in identifier tokens.

This change makes the syntax for unquoted global value tokens consistent with
the syntax for the global idenfitier tokens in the LLVM's assembly language.

llvm-svn: 242584

llvm/lib/CodeGen/MIRParser/MILexer.cpp
llvm/test/CodeGen/MIR/X86/global-value-operands.mir

index 6f74838..771e3e1 100644 (file)
@@ -61,8 +61,11 @@ static Cursor skipWhitespace(Cursor C) {
   return C;
 }
 
+/// Return true if the given character satisfies the following regular
+/// expression: [-a-zA-Z$._0-9]
 static bool isIdentifierChar(char C) {
-  return isalpha(C) || isdigit(C) || C == '_' || C == '-' || C == '.';
+  return isalpha(C) || isdigit(C) || C == '_' || C == '-' || C == '.' ||
+         C == '$';
 }
 
 static MIToken::TokenKind getIdentifierKind(StringRef Identifier) {
index 3ea729b..3e4710d 100644 (file)
     ret i32 %b
   }
 
+  @.$0  = external global i32
+  @-_-  = external global i32
+  @_-_a = external global i32
+  @$.-B = external global i32
+
+  define i32 @test() {
+  entry:
+    %a = load i32, i32* @.$0
+    store i32 %a, i32* @-_-
+    %b = load i32, i32* @_-_a
+    store i32 %b, i32* @$.-B
+    ret i32 %b
+  }
+
 ...
 ---
 # CHECK: name: inc
@@ -47,3 +61,23 @@ body:
       - '%eax = INC32r %eax, implicit-def %eflags'
       - 'RETQ %eax'
 ...
+---
+name:            test
+body:
+  - id:              0
+    name:            entry
+    instructions:
+      # CHECK: , @".$0",
+      # CHECK: , @-_-,
+      # CHECK: , @_-_a,
+      # CHECK: , @"$.-B",
+      - '%rax = MOV64rm %rip, 1, _, @.$0, _'
+      - '%eax = MOV32rm killed %rax, 1, _, 0, _'
+      - '%rcx = MOV64rm %rip, 1, _, @-_-, _'
+      - 'MOV32mr killed %rcx, 1, _, 0, _, killed %eax'
+      - '%rax = MOV64rm %rip, 1, _, @_-_a, _'
+      - '%eax = MOV32rm killed %rax, 1, _, 0, _'
+      - '%rcx = MOV64rm %rip, 1, _, @$.-B, _'
+      - 'MOV32mr killed %rcx, 1, _, 0, _, %eax'
+      - 'RETQ %eax'
+...