From 310bd3c747d30b84edeb2d465ff1182e04b62976 Mon Sep 17 00:00:00 2001 From: Alex Lorenz Date: Fri, 17 Jul 2015 22:48:04 +0000 Subject: [PATCH] MIR Parser: Allow the dollar characters in all of the identifier tokens. 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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242584 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/MIRParser/MILexer.cpp | 5 ++- .../CodeGen/MIR/X86/global-value-operands.mir | 34 +++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/lib/CodeGen/MIRParser/MILexer.cpp b/lib/CodeGen/MIRParser/MILexer.cpp index 6f74838812f..771e3e1aa0f 100644 --- a/lib/CodeGen/MIRParser/MILexer.cpp +++ b/lib/CodeGen/MIRParser/MILexer.cpp @@ -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) { diff --git a/test/CodeGen/MIR/X86/global-value-operands.mir b/test/CodeGen/MIR/X86/global-value-operands.mir index 3ea729b0055..3e4710d33f4 100644 --- a/test/CodeGen/MIR/X86/global-value-operands.mir +++ b/test/CodeGen/MIR/X86/global-value-operands.mir @@ -20,6 +20,20 @@ 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' +...