[X86] Recognize "flags" as an identifier, not a register in Intel-syntax inline asm
authorMichael Kuperstein <michael.m.kuperstein@intel.com>
Thu, 30 Jul 2015 10:10:25 +0000 (10:10 +0000)
committerMichael Kuperstein <michael.m.kuperstein@intel.com>
Thu, 30 Jul 2015 10:10:25 +0000 (10:10 +0000)
Patch by: marina.yatsina@intel.com
Differential Revision: http://reviews.llvm.org/D11512

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243630 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/AsmParser/X86AsmParser.cpp

index 6b3c4d85614974ee8a84ddf17e76b05ffddf0bba..637629118acb0165a1bca22f5c72e5edacf37db1 100644 (file)
@@ -912,6 +912,11 @@ bool X86AsmParser::ParseRegister(unsigned &RegNo,
   if (RegNo == 0)
     RegNo = MatchRegisterName(Tok.getString().lower());
 
+  // The "flags" register cannot be referenced directly.
+  // Treat it as an identifier instead.
+  if (isParsingInlineAsm() && isParsingIntelSyntax() && RegNo == X86::EFLAGS)
+    RegNo = 0;
+
   if (!is64BitMode()) {
     // FIXME: This should be done using Requires<Not64BitMode> and
     // Requires<In64BitMode> so "eiz" usage in 64-bit instructions can be also