[clang] [llvm] [AsmPrinter] Don't check for inlineasm dialect on non-X86 platforms (PR #98097)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Jul 8 16:13:57 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: David Tellenbach (dtellenbach)
<details>
<summary>Changes</summary>
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.
---
Full diff: https://github.com/llvm/llvm-project/pull/98097.diff
2 Files Affected:
- (added) clang/test/CodeGen/AArch64/inline-asm-ios.c (+23)
- (modified) llvm/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp (+9-5)
``````````diff
diff --git a/clang/test/CodeGen/AArch64/inline-asm-ios.c b/clang/test/CodeGen/AArch64/inline-asm-ios.c
new file mode 100644
index 0000000000000..5e7328a15f69d
--- /dev/null
+++ b/clang/test/CodeGen/AArch64/inline-asm-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.
``````````
</details>
https://github.com/llvm/llvm-project/pull/98097
More information about the cfe-commits
mailing list