hans created this revision.
hans added a reviewer: pcc.
Herald added subscribers: llvm-commits, dexonsmith, steven_wu, hiraditya, 
inglorion.
Herald added a project: LLVM.

clang-cl passes -x86-asm-syntax=intel to the cc1 invocation so that assembly 
listings produced by the /FA flag are printed in intel dialect. That flag 
however should not affect the *parsing* of inline assembly in the program. (See 
llvm.org/r322652)

When compiling normally, AsmPrinter::emitInlineAsm is used for assembling and 
defaults to At&t dialect. However, when compiling for ThinLTO, the code which 
parses module level inline asm to find symbols for the symbol table was failing 
to set the dialect. This patch fixes that. (See PR46503)


https://reviews.llvm.org/D82862

Files:
  clang/test/CodeGen/thinlto-inline-asm.c
  llvm/lib/Object/ModuleSymbolTable.cpp


Index: llvm/lib/Object/ModuleSymbolTable.cpp
===================================================================
--- llvm/lib/Object/ModuleSymbolTable.cpp
+++ llvm/lib/Object/ModuleSymbolTable.cpp
@@ -23,6 +23,7 @@
 #include "llvm/IR/GlobalAlias.h"
 #include "llvm/IR/GlobalValue.h"
 #include "llvm/IR/GlobalVariable.h"
+#include "llvm/IR/InlineAsm.h"
 #include "llvm/IR/Module.h"
 #include "llvm/MC/MCAsmInfo.h"
 #include "llvm/MC/MCContext.h"
@@ -116,6 +117,10 @@
   if (!TAP)
     return;
 
+  // Module-level inline asm is assumed to use At&t syntax (see
+  // AsmPrinter::doInitialization()).
+  Parser->setAssemblerDialect(InlineAsm::AD_ATT);
+
   Parser->setTargetParser(*TAP);
   if (Parser->Run(false))
     return;
Index: clang/test/CodeGen/thinlto-inline-asm.c
===================================================================
--- /dev/null
+++ clang/test/CodeGen/thinlto-inline-asm.c
@@ -0,0 +1,21 @@
+// REQUIRES: x86-registered-target
+
+// RUN: %clang_cc1 -triple x86_64-pc-windows-msvc19.11.0 -emit-llvm-bc \
+// RUN:   -flto=thin -mllvm -x86-asm-syntax=intel -v \
+// RUN:   -o %t.obj %s 2>&1 | FileCheck --check-prefix=CLANG %s
+//
+// RUN: llvm-lto2 dump-symtab %t.obj | FileCheck --check-prefix=SYMTAB %s
+
+// Module-level inline asm is parsed with At&t syntax. Test that the
+// -x86-asm-syntax flag does not affect this.
+
+// CLANG-NOT: unknown token in expression
+// SYMTAB: D------X foo
+// SYMTAB: D------X bar
+
+void foo() {}
+
+asm(".globl bar      \n"
+    "bar:            \n"
+    "  xor %eax, %eax\n"
+    "  ret           \n");


Index: llvm/lib/Object/ModuleSymbolTable.cpp
===================================================================
--- llvm/lib/Object/ModuleSymbolTable.cpp
+++ llvm/lib/Object/ModuleSymbolTable.cpp
@@ -23,6 +23,7 @@
 #include "llvm/IR/GlobalAlias.h"
 #include "llvm/IR/GlobalValue.h"
 #include "llvm/IR/GlobalVariable.h"
+#include "llvm/IR/InlineAsm.h"
 #include "llvm/IR/Module.h"
 #include "llvm/MC/MCAsmInfo.h"
 #include "llvm/MC/MCContext.h"
@@ -116,6 +117,10 @@
   if (!TAP)
     return;
 
+  // Module-level inline asm is assumed to use At&t syntax (see
+  // AsmPrinter::doInitialization()).
+  Parser->setAssemblerDialect(InlineAsm::AD_ATT);
+
   Parser->setTargetParser(*TAP);
   if (Parser->Run(false))
     return;
Index: clang/test/CodeGen/thinlto-inline-asm.c
===================================================================
--- /dev/null
+++ clang/test/CodeGen/thinlto-inline-asm.c
@@ -0,0 +1,21 @@
+// REQUIRES: x86-registered-target
+
+// RUN: %clang_cc1 -triple x86_64-pc-windows-msvc19.11.0 -emit-llvm-bc \
+// RUN:   -flto=thin -mllvm -x86-asm-syntax=intel -v \
+// RUN:   -o %t.obj %s 2>&1 | FileCheck --check-prefix=CLANG %s
+//
+// RUN: llvm-lto2 dump-symtab %t.obj | FileCheck --check-prefix=SYMTAB %s
+
+// Module-level inline asm is parsed with At&t syntax. Test that the
+// -x86-asm-syntax flag does not affect this.
+
+// CLANG-NOT: unknown token in expression
+// SYMTAB: D------X foo
+// SYMTAB: D------X bar
+
+void foo() {}
+
+asm(".globl bar      \n"
+    "bar:            \n"
+    "  xor %eax, %eax\n"
+    "  ret           \n");
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
  • [PATCH] D82862: [ThinLTO] Al... Hans Wennborg via Phabricator via cfe-commits

Reply via email to