summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorSimon Atanasyan <simon@atanasyan.com>2019-07-17 08:11:15 +0000
committerSimon Atanasyan <simon@atanasyan.com>2019-07-17 08:11:15 +0000
commit7f308af5eeea2d1b24aee0361d39dc43bac4cfe5 (patch)
tree81f19b961fd128f884ae7a95c3c438c85b76d83d /llvm/test
parentfc1c8f5d7d47139492ed9d6ef0df3c47eb1fbfd4 (diff)
downloadbcm5719-llvm-7f308af5eeea2d1b24aee0361d39dc43bac4cfe5.tar.gz
bcm5719-llvm-7f308af5eeea2d1b24aee0361d39dc43bac4cfe5.zip
[mips] Support the "o" inline asm constraint
As well as other LLVM targets we do not handle "offsettable" memory addresses in any special way. In other words, the "o" constraint is an exact equivalent of the "m" one. But some existing code require the "o" constraint support. This fixes PR42589. Differential Revision: https://reviews.llvm.org/D64792 llvm-svn: 366299
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/CodeGen/Mips/inlineasm_constraint_o.ll61
1 files changed, 61 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/Mips/inlineasm_constraint_o.ll b/llvm/test/CodeGen/Mips/inlineasm_constraint_o.ll
new file mode 100644
index 00000000000..de677cbcc68
--- /dev/null
+++ b/llvm/test/CodeGen/Mips/inlineasm_constraint_o.ll
@@ -0,0 +1,61 @@
+; RUN: llc -march=mipsel -relocation-model=pic < %s | FileCheck %s
+
+@data = global [8193 x i32] zeroinitializer
+
+define void @o(i32 *%p) nounwind {
+entry:
+ ; CHECK-LABEL: o:
+
+ call void asm sideeffect "lw $$1, $0", "*o,~{$1}"(i32* getelementptr inbounds ([8193 x i32], [8193 x i32]* @data, i32 0, i32 0))
+
+ ; CHECK: lw $[[BASEPTR:[0-9]+]], %got(data)(
+ ; CHECK: #APP
+ ; CHECK: lw $1, 0($[[BASEPTR]])
+ ; CHECK: #NO_APP
+
+ ret void
+}
+
+define void @o_offset_4(i32 *%p) nounwind {
+entry:
+ ; CHECK-LABEL: o_offset_4:
+
+ call void asm sideeffect "lw $$1, $0", "*o,~{$1}"(i32* getelementptr inbounds ([8193 x i32], [8193 x i32]* @data, i32 0, i32 1))
+
+ ; CHECK: lw $[[BASEPTR:[0-9]+]], %got(data)(
+ ; CHECK: #APP
+ ; CHECK: lw $1, 4($[[BASEPTR]])
+ ; CHECK: #NO_APP
+
+ ret void
+}
+
+define void @o_offset_32764(i32 *%p) nounwind {
+entry:
+ ; CHECK-LABEL: o_offset_32764:
+
+ call void asm sideeffect "lw $$1, $0", "*o,~{$1}"(i32* getelementptr inbounds ([8193 x i32], [8193 x i32]* @data, i32 0, i32 8191))
+
+ ; CHECK-DAG: lw $[[BASEPTR:[0-9]+]], %got(data)(
+ ; CHECK: #APP
+ ; CHECK: lw $1, 32764($[[BASEPTR]])
+ ; CHECK: #NO_APP
+
+ ret void
+}
+
+define void @o_offset_32768(i32 *%p) nounwind {
+entry:
+ ; CHECK-LABEL: o_offset_32768:
+
+ call void asm sideeffect "lw $$1, $0", "*o,~{$1}"(i32* getelementptr inbounds ([8193 x i32], [8193 x i32]* @data, i32 0, i32 8192))
+
+ ; CHECK-DAG: lw $[[BASEPTR:[0-9]+]], %got(data)(
+ ; CHECK-DAG: ori $[[T0:[0-9]+]], $zero, 32768
+ ; CHECK: addu $[[BASEPTR2:[0-9]+]], $[[BASEPTR]], $[[T0]]
+ ; CHECK: #APP
+ ; CHECK: lw $1, 0($[[BASEPTR2]])
+ ; CHECK: #NO_APP
+
+ ret void
+}
OpenPOWER on IntegriCloud