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 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits