[llvm] r296607 - [ARM] Fix parsing of special register masks

Oliver Stannard via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 1 02:51:05 PST 2017


Author: olista01
Date: Wed Mar  1 04:51:04 2017
New Revision: 296607

URL: http://llvm.org/viewvc/llvm-project?rev=296607&view=rev
Log:
[ARM] Fix parsing of special register masks

This parsing code was incorrectly checking for invalid characters, so an
invalid instruction like:
  msr spsr_w, r0
would be emitted as:
  msr spsr_cxsf, r0

Differential revision: https://reviews.llvm.org/D30462


Added:
    llvm/trunk/test/MC/ARM/invalid-special-reg.s
Modified:
    llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp

Modified: llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp?rev=296607&r1=296606&r2=296607&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp (original)
+++ llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp Wed Mar  1 04:51:04 2017
@@ -4330,7 +4330,7 @@ ARMAsmParser::parseMSRMaskOperand(Operan
 
       // If some specific flag is already set, it means that some letter is
       // present more than once, this is not acceptable.
-      if (FlagsVal == ~0U || (FlagsVal & Flag))
+      if (Flag == ~0U || (FlagsVal & Flag))
         return MatchOperand_NoMatch;
       FlagsVal |= Flag;
     }

Added: llvm/trunk/test/MC/ARM/invalid-special-reg.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/invalid-special-reg.s?rev=296607&view=auto
==============================================================================
--- llvm/trunk/test/MC/ARM/invalid-special-reg.s (added)
+++ llvm/trunk/test/MC/ARM/invalid-special-reg.s Wed Mar  1 04:51:04 2017
@@ -0,0 +1,11 @@
+@ RUN: not llvm-mc -triple armv7a--none-eabi < %s |& FileCheck %s
+@ RUN: not llvm-mc -triple thumbv7a--none-eabi < %s |& FileCheck %s
+
+  msr apsr_c, r0
+@ CHECK: invalid operand for instruction
+  msr cpsr_w
+@ CHECK: invalid operand for instruction
+  msr cpsr_cc
+@ CHECK: invalid operand for instruction
+  msr xpsr_c
+@ CHECK: invalid operand for instruction




More information about the llvm-commits mailing list