Author: Craig Topper Date: 2019-11-13T15:26:18-08:00 New Revision: 188d92b9470de71532ec58060cd75f913fd68e59
URL: https://github.com/llvm/llvm-project/commit/188d92b9470de71532ec58060cd75f913fd68e59 DIFF: https://github.com/llvm/llvm-project/commit/188d92b9470de71532ec58060cd75f913fd68e59.diff LOG: [X86] Don't treat mxcsr as a register name when parsing MS inline assembly. No instruction takes mxcsr as a an operand so we should always treat it as an identifier name. Added: Modified: clang/test/CodeGen/ms-inline-asm.c llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp Removed: ################################################################################ diff --git a/clang/test/CodeGen/ms-inline-asm.c b/clang/test/CodeGen/ms-inline-asm.c index ca9b937a7cde..00d408f431c4 100644 --- a/clang/test/CodeGen/ms-inline-asm.c +++ b/clang/test/CodeGen/ms-inline-asm.c @@ -592,13 +592,21 @@ void t41(unsigned short a) { } void t42() { -// CHECK-LABEL: define void @t42 +// CHECK-LABEL: define void @t42( int flags; __asm mov flags, eax // CHECK: mov $0, eax // CHECK: "=*m,~{dirflag},~{fpsr},~{flags}"(i32* %flags) } +void t42b() { +// CHECK-LABEL: define void @t42b( + int mxcsr; + __asm mov mxcsr, eax +// CHECK: mov $0, eax +// CHECK: "=*m,~{dirflag},~{fpsr},~{flags}"(i32* %mxcsr) +} + void t43() { // CHECK-LABEL: define void @t43 C strct; diff --git a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp index 25be79ec2b1e..b5fbbc427a29 100644 --- a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp +++ b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp @@ -1112,9 +1112,10 @@ bool X86AsmParser::ParseRegister(unsigned &RegNo, if (RegNo == 0) RegNo = MatchRegisterName(Tok.getString().lower()); - // The "flags" register cannot be referenced directly. + // The "flags" and "mxcsr" registers cannot be referenced directly. // Treat it as an identifier instead. - if (isParsingInlineAsm() && isParsingIntelSyntax() && RegNo == X86::EFLAGS) + if (isParsingInlineAsm() && isParsingIntelSyntax() && + (RegNo == X86::EFLAGS || RegNo == X86::MXCSR)) RegNo = 0; if (!is64BitMode()) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits