[llvm] 8f15909 - [AsmPrinter] Don't check for inlineasm dialect on non-X86 platforms (#98097)

via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 9 12:44:56 PDT 2024


Author: David Tellenbach
Date: 2024-07-09T12:44:52-07:00
New Revision: 8f159096e097dde5a95d14984623c51d58ed8e69

URL: https://github.com/llvm/llvm-project/commit/8f159096e097dde5a95d14984623c51d58ed8e69
DIFF: https://github.com/llvm/llvm-project/commit/8f159096e097dde5a95d14984623c51d58ed8e69.diff

LOG: [AsmPrinter] Don't check for inlineasm dialect on non-X86 platforms (#98097)

AArch64 uses MCAsmInfo::AssemblerDialect to control the style of emitted
Neon assembly. E.g. Apple platforms use AsmWriterVariantTy::Apple by
default which collides with InlineAsm::AD_Intel (both value 1). Checking
for inlineasm dialects on non-X86 platforms can thus lead to problems.

Added: 
    clang/test/CodeGen/aarch64-inlineasm-ios.c

Modified: 
    llvm/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp

Removed: 
    


################################################################################
diff  --git a/clang/test/CodeGen/aarch64-inlineasm-ios.c b/clang/test/CodeGen/aarch64-inlineasm-ios.c
new file mode 100644
index 0000000000000..5e7328a15f69d
--- /dev/null
+++ b/clang/test/CodeGen/aarch64-inlineasm-ios.c
@@ -0,0 +1,23 @@
+// REQUIRES: aarch64-registered-target
+// RUN: %clang_cc1 -triple arm64-apple-ios -S -o - %s | FileCheck %s
+
+// CHECK:       _restartable_function:
+// CHECK-NEXT:  	ldr	x11, [x0]
+// CHECK-NEXT:  	add	x11, x11, #1
+// CHECK-NEXT:  	str	x11, [x0]
+// CHECK-NEXT:  Ltmp0:
+// CHECK-NEXT:  	b	Ltmp0
+// CHECK-NEXT:  LExit_restartable_function:
+// CHECK-NEXT:  	ret
+asm(".align 4\n"
+    "    .text\n"
+    "    .private_extern _restartable_function\n"
+    "_restartable_function:\n"
+    "    ldr    x11, [x0]\n"
+    "    add    x11, x11, #1\n"
+    "    str    x11, [x0]\n"
+    "1:\n"
+    "    b 1b\n"
+    "LExit_restartable_function:\n"
+    "    ret\n"
+);

diff  --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp
index 5a7013c964cb4..6fe8d0e0af995 100644
--- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp
@@ -113,12 +113,16 @@ void AsmPrinter::emitInlineAsm(StringRef Str, const MCSubtargetInfo &STI,
   if (!TAP)
     report_fatal_error("Inline asm not supported by this streamer because"
                        " we don't have an asm parser for this target\n");
-  Parser->setAssemblerDialect(Dialect);
+
+  // Respect inlineasm dialect on X86 targets only
+  if (TM.getTargetTriple().isX86()) {
+    Parser->setAssemblerDialect(Dialect);
+    // Enable lexing Masm binary and hex integer literals in intel inline
+    // assembly.
+    if (Dialect == InlineAsm::AD_Intel)
+      Parser->getLexer().setLexMasmIntegers(true);
+  }
   Parser->setTargetParser(*TAP);
-  // Enable lexing Masm binary and hex integer literals in intel inline
-  // assembly.
-  if (Dialect == InlineAsm::AD_Intel)
-    Parser->getLexer().setLexMasmIntegers(true);
 
   emitInlineAsmStart();
   // Don't implicitly switch to the text section before the asm.


        


More information about the llvm-commits mailing list