[ms-inline asm] Properly emit the asm directives when the AsmPrinterVariant
authorChad Rosier <mcrosier@apple.com>
Mon, 10 Sep 2012 21:36:05 +0000 (21:36 +0000)
committerChad Rosier <mcrosier@apple.com>
Mon, 10 Sep 2012 21:36:05 +0000 (21:36 +0000)
and InlineAsmVariant don't match.

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

lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp
test/CodeGen/X86/ms-inline-asm.ll

index 2dfb73e300ed2a902c5d6915abd2447e362c411a..260871d33b0755f5365d4d6852241b1ed45ae83e 100644 (file)
@@ -200,7 +200,15 @@ void AsmPrinter::EmitInlineAsm(const MachineInstr *MI) const {
   // The variant of the current asmprinter.
   int AsmPrinterVariant = MAI->getAssemblerDialect();
   int InlineAsmVariant = MI->getInlineAsmDialect();
-  
+
+  // Switch to the inline assembly variant.
+  if (AsmPrinterVariant != InlineAsmVariant) {
+    if (InlineAsmVariant == 0)
+      OS << ".att_syntax\n\t";
+    else
+      OS << ".intel_syntax\n\t";
+  }
+
   int CurVariant = -1;            // The number of the {.|.|.} region we are in.
   const char *LastEmitted = AsmStr; // One past the last character emitted.
 
@@ -365,6 +373,14 @@ void AsmPrinter::EmitInlineAsm(const MachineInstr *MI) const {
     }
     }
   }
+  // Switch to the AsmPrinter variant.
+  if (AsmPrinterVariant != InlineAsmVariant) {
+    if (AsmPrinterVariant == 0)
+      OS << "\n\t.att_syntax";
+    else
+      OS << "\n\t.intel_syntax";
+  }
+
   OS << '\n' << (char)0;  // null terminate string.
   EmitInlineAsm(OS.str(), LocMD, MI->getInlineAsmDialect());
 
index ea096c7db4d39035cc7c9d6fc0fd1489373d4b2f..9bebcbde43e634bd77b878278bae6ee6d8cf5320 100644 (file)
@@ -6,9 +6,9 @@ entry:
   ret i32 %0
 ; CHECK: t1
 ; CHECK: ## InlineAsm Start
-; FIXME: .intel_syntax
+; CHECK: .intel_syntax
 ; CHECK: mov eax, ecx
 ; CHECK: mov ecx, eax
-; FIXME: .att_syntax
+; CHECK: .att_syntax
 ; CHECK: ## InlineAsm End
 }