diff --git a/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp b/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp --- a/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp +++ b/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp @@ -551,6 +551,12 @@ } printOperand(MI, OpNum, O); return false; + case 'c': + if (MO.getType() == MachineOperand::MO_GlobalAddress) { + printOperand(MI, OpNum, O); + return false; + } + return true; } } diff --git a/llvm/test/CodeGen/AArch64/inline-asm-globaladdress.ll b/llvm/test/CodeGen/AArch64/inline-asm-globaladdress.ll --- a/llvm/test/CodeGen/AArch64/inline-asm-globaladdress.ll +++ b/llvm/test/CodeGen/AArch64/inline-asm-globaladdress.ll @@ -1,5 +1,5 @@ -; RUN: llc < %s -mtriple aarch64-gnu-linux | FileCheck %s -; RUN: llc < %s -mtriple arm64-apple-darwin | FileCheck %s +; RUN: llc < %s -mtriple aarch64-gnu-linux | FileCheck %s --check-prefixes=CHECK,CHECK-LINUX +; RUN: llc < %s -mtriple arm64-apple-darwin | FileCheck %s --check-prefixes=CHECK,CHECK-DARWIN target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128" @@ -18,3 +18,12 @@ } declare void @test_symbol() + +; CHECK-LABEL: test_inlineasm_c_output_template: +; CHECK-LINUX: .xword baz +; CHECK-DARWIN: .quad _baz +@baz = internal global i32 0, align 4 +define dso_local i32 @test_inlineasm_c_output_template() { + tail call void asm sideeffect ".quad ${0:c}", "i"(i32* nonnull @baz) + ret i32 43 +}