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