summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/ARM/vst1.ll
diff options
context:
space:
mode:
authorBob Wilson <bob.wilson@apple.com>2011-02-07 17:43:21 +0000
committerBob Wilson <bob.wilson@apple.com>2011-02-07 17:43:21 +0000
commit06fce87c4a1ca0c93cf527c389da3fc7cb53db20 (patch)
treef57efc5126dd21ffcf77aed6cfd4825aabe9919e /llvm/test/CodeGen/ARM/vst1.ll
parenta609b8954ebd52928f0bc9334e33e50aea312118 (diff)
downloadbcm5719-llvm-06fce87c4a1ca0c93cf527c389da3fc7cb53db20.tar.gz
bcm5719-llvm-06fce87c4a1ca0c93cf527c389da3fc7cb53db20.zip
Add codegen support for using post-increment NEON load/store instructions.
The vld1-lane, vld1-dup and vst1-lane instructions do not yet support using post-increment versions, but all the rest of the NEON load/store instructions should be handled now. llvm-svn: 125014
Diffstat (limited to 'llvm/test/CodeGen/ARM/vst1.ll')
-rw-r--r--llvm/test/CodeGen/ARM/vst1.ll26
1 files changed, 26 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/ARM/vst1.ll b/llvm/test/CodeGen/ARM/vst1.ll
index 70f3a4cfa28..364d44b7116 100644
--- a/llvm/test/CodeGen/ARM/vst1.ll
+++ b/llvm/test/CodeGen/ARM/vst1.ll
@@ -36,6 +36,19 @@ define void @vst1f(float* %A, <2 x float>* %B) nounwind {
ret void
}
+;Check for a post-increment updating store.
+define void @vst1f_update(float** %ptr, <2 x float>* %B) nounwind {
+;CHECK: vst1f_update:
+;CHECK: vst1.32 {d16}, [r1]!
+ %A = load float** %ptr
+ %tmp0 = bitcast float* %A to i8*
+ %tmp1 = load <2 x float>* %B
+ call void @llvm.arm.neon.vst1.v2f32(i8* %tmp0, <2 x float> %tmp1, i32 1)
+ %tmp2 = getelementptr float* %A, i32 2
+ store float* %tmp2, float** %ptr
+ ret void
+}
+
define void @vst1i64(i64* %A, <1 x i64>* %B) nounwind {
;CHECK: vst1i64:
;CHECK: vst1.64
@@ -64,6 +77,19 @@ define void @vst1Qi16(i16* %A, <8 x i16>* %B) nounwind {
ret void
}
+;Check for a post-increment updating store with register increment.
+define void @vst1Qi16_update(i16** %ptr, <8 x i16>* %B, i32 %inc) nounwind {
+;CHECK: vst1Qi16_update:
+;CHECK: vst1.16 {d16, d17}, [r1, :64], r2
+ %A = load i16** %ptr
+ %tmp0 = bitcast i16* %A to i8*
+ %tmp1 = load <8 x i16>* %B
+ call void @llvm.arm.neon.vst1.v8i16(i8* %tmp0, <8 x i16> %tmp1, i32 8)
+ %tmp2 = getelementptr i16* %A, i32 %inc
+ store i16* %tmp2, i16** %ptr
+ ret void
+}
+
define void @vst1Qi32(i32* %A, <4 x i32>* %B) nounwind {
;CHECK: vst1Qi32:
;CHECK: vst1.32
OpenPOWER on IntegriCloud