-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[AsmPrinter] Don't check for inlineasm dialect on non-X86 platforms #98097
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
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.
@llvm/pr-subscribers-clang Author: David Tellenbach (dtellenbach) ChangesAArch64 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:
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.
|
Linux test failure seems unrelated (fails to build some libcxx stuff). The new test passes:
|
LGTM |
…lvm#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.
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.