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

Side by Side Diff: tests_lit/llvm2ice_tests/vector-ops.ll

Issue 2412053002: [SubZero] Implement Fcmp, ICmp, Cast and Select for vector type (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Rebase to master Created 4 years, 2 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
« no previous file with comments | « tests_lit/llvm2ice_tests/vector-icmp.ll ('k') | tests_lit/llvm2ice_tests/vector-select.ll » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 ; This checks support for insertelement and extractelement. 1 ; This checks support for insertelement and extractelement.
2 2
3 ; RUN: %p2i -i %s --filetype=obj --disassemble --args -O2 \ 3 ; RUN: %p2i -i %s --filetype=obj --disassemble --args -O2 \
4 ; RUN: | FileCheck %s 4 ; RUN: | FileCheck %s
5 ; RUN: %p2i -i %s --filetype=obj --disassemble --args -Om1 \ 5 ; RUN: %p2i -i %s --filetype=obj --disassemble --args -Om1 \
6 ; RUN: | FileCheck %s 6 ; RUN: | FileCheck %s
7 ; RUN: %p2i -i %s --filetype=obj --disassemble --args -O2 -mattr=sse4.1 \ 7 ; RUN: %p2i -i %s --filetype=obj --disassemble --args -O2 -mattr=sse4.1 \
8 ; RUN: | FileCheck --check-prefix=SSE41 %s 8 ; RUN: | FileCheck --check-prefix=SSE41 %s
9 ; RUN: %p2i -i %s --filetype=obj --disassemble --args -Om1 -mattr=sse4.1 \ 9 ; RUN: %p2i -i %s --filetype=obj --disassemble --args -Om1 -mattr=sse4.1 \
10 ; RUN: | FileCheck --check-prefix=SSE41 %s 10 ; RUN: | FileCheck --check-prefix=SSE41 %s
11 11
12 ; RUN: %if --need=target_MIPS32 --need=allow_dump \
13 ; RUN: --command %p2i --filetype=asm --assemble --disassemble --target mips32\
14 ; RUN: -i %s --args -O2 --skip-unimplemented \
15 ; RUN: | %if --need=target_MIPS32 --need=allow_dump \
16 ; RUN: --command FileCheck --check-prefix MIPS32 %s
17
12 ; insertelement operations 18 ; insertelement operations
13 19
14 define internal <4 x float> @insertelement_v4f32_0(<4 x float> %vec, 20 define internal <4 x float> @insertelement_v4f32_0(<4 x float> %vec,
15 float %elt) { 21 float %elt) {
16 entry: 22 entry:
17 %res = insertelement <4 x float> %vec, float %elt, i32 0 23 %res = insertelement <4 x float> %vec, float %elt, i32 0
18 ret <4 x float> %res 24 ret <4 x float> %res
19 ; CHECK-LABEL: insertelement_v4f32_0 25 ; CHECK-LABEL: insertelement_v4f32_0
20 ; CHECK: movss 26 ; CHECK: movss
21 27
22 ; SSE41-LABEL: insertelement_v4f32_0 28 ; SSE41-LABEL: insertelement_v4f32_0
23 ; SSE41: insertps {{.*}},{{.*}},0x0 29 ; SSE41: insertps {{.*}},{{.*}},0x0
30
31 ; *** a0 - implicit return <4 x float>
32 ; *** a1 - unused due to alignment of %vec
33 ; *** a2:a3:sp[16]:s[20] - %vec
34 ; *** sp[24] - %elt
35 ; MIPS32-LABEL: insertelement_v4f32_0
36 ; *** Load element 2 and 3 of %vec
37 ; MIPS32: lw [[BV_E2:.*]],
38 ; MIPS32: lw [[BV_E3:.*]],
39 ; *** Load %elt
40 ; MIPS32: lwc1 [[ELT:.*]],
41 ; *** Insert %elt at %vec[0]
42 ; MIPS32: mfc1 [[RV_E0:.*]],[[ELT]]
43 ; MIPS32: move [[RET_PTR:.*]],a0
44 ; MIPS32: sw [[RV_E0]],0([[RET_PTR]])
45 ; MIPS32: sw a3,4([[RET_PTR]])
46 ; MIPS32: sw [[BV_E2]],8([[RET_PTR]])
47 ; MIPS32: sw [[BV_E3]],12([[RET_PTR]])
24 } 48 }
25 49
26 define internal <4 x i32> @insertelement_v4i32_0(<4 x i32> %vec, i32 %elt) { 50 define internal <4 x i32> @insertelement_v4i32_0(<4 x i32> %vec, i32 %elt) {
27 entry: 51 entry:
28 %res = insertelement <4 x i32> %vec, i32 %elt, i32 0 52 %res = insertelement <4 x i32> %vec, i32 %elt, i32 0
29 ret <4 x i32> %res 53 ret <4 x i32> %res
30 ; CHECK-LABEL: insertelement_v4i32_0 54 ; CHECK-LABEL: insertelement_v4i32_0
31 ; CHECK: movd xmm{{.*}}, 55 ; CHECK: movd xmm{{.*}},
32 ; CHECK: movss 56 ; CHECK: movss
33 57
34 ; SSE41-LABEL: insertelement_v4i32_0 58 ; SSE41-LABEL: insertelement_v4i32_0
35 ; SSE41: pinsrd {{.*}},{{.*}},0x0 59 ; SSE41: pinsrd {{.*}},{{.*}},0x0
60
61 ; *** a0:a1:a2:a3 - %vec
62 ; *** sp[16] - %elt
63 ; MIPS32-LABEL: insertelement_v4i32_0
64 ; *** Load %elt
65 ; MIPS32: lw v0,16(sp)
66 ; MIPS32: move v1,a1
67 ; MIPS32: move a0,a2
68 ; MIPS32: move a1,a3
36 } 69 }
37 70
38 71
39 define internal <4 x float> @insertelement_v4f32_1(<4 x float> %vec, 72 define internal <4 x float> @insertelement_v4f32_1(<4 x float> %vec,
40 float %elt) { 73 float %elt) {
41 entry: 74 entry:
42 %res = insertelement <4 x float> %vec, float %elt, i32 1 75 %res = insertelement <4 x float> %vec, float %elt, i32 1
43 ret <4 x float> %res 76 ret <4 x float> %res
44 ; CHECK-LABEL: insertelement_v4f32_1 77 ; CHECK-LABEL: insertelement_v4f32_1
45 ; CHECK: shufps 78 ; CHECK: shufps
46 ; CHECK: shufps 79 ; CHECK: shufps
47 80
48 ; SSE41-LABEL: insertelement_v4f32_1 81 ; SSE41-LABEL: insertelement_v4f32_1
49 ; SSE41: insertps {{.*}},{{.*}},0x10 82 ; SSE41: insertps {{.*}},{{.*}},0x10
83
84 ; MIPS32-LABEL: insertelement_v4f32_1
85 ; MIPS32: lw [[VEC_E2:.*]],16(sp)
86 ; MIPS32: lw [[VEC_E3:.*]],20(sp)
87 ; MIPS32: lwc1 [[ELT:.*]],24(sp)
88 ; MIPS32: mfc1 [[R_E1:.*]],[[ELT]]
89 ; MIPS32: move [[PTR:.*]],a0
90 ; MIPS32: sw a2,0([[PTR]])
91 ; MIPS32: sw [[R_E1]],4([[PTR]])
92 ; MIPS32: sw [[VEC_E2]],8([[PTR]])
93 ; MIPS32: sw [[VEC_E3]],12([[PTR]])
50 } 94 }
51 95
52 define internal <4 x i32> @insertelement_v4i32_1(<4 x i32> %vec, i32 %elt) { 96 define internal <4 x i32> @insertelement_v4i32_1(<4 x i32> %vec, i32 %elt) {
53 entry: 97 entry:
54 %res = insertelement <4 x i32> %vec, i32 %elt, i32 1 98 %res = insertelement <4 x i32> %vec, i32 %elt, i32 1
55 ret <4 x i32> %res 99 ret <4 x i32> %res
56 ; CHECK-LABEL: insertelement_v4i32_1 100 ; CHECK-LABEL: insertelement_v4i32_1
57 ; CHECK: shufps 101 ; CHECK: shufps
58 ; CHECK: shufps 102 ; CHECK: shufps
59 103
60 ; SSE41-LABEL: insertelement_v4i32_1 104 ; SSE41-LABEL: insertelement_v4i32_1
61 ; SSE41: pinsrd {{.*}},{{.*}},0x1 105 ; SSE41: pinsrd {{.*}},{{.*}},0x1
106
107 ; MIPS32-LABEL: insertelement_v4i32_1
108 ; MIPS32: lw [[ELT:.*]],16(sp)
109 ; MIPS32: move v1,[[ELT]]
110 ; MIPS32: move v0,a0
111 ; MIPS32: move a0,a2
112 ; MIPS32: move a1,a3
62 } 113 }
63 114
64 define internal <8 x i16> @insertelement_v8i16(<8 x i16> %vec, i32 %elt.arg) { 115 define internal <8 x i16> @insertelement_v8i16(<8 x i16> %vec, i32 %elt.arg) {
65 entry: 116 entry:
66 %elt = trunc i32 %elt.arg to i16 117 %elt = trunc i32 %elt.arg to i16
67 %res = insertelement <8 x i16> %vec, i16 %elt, i32 1 118 %res = insertelement <8 x i16> %vec, i16 %elt, i32 1
68 ret <8 x i16> %res 119 ret <8 x i16> %res
69 ; CHECK-LABEL: insertelement_v8i16 120 ; CHECK-LABEL: insertelement_v8i16
70 ; CHECK: pinsrw 121 ; CHECK: pinsrw
71 122
72 ; SSE41-LABEL: insertelement_v8i16 123 ; SSE41-LABEL: insertelement_v8i16
73 ; SSE41: pinsrw 124 ; SSE41: pinsrw
125
126 ; MIPS32-LABEL: insertelement_v8i16
127 ; MIPS32: lw [[ELT:.*]],16(sp)
128 ; MIPS32: sll [[ELT]],[[ELT]],0x10
129 ; MIPS32: sll a0,a0,0x10
130 ; MIPS32: srl a0,a0,0x10
131 ; MIPS32: or v0,[[ELT]],a0
132 ; MIPS32: move v1,a1
133 ; MIPS32: move a0,a2
134 ; MIPS32: move a1,a3
74 } 135 }
75 136
76 define internal <16 x i8> @insertelement_v16i8(<16 x i8> %vec, i32 %elt.arg) { 137 define internal <16 x i8> @insertelement_v16i8(<16 x i8> %vec, i32 %elt.arg) {
77 entry: 138 entry:
78 %elt = trunc i32 %elt.arg to i8 139 %elt = trunc i32 %elt.arg to i8
79 %res = insertelement <16 x i8> %vec, i8 %elt, i32 1 140 %res = insertelement <16 x i8> %vec, i8 %elt, i32 1
80 ret <16 x i8> %res 141 ret <16 x i8> %res
81 ; CHECK-LABEL: insertelement_v16i8 142 ; CHECK-LABEL: insertelement_v16i8
82 ; CHECK: movups 143 ; CHECK: movups
83 ; CHECK: lea 144 ; CHECK: lea
84 ; CHECK: mov 145 ; CHECK: mov
85 146
86 ; SSE41-LABEL: insertelement_v16i8 147 ; SSE41-LABEL: insertelement_v16i8
87 ; SSE41: pinsrb 148 ; SSE41: pinsrb
149
150 ; MIPS32-LABEL: insertelement_v16i8
151 ; MIPS32: lw [[ELT:.*]],16(sp)
152 ; MIPS32: andi [[ELT]],[[ELT]],0xff
153 ; MIPS32: sll [[ELT]],[[ELT]],0x8
154 ; MIPS32: lui [[T:.*]],0xffff
155 ; MIPS32: ori [[T]],[[T]],0xff
156 ; MIPS32: and a0,a0,[[T]]
157 ; MIPS32: or v0,v0,a0
158 ; MIPS32: move v1,a1
159 ; MIPS32: move a0,a2
160 ; MIPS32: move a1,a3
88 } 161 }
89 162
90 define internal <4 x i1> @insertelement_v4i1_0(<4 x i1> %vec, i32 %elt.arg) { 163 define internal <4 x i1> @insertelement_v4i1_0(<4 x i1> %vec, i32 %elt.arg) {
91 entry: 164 entry:
92 %elt = trunc i32 %elt.arg to i1 165 %elt = trunc i32 %elt.arg to i1
93 %res = insertelement <4 x i1> %vec, i1 %elt, i32 0 166 %res = insertelement <4 x i1> %vec, i1 %elt, i32 0
94 ret <4 x i1> %res 167 ret <4 x i1> %res
95 ; CHECK-LABEL: insertelement_v4i1_0 168 ; CHECK-LABEL: insertelement_v4i1_0
96 ; CHECK: movss 169 ; CHECK: movss
97 170
98 ; SSE41-LABEL: insertelement_v4i1_0 171 ; SSE41-LABEL: insertelement_v4i1_0
99 ; SSE41: pinsrd {{.*}},{{.*}},0x0 172 ; SSE41: pinsrd {{.*}},{{.*}},0x0
173
174 ; MIPS32-LABEL: insertelement_v4i1_0
175 ; MIPS32: lw v0,16(sp)
176 ; MIPS32: move v1,a1
177 ; MIPS32: move a0,a2
178 ; MIPS32: move a1,a3
100 } 179 }
101 180
102 define internal <4 x i1> @insertelement_v4i1_1(<4 x i1> %vec, i32 %elt.arg) { 181 define internal <4 x i1> @insertelement_v4i1_1(<4 x i1> %vec, i32 %elt.arg) {
103 entry: 182 entry:
104 %elt = trunc i32 %elt.arg to i1 183 %elt = trunc i32 %elt.arg to i1
105 %res = insertelement <4 x i1> %vec, i1 %elt, i32 1 184 %res = insertelement <4 x i1> %vec, i1 %elt, i32 1
106 ret <4 x i1> %res 185 ret <4 x i1> %res
107 ; CHECK-LABEL: insertelement_v4i1_1 186 ; CHECK-LABEL: insertelement_v4i1_1
108 ; CHECK: shufps 187 ; CHECK: shufps
109 ; CHECK: shufps 188 ; CHECK: shufps
110 189
111 ; SSE41-LABEL: insertelement_v4i1_1 190 ; SSE41-LABEL: insertelement_v4i1_1
112 ; SSE41: pinsrd {{.*}},{{.*}},0x1 191 ; SSE41: pinsrd {{.*}},{{.*}},0x1
192
193 ; MIPS32-LABEL: insertelement_v4i1_1
194 ; MIPS32: lw [[ELT:.*]],16(sp)
195 ; MIPS32: move v1,[[ELT]]
196 ; MIPS32: move v0,a0
197 ; MIPS32: move a0,a2
198 ; MIPS32: move a1,a3
113 } 199 }
114 200
115 define internal <8 x i1> @insertelement_v8i1(<8 x i1> %vec, i32 %elt.arg) { 201 define internal <8 x i1> @insertelement_v8i1(<8 x i1> %vec, i32 %elt.arg) {
116 entry: 202 entry:
117 %elt = trunc i32 %elt.arg to i1 203 %elt = trunc i32 %elt.arg to i1
118 %res = insertelement <8 x i1> %vec, i1 %elt, i32 1 204 %res = insertelement <8 x i1> %vec, i1 %elt, i32 1
119 ret <8 x i1> %res 205 ret <8 x i1> %res
120 ; CHECK-LABEL: insertelement_v8i1 206 ; CHECK-LABEL: insertelement_v8i1
121 ; CHECK: pinsrw 207 ; CHECK: pinsrw
122 208
123 ; SSE41-LABEL: insertelement_v8i1 209 ; SSE41-LABEL: insertelement_v8i1
124 ; SSE41: pinsrw 210 ; SSE41: pinsrw
211
212 ; MIPS32-LABEL: insertelement_v8i1
213 ; MIPS32: lw [[ELT:.*]],16(sp)
214 ; MIPS32: sll [[ELT]],[[ELT]],0x10
215 ; MIPS32: sll a0,a0,0x10
216 ; MIPS32: srl a0,a0,0x10
217 ; MIPS32: or v0,[[ELT]],a0
218 ; MIPS32: move v1,a1
219 ; MIPS32: move a0,a2
220 ; MIPS32: move a1,a3
125 } 221 }
126 222
127 define internal <16 x i1> @insertelement_v16i1(<16 x i1> %vec, i32 %elt.arg) { 223 define internal <16 x i1> @insertelement_v16i1(<16 x i1> %vec, i32 %elt.arg) {
128 entry: 224 entry:
129 %elt = trunc i32 %elt.arg to i1 225 %elt = trunc i32 %elt.arg to i1
130 %res = insertelement <16 x i1> %vec, i1 %elt, i32 1 226 %res = insertelement <16 x i1> %vec, i1 %elt, i32 1
131 ret <16 x i1> %res 227 ret <16 x i1> %res
132 ; CHECK-LABEL: insertelement_v16i1 228 ; CHECK-LABEL: insertelement_v16i1
133 ; CHECK: movups 229 ; CHECK: movups
134 ; CHECK: lea 230 ; CHECK: lea
135 ; CHECK: mov 231 ; CHECK: mov
136 232
137 ; SSE41-LABEL: insertelement_v16i1 233 ; SSE41-LABEL: insertelement_v16i1
138 ; SSE41: pinsrb 234 ; SSE41: pinsrb
235
236 ; MIPS32-LABEL: insertelement_v16i1
237 ; MIPS32: lw [[ELT:.*]],16(sp)
238 ; MIPS32: andi [[ELT]],[[ELT]],0xff
239 ; MIPS32: sll [[ELT]],[[ELT]],0x8
240 ; MIPS32: lui [[T:.*]],0xffff
241 ; MIPS32: ori [[T]],[[T]],0xff
242 ; MIPS32: and a0,a0,[[T]]
243 ; MIPS32: or v0,[[ELT]],a0
244 ; MIPS32: move v1,a1
245 ; MIPS32: move a0,a2
246 ; MIPS32: move a1,a3
139 } 247 }
140 248
141 ; extractelement operations 249 ; extractelement operations
142 250
143 define internal float @extractelement_v4f32(<4 x float> %vec) { 251 define internal float @extractelement_v4f32(<4 x float> %vec) {
144 entry: 252 entry:
145 %res = extractelement <4 x float> %vec, i32 1 253 %res = extractelement <4 x float> %vec, i32 1
146 ret float %res 254 ret float %res
147 ; CHECK-LABEL: extractelement_v4f32 255 ; CHECK-LABEL: extractelement_v4f32
148 ; CHECK: pshufd 256 ; CHECK: pshufd
149 257
150 ; SSE41-LABEL: extractelement_v4f32 258 ; SSE41-LABEL: extractelement_v4f32
151 ; SSE41: pshufd 259 ; SSE41: pshufd
260
261 ; MIPS32-LABEL: extractelement_v4f32
262 ; MIPS32: mtc1 a1,$f0
152 } 263 }
153 264
154 define internal i32 @extractelement_v4i32(<4 x i32> %vec) { 265 define internal i32 @extractelement_v4i32(<4 x i32> %vec) {
155 entry: 266 entry:
156 %res = extractelement <4 x i32> %vec, i32 1 267 %res = extractelement <4 x i32> %vec, i32 1
157 ret i32 %res 268 ret i32 %res
158 ; CHECK-LABEL: extractelement_v4i32 269 ; CHECK-LABEL: extractelement_v4i32
159 ; CHECK: pshufd 270 ; CHECK: pshufd
160 ; CHECK: movd {{.*}},xmm 271 ; CHECK: movd {{.*}},xmm
161 272
162 ; SSE41-LABEL: extractelement_v4i32 273 ; SSE41-LABEL: extractelement_v4i32
163 ; SSE41: pextrd 274 ; SSE41: pextrd
275
276 ; MIPS32-LABEL: extractelement_v4i32
277 ; MIPS32L move v0,a1
164 } 278 }
165 279
166 define internal i32 @extractelement_v8i16(<8 x i16> %vec) { 280 define internal i32 @extractelement_v8i16(<8 x i16> %vec) {
167 entry: 281 entry:
168 %res = extractelement <8 x i16> %vec, i32 1 282 %res = extractelement <8 x i16> %vec, i32 1
169 %res.ext = zext i16 %res to i32 283 %res.ext = zext i16 %res to i32
170 ret i32 %res.ext 284 ret i32 %res.ext
171 ; CHECK-LABEL: extractelement_v8i16 285 ; CHECK-LABEL: extractelement_v8i16
172 ; CHECK: pextrw 286 ; CHECK: pextrw
173 287
174 ; SSE41-LABEL: extractelement_v8i16 288 ; SSE41-LABEL: extractelement_v8i16
175 ; SSE41: pextrw 289 ; SSE41: pextrw
290
291 ; MIPS32-LABEL: extractelement_v8i16
292 ; MIPS32: srl a0,a0,0x10
293 ; MIPS32: andi a0,a0,0xffff
294 ; MIPS32: move v0,a0
176 } 295 }
177 296
178 define internal i32 @extractelement_v16i8(<16 x i8> %vec) { 297 define internal i32 @extractelement_v16i8(<16 x i8> %vec) {
179 entry: 298 entry:
180 %res = extractelement <16 x i8> %vec, i32 1 299 %res = extractelement <16 x i8> %vec, i32 1
181 %res.ext = zext i8 %res to i32 300 %res.ext = zext i8 %res to i32
182 ret i32 %res.ext 301 ret i32 %res.ext
183 ; CHECK-LABEL: extractelement_v16i8 302 ; CHECK-LABEL: extractelement_v16i8
184 ; CHECK: movups 303 ; CHECK: movups
185 ; CHECK: lea 304 ; CHECK: lea
186 ; CHECK: mov 305 ; CHECK: mov
187 306
188 ; SSE41-LABEL: extractelement_v16i8 307 ; SSE41-LABEL: extractelement_v16i8
189 ; SSE41: pextrb 308 ; SSE41: pextrb
309
310 ; MIPS32-LABEL: extractelement_v16i8
311 ; MIPS32: srl a0,a0,0x8
312 ; MIPS32: andi a0,a0,0xff
313 ; MIPS32: andi a0,a0,0xff
314 ; MIPS32: move v0,a0
190 } 315 }
191 316
192 define internal i32 @extractelement_v4i1(<4 x i1> %vec) { 317 define internal i32 @extractelement_v4i1(<4 x i1> %vec) {
193 entry: 318 entry:
194 %res = extractelement <4 x i1> %vec, i32 1 319 %res = extractelement <4 x i1> %vec, i32 1
195 %res.ext = zext i1 %res to i32 320 %res.ext = zext i1 %res to i32
196 ret i32 %res.ext 321 ret i32 %res.ext
197 ; CHECK-LABEL: extractelement_v4i1 322 ; CHECK-LABEL: extractelement_v4i1
198 ; CHECK: pshufd 323 ; CHECK: pshufd
199 324
200 ; SSE41-LABEL: extractelement_v4i1 325 ; SSE41-LABEL: extractelement_v4i1
201 ; SSE41: pextrd 326 ; SSE41: pextrd
327
328 ; MIPS32-LABEL: extractelement_v4i1
329 ; MIPS32: andi a1,a1,0x1
330 ; MIPS32: andi a1,a1,0x1
331 ; MIPS32: move v0,a1
202 } 332 }
203 333
204 define internal i32 @extractelement_v8i1(<8 x i1> %vec) { 334 define internal i32 @extractelement_v8i1(<8 x i1> %vec) {
205 entry: 335 entry:
206 %res = extractelement <8 x i1> %vec, i32 1 336 %res = extractelement <8 x i1> %vec, i32 1
207 %res.ext = zext i1 %res to i32 337 %res.ext = zext i1 %res to i32
208 ret i32 %res.ext 338 ret i32 %res.ext
209 ; CHECK-LABEL: extractelement_v8i1 339 ; CHECK-LABEL: extractelement_v8i1
210 ; CHECK: pextrw 340 ; CHECK: pextrw
211 341
212 ; SSE41-LABEL: extractelement_v8i1 342 ; SSE41-LABEL: extractelement_v8i1
213 ; SSE41: pextrw 343 ; SSE41: pextrw
344
345 ; MIPS32-LABEL: extractelement_v8i1
346 ; MIPS32: srl a0,a0,0x10
347 ; MIPS32: andi a0,a0,0x1
348 ; MIPS32: andi a0,a0,0x1
349 ; MIPS32: move v0,a0
214 } 350 }
215 351
216 define internal i32 @extractelement_v16i1(<16 x i1> %vec) { 352 define internal i32 @extractelement_v16i1(<16 x i1> %vec) {
217 entry: 353 entry:
218 %res = extractelement <16 x i1> %vec, i32 1 354 %res = extractelement <16 x i1> %vec, i32 1
219 %res.ext = zext i1 %res to i32 355 %res.ext = zext i1 %res to i32
220 ret i32 %res.ext 356 ret i32 %res.ext
221 ; CHECK-LABEL: extractelement_v16i1 357 ; CHECK-LABEL: extractelement_v16i1
222 ; CHECK: movups 358 ; CHECK: movups
223 ; CHECK: lea 359 ; CHECK: lea
224 ; CHECK: mov 360 ; CHECK: mov
225 361
226 ; SSE41-LABEL: extractelement_v16i1 362 ; SSE41-LABEL: extractelement_v16i1
227 ; SSE41: pextrb 363 ; SSE41: pextrb
364
365 ; MIPS32-LABEL: extractelement_v16i1
366 ; MIPS32: srl a0,a0,0x8
367 ; MIPS32: andi a0,a0,0xff
368 ; MIPS32: andi a0,a0,0x1
369 ; MIPS32: andi a0,a0,0x1
370 ; MIPS32: move v0,a0
228 } 371 }
OLDNEW
« no previous file with comments | « tests_lit/llvm2ice_tests/vector-icmp.ll ('k') | tests_lit/llvm2ice_tests/vector-select.ll » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698