aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Northover <tnorthover@apple.com>2013-10-29 08:22:33 +0000
committerTim Northover <tnorthover@apple.com>2013-10-29 08:22:33 +0000
commitfd4937fe2a0a2bbceeff8ba14e49411c0ae78855 (patch)
tree7faf74127bd9c82d0c50c37b8da68d3f64efb622
parent6b713800ff03fdbb1d770d1e00af0e76041f3c03 (diff)
downloadexternal_llvm-fd4937fe2a0a2bbceeff8ba14e49411c0ae78855.zip
external_llvm-fd4937fe2a0a2bbceeff8ba14e49411c0ae78855.tar.gz
external_llvm-fd4937fe2a0a2bbceeff8ba14e49411c0ae78855.tar.bz2
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
-rw-r--r--lib/Target/AArch64/AArch64AsmPrinter.cpp2
-rw-r--r--test/CodeGen/AArch64/inline-asm-modifiers.ll9
2 files changed, 11 insertions, 0 deletions
diff --git a/lib/Target/AArch64/AArch64AsmPrinter.cpp b/lib/Target/AArch64/AArch64AsmPrinter.cpp
index 759809f..911218a 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 d0b158f..124b719 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
+}