From fd4937fe2a0a2bbceeff8ba14e49411c0ae78855 Mon Sep 17 00:00:00 2001 From: Tim Northover Date: Tue, 29 Oct 2013 08:22:33 +0000 Subject: [PATCH] AArch64: add 'a' inline asm operand modifier This is used in the Linux kernel, and effectively just means "print an address". git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@193593 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/AArch64/AArch64AsmPrinter.cpp | 2 ++ test/CodeGen/AArch64/inline-asm-modifiers.ll | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/lib/Target/AArch64/AArch64AsmPrinter.cpp b/lib/Target/AArch64/AArch64AsmPrinter.cpp index 759809fbb72..911218aeb61 100644 --- a/lib/Target/AArch64/AArch64AsmPrinter.cpp +++ b/lib/Target/AArch64/AArch64AsmPrinter.cpp @@ -230,6 +230,8 @@ bool AArch64AsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNum, // Output bits 23:12 of symbolic address with appropriate :hi12: relocation // modifier (currently only for TLS local exec). return printSymbolicAddress(MI->getOperand(OpNum), true, "hi12", O); + case 'a': + return PrintAsmMemoryOperand(MI, OpNum, AsmVariant, ExtraCode, O); } diff --git a/test/CodeGen/AArch64/inline-asm-modifiers.ll b/test/CodeGen/AArch64/inline-asm-modifiers.ll index d0b158f1f2e..124b719d775 100644 --- a/test/CodeGen/AArch64/inline-asm-modifiers.ll +++ b/test/CodeGen/AArch64/inline-asm-modifiers.ll @@ -107,3 +107,12 @@ define void @test_inline_modifier_c() nounwind { ret void } + +define void @test_inline_modifier_a() nounwind { +; CHECK-LABEL: test_inline_modifier_a: + call void asm sideeffect "prfm pldl1keep, ${0:a}", "r"(i32* @var_simple) +; CHECK: adrp [[VARHI:x[0-9]+]], var_simple +; CHECK: add x[[VARADDR:[0-9]+]], [[VARHI]], #:lo12:var_simple +; CHECK: prfm pldl1keep, [x[[VARADDR]]] + ret void +} -- 2.11.0