Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(494)

Side by Side Diff: test/NaCl/ARM/neon-vstlane-sandboxing.ll

Issue 1151093004: Changes from 3.7 merge to files not in upstream (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-llvm.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 ; RUN: pnacl-llc -mtriple=armv7-unknown-nacl -mattr=+neon -filetype=obj %s -o - \ 1 ; RUN: pnacl-llc -mtriple=armv7-unknown-nacl -mattr=+neon -filetype=obj %s -o - \
2 ; RUN: | llvm-objdump -disassemble -triple armv7 - | FileCheck %s 2 ; RUN: | llvm-objdump -disassemble -triple armv7 - | FileCheck %s
3 3
4 define void @vst1lanei8(i8* %A, <8 x i8>* %B) nounwind { 4 define void @vst1lanei8(i8* %A, <8 x i8>* %B) nounwind {
5 %tmp1 = load <8 x i8>* %B 5 %tmp1 = load <8 x i8>, <8 x i8>* %B
6 %tmp2 = extractelement <8 x i8> %tmp1, i32 3 6 %tmp2 = extractelement <8 x i8> %tmp1, i32 3
7 store i8 %tmp2, i8* %A, align 8 7 store i8 %tmp2, i8* %A, align 8
8 ; CHECK: bic r0, r0, #3221225472 8 ; CHECK: bic r0, r0, #-1073741824
9 ; CHECK-NEXT: vst1.8 {d{{[0-9]+}}[3]}, [r0] 9 ; CHECK-NEXT: vst1.{{[0-9]+}} {d{{[0-9]+}}[3]}, [r0]
10 ret void 10 ret void
11 } 11 }
12 12
13 define void @vst1lanei16(i16* %A, <4 x i16>* %B) nounwind { 13 define void @vst1lanei16(i16* %A, <4 x i16>* %B) nounwind {
14 %tmp1 = load <4 x i16>* %B 14 %tmp1 = load <4 x i16>, <4 x i16>* %B
15 %tmp2 = extractelement <4 x i16> %tmp1, i32 2 15 %tmp2 = extractelement <4 x i16> %tmp1, i32 2
16 store i16 %tmp2, i16* %A, align 8 16 store i16 %tmp2, i16* %A, align 8
17 ; CHECK: bic r0, r0, #3221225472 17 ; CHECK: bic r0, r0, #-1073741824
18 ; CHECK-NEXT: vst1.16 {d{{[0-9]+}}[2]}, [r0:16] 18 ; CHECK-NEXT: vst1.{{[0-9]+}} {d{{[0-9]+}}[2]}, [r0:16]
19 ret void 19 ret void
20 } 20 }
21 21
22 define void @vst1lanei32(i32* %A, <2 x i32>* %B) nounwind { 22 define void @vst1lanei32(i32* %A, <2 x i32>* %B) nounwind {
23 %tmp1 = load <2 x i32>* %B 23 %tmp1 = load <2 x i32>, <2 x i32>* %B
24 %tmp2 = extractelement <2 x i32> %tmp1, i32 1 24 %tmp2 = extractelement <2 x i32> %tmp1, i32 1
25 store i32 %tmp2, i32* %A, align 8 25 store i32 %tmp2, i32* %A, align 8
26 ; CHECK: bic r0, r0, #3221225472 26 ; CHECK: bic r0, r0, #-1073741824
27 ; CHECK-NEXT: vst1.32 {d{{[0-9]+}}[1]}, [r0:32] 27 ; CHECK-NEXT: vst1.{{[0-9]+}} {d{{[0-9]+}}[1]}, [r0:32]
28 ret void 28 ret void
29 } 29 }
30 30
31 define void @vst1laneQi8(i8* %A, <16 x i8>* %B) nounwind { 31 define void @vst1laneQi8(i8* %A, <16 x i8>* %B) nounwind {
32 %tmp1 = load <16 x i8>* %B 32 %tmp1 = load <16 x i8>, <16 x i8>* %B
33 ; CHECK: bic r1, r1, #3221225472 33 ; CHECK: bic r1, r1, #-1073741824
34 ; CHECK-NEXT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r1] 34 ; CHECK-NEXT: vld1.{{[0-9]+}} {d{{[0-9]+}}, d{{[0-9]+}}}, [r1]
35 %tmp2 = extractelement <16 x i8> %tmp1, i32 9 35 %tmp2 = extractelement <16 x i8> %tmp1, i32 9
36 store i8 %tmp2, i8* %A, align 8 36 store i8 %tmp2, i8* %A, align 8
37 ; CHECK: bic r0, r0, #3221225472 37 ; CHECK: bic r0, r0, #-1073741824
38 ; CHECK-NEXT: vst1.8 {d{{[0-9]+}}[1]}, [r0] 38 ; CHECK-NEXT: vst1.{{[0-9]+}} {d{{[0-9]+}}[1]}, [r0]
39 ret void 39 ret void
40 } 40 }
41 41
42 define void @vst1laneQi16(i16* %A, <8 x i16>* %B) nounwind { 42 define void @vst1laneQi16(i16* %A, <8 x i16>* %B) nounwind {
43 %tmp1 = load <8 x i16>* %B 43 %tmp1 = load <8 x i16>, <8 x i16>* %B
44 ; CHECK: bic r1, r1, #3221225472 44 ; CHECK: bic r1, r1, #-1073741824
45 ; CHECK-NEXT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r1] 45 ; CHECK-NEXT: vld1.{{[0-9]+}} {d{{[0-9]+}}, d{{[0-9]+}}}, [r1]
46 %tmp2 = extractelement <8 x i16> %tmp1, i32 5 46 %tmp2 = extractelement <8 x i16> %tmp1, i32 5
47 store i16 %tmp2, i16* %A, align 8 47 store i16 %tmp2, i16* %A, align 8
48 ; CHECK: bic r0, r0, #3221225472 48 ; CHECK: bic r0, r0, #-1073741824
49 ; CHECK-NEXT: vst1.16 {d{{[0-9]+}}[1]}, [r0:16] 49 ; CHECK-NEXT: vst1.16 {d{{[0-9]+}}[1]}, [r0:16]
50 ret void 50 ret void
51 } 51 }
52 52
53 define void @vst2lanei8(i8* %A, <8 x i8>* %B) nounwind { 53 define void @vst2lanei8(i8* %A, <8 x i8>* %B) nounwind {
54 %tmp1 = load <8 x i8>* %B 54 %tmp1 = load <8 x i8>, <8 x i8>* %B
55 call void @llvm.arm.neon.vst2lane.v8i8(i8* %A, <8 x i8> %tmp1, <8 x i8> %tmp1, i32 1, i32 4) 55 call void @llvm.arm.neon.vst2lane.v8i8(i8* %A, <8 x i8> %tmp1, <8 x i8> %tmp1, i32 1, i32 4)
56 ; CHECK: bic r0, r0, #3221225472 56 ; CHECK: bic r0, r0, #-1073741824
57 ; CHECK-NEXT: vst2.8 {d{{[0-9]+}}[1], d{{[0-9]+}}[1]}, [r0:16] 57 ; CHECK-NEXT: vst2.{{[0-9]+}} {d{{[0-9]+}}[1], d{{[0-9]+}}[1]}, [r0:16]
58 ret void 58 ret void
59 } 59 }
60 60
61 define void @vst2lanei16(i16* %A, <4 x i16>* %B) nounwind { 61 define void @vst2lanei16(i16* %A, <4 x i16>* %B) nounwind {
62 %tmp0 = bitcast i16* %A to i8* 62 %tmp0 = bitcast i16* %A to i8*
63 %tmp1 = load <4 x i16>* %B 63 %tmp1 = load <4 x i16>, <4 x i16>* %B
64 call void @llvm.arm.neon.vst2lane.v4i16(i8* %tmp0, <4 x i16> %tmp1, <4 x i16> %tmp1, i32 1, i32 8) 64 call void @llvm.arm.neon.vst2lane.v4i16(i8* %tmp0, <4 x i16> %tmp1, <4 x i16> %tmp1, i32 1, i32 8)
65 ; CHECK: bic r0, r0, #3221225472 65 ; CHECK: bic r0, r0, #-1073741824
66 ; CHECK-NEXT: vst2.16 {d{{[0-9]+}}[1], d{{[0-9]+}}[1]}, [r0:32] 66 ; CHECK-NEXT: vst2.{{[0-9]+}} {d{{[0-9]+}}[1], d{{[0-9]+}}[1]}, [r0:32]
67 ret void 67 ret void
68 } 68 }
69 69
70 define void @vst2lanei32(i32* %A, <2 x i32>* %B) nounwind { 70 define void @vst2lanei32(i32* %A, <2 x i32>* %B) nounwind {
71 %tmp0 = bitcast i32* %A to i8* 71 %tmp0 = bitcast i32* %A to i8*
72 %tmp1 = load <2 x i32>* %B 72 %tmp1 = load <2 x i32>, <2 x i32>* %B
73 call void @llvm.arm.neon.vst2lane.v2i32(i8* %tmp0, <2 x i32> %tmp1, <2 x i32> %tmp1, i32 1, i32 1) 73 call void @llvm.arm.neon.vst2lane.v2i32(i8* %tmp0, <2 x i32> %tmp1, <2 x i32> %tmp1, i32 1, i32 1)
74 ; CHECK: bic r0, r0, #3221225472 74 ; CHECK: bic r0, r0, #-1073741824
75 ; CHECK-NEXT: vst2.32 {d{{[0-9]+}}[1], d{{[0-9]+}}[1]}, [r0] 75 ; CHECK-NEXT: vst2.{{[0-9]+}} {d{{[0-9]+}}[1], d{{[0-9]+}}[1]}, [r0]
76 ret void 76 ret void
77 } 77 }
78 78
79 define void @vst2laneQi16(i16* %A, <8 x i16>* %B) nounwind { 79 define void @vst2laneQi16(i16* %A, <8 x i16>* %B) nounwind {
80 %tmp0 = bitcast i16* %A to i8* 80 %tmp0 = bitcast i16* %A to i8*
81 %tmp1 = load <8 x i16>* %B 81 %tmp1 = load <8 x i16>, <8 x i16>* %B
82 ; CHECK: bic r1, r1, #3221225472 82 ; CHECK: bic r1, r1, #-1073741824
83 ; CHECK-NEXT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r1] 83 ; CHECK-NEXT: vld1.{{[0-9]+}} {d{{[0-9]+}}, d{{[0-9]+}}}, [r1]
84 call void @llvm.arm.neon.vst2lane.v8i16(i8* %tmp0, <8 x i16> %tmp1, <8 x i16> %tmp1, i32 5, i32 1) 84 call void @llvm.arm.neon.vst2lane.v8i16(i8* %tmp0, <8 x i16> %tmp1, <8 x i16> %tmp1, i32 5, i32 1)
85 ; CHECK: bic r0, r0, #3221225472 85 ; CHECK: bic r0, r0, #-1073741824
86 ; CHECK-NEXT: vst2.16 {d{{[0-9]+}}[1], d{{[0-9]+}}[1]}, [r0] 86 ; CHECK-NEXT: vst2.{{[0-9]+}} {d{{[0-9]+}}[1], d{{[0-9]+}}[1]}, [r0]
87 ret void 87 ret void
88 } 88 }
89 89
90 define void @vst2laneQi32(i32* %A, <4 x i32>* %B) nounwind { 90 define void @vst2laneQi32(i32* %A, <4 x i32>* %B) nounwind {
91 %tmp0 = bitcast i32* %A to i8* 91 %tmp0 = bitcast i32* %A to i8*
92 %tmp1 = load <4 x i32>* %B 92 %tmp1 = load <4 x i32>, <4 x i32>* %B
93 ; CHECK: bic r1, r1, #3221225472 93 ; CHECK: bic r1, r1, #-1073741824
94 ; CHECK-NEXT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r1] 94 ; CHECK-NEXT: vld1.{{[0-9]+}} {d{{[0-9]+}}, d{{[0-9]+}}}, [r1]
95 call void @llvm.arm.neon.vst2lane.v4i32(i8* %tmp0, <4 x i32> %tmp1, <4 x i32> %tmp1, i32 2, i32 16) 95 call void @llvm.arm.neon.vst2lane.v4i32(i8* %tmp0, <4 x i32> %tmp1, <4 x i32> %tmp1, i32 2, i32 16)
96 ; CHECK: bic r0, r0, #3221225472 96 ; CHECK: bic r0, r0, #-1073741824
97 ; CHECK-NEXT: vst2.32 {d{{[0-9]+}}[0], d{{[0-9]+}}[0]}, [r0:64] 97 ; CHECK-NEXT: vst2.{{[0-9]+}} {d{{[0-9]+}}[0], d{{[0-9]+}}[0]}, [r0:64]
98 ret void 98 ret void
99 } 99 }
100 100
101 define void @vst3lanei8(i8* %A, <8 x i8>* %B) nounwind { 101 define void @vst3lanei8(i8* %A, <8 x i8>* %B) nounwind {
102 %tmp1 = load <8 x i8>* %B 102 %tmp1 = load <8 x i8>, <8 x i8>* %B
103 call void @llvm.arm.neon.vst3lane.v8i8(i8* %A, <8 x i8> %tmp1, <8 x i8> %tmp1, <8 x i8> %tmp1, i32 1, i32 1) 103 call void @llvm.arm.neon.vst3lane.v8i8(i8* %A, <8 x i8> %tmp1, <8 x i8> %tmp1, <8 x i8> %tmp1, i32 1, i32 1)
104 ; CHECK: bic r0, r0, #3221225472 104 ; CHECK: bic r0, r0, #-1073741824
105 ; CHECK-NEXT: vst3.8 {d{{[0-9]+}}[1], d{{[0-9]+}}[1], d{{[0-9]+}}[1]}, [r0] 105 ; CHECK-NEXT: vst3.{{[0-9]+}} {d{{[0-9]+}}[1], d{{[0-9]+}}[1], d{{[0-9]+}}[1] }, [r0]
106 ret void 106 ret void
107 } 107 }
108 108
109 define void @vst3lanei16(i16* %A, <4 x i16>* %B) nounwind { 109 define void @vst3lanei16(i16* %A, <4 x i16>* %B) nounwind {
110 %tmp0 = bitcast i16* %A to i8* 110 %tmp0 = bitcast i16* %A to i8*
111 %tmp1 = load <4 x i16>* %B 111 %tmp1 = load <4 x i16>, <4 x i16>* %B
112 call void @llvm.arm.neon.vst3lane.v4i16(i8* %tmp0, <4 x i16> %tmp1, <4 x i16> %tmp1, <4 x i16> %tmp1, i32 1, i32 8) 112 call void @llvm.arm.neon.vst3lane.v4i16(i8* %tmp0, <4 x i16> %tmp1, <4 x i16> %tmp1, <4 x i16> %tmp1, i32 1, i32 8)
113 ; CHECK: bic r0, r0, #3221225472 113 ; CHECK: bic r0, r0, #-1073741824
114 ; CHECK-NEXT: vst3.16 {d{{[0-9]+}}[1], d{{[0-9]+}}[1], d{{[0-9]+}}[1]}, [r0] 114 ; CHECK-NEXT: vst3.{{[0-9]+}} {d{{[0-9]+}}[1], d{{[0-9]+}}[1], d{{[0-9]+}}[1] }, [r0]
115 ret void 115 ret void
116 } 116 }
117 117
118 define void @vst3lanei32(i32* %A, <2 x i32>* %B) nounwind { 118 define void @vst3lanei32(i32* %A, <2 x i32>* %B) nounwind {
119 %tmp0 = bitcast i32* %A to i8* 119 %tmp0 = bitcast i32* %A to i8*
120 %tmp1 = load <2 x i32>* %B 120 %tmp1 = load <2 x i32>, <2 x i32>* %B
121 call void @llvm.arm.neon.vst3lane.v2i32(i8* %tmp0, <2 x i32> %tmp1, <2 x i32> %tmp1, <2 x i32> %tmp1, i32 1, i32 1) 121 call void @llvm.arm.neon.vst3lane.v2i32(i8* %tmp0, <2 x i32> %tmp1, <2 x i32> %tmp1, <2 x i32> %tmp1, i32 1, i32 1)
122 ; CHECK: bic r0, r0, #3221225472 122 ; CHECK: bic r0, r0, #-1073741824
123 ; CHECK-NEXT: vst3.32 {d{{[0-9]+}}[1], d{{[0-9]+}}[1], d{{[0-9]+}}[1]}, [r0] 123 ; CHECK-NEXT: vst3.{{[0-9]+}} {d{{[0-9]+}}[1], d{{[0-9]+}}[1], d{{[0-9]+}}[1] }, [r0]
124 ret void 124 ret void
125 } 125 }
126 126
127 define void @vst4lanei8(i8* %A, <8 x i8>* %B) nounwind { 127 define void @vst4lanei8(i8* %A, <8 x i8>* %B) nounwind {
128 %tmp1 = load <8 x i8>* %B 128 %tmp1 = load <8 x i8>, <8 x i8>* %B
129 call void @llvm.arm.neon.vst4lane.v8i8(i8* %A, <8 x i8> %tmp1, <8 x i8> %tmp1, <8 x i8> %tmp1, <8 x i8> %tmp1, i32 1, i32 8) 129 call void @llvm.arm.neon.vst4lane.v8i8(i8* %A, <8 x i8> %tmp1, <8 x i8> %tmp1, <8 x i8> %tmp1, <8 x i8> %tmp1, i32 1, i32 8)
130 ; CHECK: bic r0, r0, #3221225472 130 ; CHECK: bic r0, r0, #-1073741824
131 ; CHECK-NEXT: vst4.8 {d{{[0-9]+}}[1], d{{[0-9]+}}[1], d{{[0-9]+}}[1], d{{[0-9 ]+}}[1]}, [r0:32] 131 ; CHECK-NEXT: vst4.{{[0-9]+}} {d{{[0-9]+}}[1], d{{[0-9]+}}[1], d{{[0-9]+}}[1] , d{{[0-9]+}}[1]}, [r0:32]
132 ret void 132 ret void
133 } 133 }
134 134
135 define void @vst4lanei16(i16* %A, <4 x i16>* %B) nounwind { 135 define void @vst4lanei16(i16* %A, <4 x i16>* %B) nounwind {
136 %tmp0 = bitcast i16* %A to i8* 136 %tmp0 = bitcast i16* %A to i8*
137 %tmp1 = load <4 x i16>* %B 137 %tmp1 = load <4 x i16>, <4 x i16>* %B
138 call void @llvm.arm.neon.vst4lane.v4i16(i8* %tmp0, <4 x i16> %tmp1, <4 x i16> %tmp1, <4 x i16> %tmp1, <4 x i16> %tmp1, i32 1, i32 1) 138 call void @llvm.arm.neon.vst4lane.v4i16(i8* %tmp0, <4 x i16> %tmp1, <4 x i16> %tmp1, <4 x i16> %tmp1, <4 x i16> %tmp1, i32 1, i32 1)
139 ; CHECK: bic r0, r0, #3221225472 139 ; CHECK: bic r0, r0, #-1073741824
140 ; CHECK-NEXT: vst4.16 {d{{[0-9]+}}[1], d{{[0-9]+}}[1], d{{[0-9]+}}[1], d{{[0- 9]+}}[1]}, [r0] 140 ; CHECK-NEXT: vst4.{{[0-9]+}} {d{{[0-9]+}}[1], d{{[0-9]+}}[1], d{{[0-9]+}}[1] , d{{[0-9]+}}[1]}, [r0]
141 ret void 141 ret void
142 } 142 }
143 143
144 define void @vst4lanei32(i32* %A, <2 x i32>* %B) nounwind { 144 define void @vst4lanei32(i32* %A, <2 x i32>* %B) nounwind {
145 %tmp0 = bitcast i32* %A to i8* 145 %tmp0 = bitcast i32* %A to i8*
146 %tmp1 = load <2 x i32>* %B 146 %tmp1 = load <2 x i32>, <2 x i32>* %B
147 call void @llvm.arm.neon.vst4lane.v2i32(i8* %tmp0, <2 x i32> %tmp1, <2 x i32> %tmp1, <2 x i32> %tmp1, <2 x i32> %tmp1, i32 1, i32 16) 147 call void @llvm.arm.neon.vst4lane.v2i32(i8* %tmp0, <2 x i32> %tmp1, <2 x i32> %tmp1, <2 x i32> %tmp1, <2 x i32> %tmp1, i32 1, i32 16)
148 ; CHECK: bic r0, r0, #3221225472 148 ; CHECK: bic r0, r0, #-1073741824
149 ; CHECK-NEXT: vst4.32 {d{{[0-9]+}}[1], d{{[0-9]+}}[1], d{{[0-9]+}}[1], d{{[0- 9]+}}[1]}, [r0:128] 149 ; CHECK-NEXT: vst4.{{[0-9]+}} {d{{[0-9]+}}[1], d{{[0-9]+}}[1], d{{[0-9]+}}[1] , d{{[0-9]+}}[1]}, [r0:128]
150 ret void 150 ret void
151 } 151 }
152 152
153 define void @vst4laneQi16(i16* %A, <8 x i16>* %B) nounwind { 153 define void @vst4laneQi16(i16* %A, <8 x i16>* %B) nounwind {
154 %tmp0 = bitcast i16* %A to i8* 154 %tmp0 = bitcast i16* %A to i8*
155 %tmp1 = load <8 x i16>* %B 155 %tmp1 = load <8 x i16>, <8 x i16>* %B
156 ; CHECK: bic r1, r1, #3221225472 156 ; CHECK: bic r1, r1, #-1073741824
157 ; CHECK-NEXT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r1] 157 ; CHECK-NEXT: vld1.{{[0-9]+}} {d{{[0-9]+}}, d{{[0-9]+}}}, [r1]
158 call void @llvm.arm.neon.vst4lane.v8i16(i8* %tmp0, <8 x i16> %tmp1, <8 x i16> %tmp1, <8 x i16> %tmp1, <8 x i16> %tmp1, i32 7, i32 16) 158 call void @llvm.arm.neon.vst4lane.v8i16(i8* %tmp0, <8 x i16> %tmp1, <8 x i16> %tmp1, <8 x i16> %tmp1, <8 x i16> %tmp1, i32 7, i32 16)
159 ; CHECK: bic r0, r0, #3221225472 159 ; CHECK: bic r0, r0, #-1073741824
160 ; CHECK-NEXT: vst4.16 {d{{[0-9]+}}[3], d{{[0-9]+}}[3], d{{[0-9]+}}[3], d{{[0- 9]+}}[3]}, [r0:64] 160 ; CHECK-NEXT: vst4.{{[0-9]+}} {d{{[0-9]+}}[3], d{{[0-9]+}}[3], d{{[0-9]+}}[3] , d{{[0-9]+}}[3]}, [r0:64]
161 ret void 161 ret void
162 } 162 }
163 163
164 define void @vst4laneQi32(i32* %A, <4 x i32>* %B) nounwind { 164 define void @vst4laneQi32(i32* %A, <4 x i32>* %B) nounwind {
165 %tmp0 = bitcast i32* %A to i8* 165 %tmp0 = bitcast i32* %A to i8*
166 %tmp1 = load <4 x i32>* %B 166 %tmp1 = load <4 x i32>, <4 x i32>* %B
167 ; CHECK: bic r1, r1, #3221225472 167 ; CHECK: bic r1, r1, #-1073741824
168 ; CHECK-NEXT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r1] 168 ; CHECK-NEXT: vld1.{{[0-9]+}} {d{{[0-9]+}}, d{{[0-9]+}}}, [r1]
169 call void @llvm.arm.neon.vst4lane.v4i32(i8* %tmp0, <4 x i32> %tmp1, <4 x i32> %tmp1, <4 x i32> %tmp1, <4 x i32> %tmp1, i32 2, i32 1) 169 call void @llvm.arm.neon.vst4lane.v4i32(i8* %tmp0, <4 x i32> %tmp1, <4 x i32> %tmp1, <4 x i32> %tmp1, <4 x i32> %tmp1, i32 2, i32 1)
170 ; CHECK: bic r0, r0, #3221225472 170 ; CHECK: bic r0, r0, #-1073741824
171 ; CHECK-NEXT: vst4.32 {d{{[0-9]+}}[0], d{{[0-9]+}}[0], d{{[0-9]+}}[0], d{{[0- 9]+}}[0]}, [r0] 171 ; CHECK-NEXT: vst4.{{[0-9]+}} {d{{[0-9]+}}[0], d{{[0-9]+}}[0], d{{[0-9]+}}[0] , d{{[0-9]+}}[0]}, [r0]
172 ret void 172 ret void
173 } 173 }
174 174
175 declare void @llvm.arm.neon.vst2lane.v8i8(i8*, <8 x i8>, <8 x i8>, i32, i32) nou nwind 175 declare void @llvm.arm.neon.vst2lane.v8i8(i8*, <8 x i8>, <8 x i8>, i32, i32) nou nwind
176 declare void @llvm.arm.neon.vst2lane.v4i16(i8*, <4 x i16>, <4 x i16>, i32, i32) nounwind 176 declare void @llvm.arm.neon.vst2lane.v4i16(i8*, <4 x i16>, <4 x i16>, i32, i32) nounwind
177 declare void @llvm.arm.neon.vst2lane.v2i32(i8*, <2 x i32>, <2 x i32>, i32, i32) nounwind 177 declare void @llvm.arm.neon.vst2lane.v2i32(i8*, <2 x i32>, <2 x i32>, i32, i32) nounwind
178 declare void @llvm.arm.neon.vst2lane.v2f32(i8*, <2 x float>, <2 x float>, i32, i 32) nounwind 178 declare void @llvm.arm.neon.vst2lane.v2f32(i8*, <2 x float>, <2 x float>, i32, i 32) nounwind
179 declare void @llvm.arm.neon.vst2lane.v8i16(i8*, <8 x i16>, <8 x i16>, i32, i32) nounwind 179 declare void @llvm.arm.neon.vst2lane.v8i16(i8*, <8 x i16>, <8 x i16>, i32, i32) nounwind
180 declare void @llvm.arm.neon.vst2lane.v4i32(i8*, <4 x i32>, <4 x i32>, i32, i32) nounwind 180 declare void @llvm.arm.neon.vst2lane.v4i32(i8*, <4 x i32>, <4 x i32>, i32, i32) nounwind
181 declare void @llvm.arm.neon.vst2lane.v4f32(i8*, <4 x float>, <4 x float>, i32, i 32) nounwind 181 declare void @llvm.arm.neon.vst2lane.v4f32(i8*, <4 x float>, <4 x float>, i32, i 32) nounwind
182 declare void @llvm.arm.neon.vst3lane.v8i8(i8*, <8 x i8>, <8 x i8>, <8 x i8>, i32 , i32) nounwind 182 declare void @llvm.arm.neon.vst3lane.v8i8(i8*, <8 x i8>, <8 x i8>, <8 x i8>, i32 , i32) nounwind
183 declare void @llvm.arm.neon.vst3lane.v4i16(i8*, <4 x i16>, <4 x i16>, <4 x i16>, i32, i32) nounwind 183 declare void @llvm.arm.neon.vst3lane.v4i16(i8*, <4 x i16>, <4 x i16>, <4 x i16>, i32, i32) nounwind
184 declare void @llvm.arm.neon.vst3lane.v2i32(i8*, <2 x i32>, <2 x i32>, <2 x i32>, i32, i32) nounwind 184 declare void @llvm.arm.neon.vst3lane.v2i32(i8*, <2 x i32>, <2 x i32>, <2 x i32>, i32, i32) nounwind
185 declare void @llvm.arm.neon.vst3lane.v2f32(i8*, <2 x float>, <2 x float>, <2 x f loat>, i32, i32) nounwind 185 declare void @llvm.arm.neon.vst3lane.v2f32(i8*, <2 x float>, <2 x float>, <2 x f loat>, i32, i32) nounwind
186 declare void @llvm.arm.neon.vst3lane.v8i16(i8*, <8 x i16>, <8 x i16>, <8 x i16>, i32, i32) nounwind 186 declare void @llvm.arm.neon.vst3lane.v8i16(i8*, <8 x i16>, <8 x i16>, <8 x i16>, i32, i32) nounwind
187 declare void @llvm.arm.neon.vst3lane.v4i32(i8*, <4 x i32>, <4 x i32>, <4 x i32>, i32, i32) nounwind 187 declare void @llvm.arm.neon.vst3lane.v4i32(i8*, <4 x i32>, <4 x i32>, <4 x i32>, i32, i32) nounwind
188 declare void @llvm.arm.neon.vst3lane.v4f32(i8*, <4 x float>, <4 x float>, <4 x f loat>, i32, i32) nounwind 188 declare void @llvm.arm.neon.vst3lane.v4f32(i8*, <4 x float>, <4 x float>, <4 x f loat>, i32, i32) nounwind
189 declare void @llvm.arm.neon.vst4lane.v8i8(i8*, <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8>, i32, i32) nounwind 189 declare void @llvm.arm.neon.vst4lane.v8i8(i8*, <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8>, i32, i32) nounwind
190 declare void @llvm.arm.neon.vst4lane.v4i16(i8*, <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16>, i32, i32) nounwind 190 declare void @llvm.arm.neon.vst4lane.v4i16(i8*, <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16>, i32, i32) nounwind
191 declare void @llvm.arm.neon.vst4lane.v2i32(i8*, <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32>, i32, i32) nounwind 191 declare void @llvm.arm.neon.vst4lane.v2i32(i8*, <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32>, i32, i32) nounwind
192 declare void @llvm.arm.neon.vst4lane.v2f32(i8*, <2 x float>, <2 x float>, <2 x f loat>, <2 x float>, i32, i32) nounwind 192 declare void @llvm.arm.neon.vst4lane.v2f32(i8*, <2 x float>, <2 x float>, <2 x f loat>, <2 x float>, i32, i32) nounwind
193 declare void @llvm.arm.neon.vst4lane.v8i16(i8*, <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16>, i32, i32) nounwind 193 declare void @llvm.arm.neon.vst4lane.v8i16(i8*, <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16>, i32, i32) nounwind
194 declare void @llvm.arm.neon.vst4lane.v4i32(i8*, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32, i32) nounwind 194 declare void @llvm.arm.neon.vst4lane.v4i32(i8*, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32, i32) nounwind
195 declare void @llvm.arm.neon.vst4lane.v4f32(i8*, <4 x float>, <4 x float>, <4 x f loat>, <4 x float>, i32, i32) nounwind 195 declare void @llvm.arm.neon.vst4lane.v4f32(i8*, <4 x float>, <4 x float>, <4 x f loat>, <4 x float>, i32, i32) nounwind
196 196
197 ;Check for a post-increment updating store with register increment. 197 ;Check for a post-increment updating store with register increment.
198 define void @vst2lanei16_update(i16** %ptr, <4 x i16>* %B, i32 %inc) nounwind { 198 define void @vst2lanei16_update(i16** %ptr, <4 x i16>* %B, i32 %inc) nounwind {
199 ; CHECK: bic r1, r1, #3221225472 199 ; CHECK: bic r1, r1, #-1073741824
200 %A = load i16** %ptr 200 %A = load i16*, i16** %ptr
201 %tmp0 = bitcast i16* %A to i8* 201 %tmp0 = bitcast i16* %A to i8*
202 %tmp1 = load <4 x i16>* %B 202 %tmp1 = load <4 x i16>, <4 x i16>* %B
203 call void @llvm.arm.neon.vst2lane.v4i16(i8* %tmp0, <4 x i16> %tmp1, <4 x i16> %tmp1, i32 1, i32 2) 203 call void @llvm.arm.neon.vst2lane.v4i16(i8* %tmp0, <4 x i16> %tmp1, <4 x i16> %tmp1, i32 1, i32 2)
204 ; CHECK: bic r1, r1, #3221225472 204 ; CHECK: bic r1, r1, #-1073741824
205 ; CHECK-NEXT: vst2.16 {d{{[0-9]+}}[1], d{{[0-9]+}}[1]}, [r1], r2 205 ; CHECK-NEXT: vst2.{{[0-9]+}} {d{{[0-9]+}}[1], d{{[0-9]+}}[1]}, [r1], r2
206 %tmp2 = getelementptr i16* %A, i32 %inc 206 %tmp2 = getelementptr i16, i16* %A, i32 %inc
207 store i16* %tmp2, i16** %ptr 207 store i16* %tmp2, i16** %ptr
208 ret void 208 ret void
209 } 209 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698