[ARM] Adjust how NEON shifts are lowered
[llvm-core.git] / test / CodeGen / X86 / mul-constant-i8.ll
blob7cb245a2eeef83cc5ac5b207465ffc2bb7279e56
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-- | FileCheck %s --check-prefix=X64
4 define i8 @test_mul_by_1(i8 %x) {
5 ; X64-LABEL: test_mul_by_1:
6 ; X64:       # %bb.0:
7 ; X64-NEXT:    movl %edi, %eax
8 ; X64-NEXT:    # kill: def $al killed $al killed $eax
9 ; X64-NEXT:    retq
10   %m = mul i8 %x, 1
11   ret i8 %m
14 define i8 @test_mul_by_2(i8 %x) {
15 ; X64-LABEL: test_mul_by_2:
16 ; X64:       # %bb.0:
17 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
18 ; X64-NEXT:    leal (%rdi,%rdi), %eax
19 ; X64-NEXT:    # kill: def $al killed $al killed $eax
20 ; X64-NEXT:    retq
21   %m = mul i8 %x, 2
22   ret i8 %m
25 define i8 @test_mul_by_3(i8 %x) {
26 ; X64-LABEL: test_mul_by_3:
27 ; X64:       # %bb.0:
28 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
29 ; X64-NEXT:    leal (%rdi,%rdi,2), %eax
30 ; X64-NEXT:    # kill: def $al killed $al killed $eax
31 ; X64-NEXT:    retq
32   %m = mul i8 %x, 3
33   ret i8 %m
36 define i8 @test_mul_by_4(i8 %x) {
37 ; X64-LABEL: test_mul_by_4:
38 ; X64:       # %bb.0:
39 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
40 ; X64-NEXT:    leal (,%rdi,4), %eax
41 ; X64-NEXT:    # kill: def $al killed $al killed $eax
42 ; X64-NEXT:    retq
43   %m = mul i8 %x, 4
44   ret i8 %m
47 define i8 @test_mul_by_5(i8 %x) {
48 ; X64-LABEL: test_mul_by_5:
49 ; X64:       # %bb.0:
50 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
51 ; X64-NEXT:    leal (%rdi,%rdi,4), %eax
52 ; X64-NEXT:    # kill: def $al killed $al killed $eax
53 ; X64-NEXT:    retq
54   %m = mul i8 %x, 5
55   ret i8 %m
58 define i8 @test_mul_by_6(i8 %x) {
59 ; X64-LABEL: test_mul_by_6:
60 ; X64:       # %bb.0:
61 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
62 ; X64-NEXT:    addl %edi, %edi
63 ; X64-NEXT:    leal (%rdi,%rdi,2), %eax
64 ; X64-NEXT:    # kill: def $al killed $al killed $eax
65 ; X64-NEXT:    retq
66   %m = mul i8 %x, 6
67   ret i8 %m
70 define i8 @test_mul_by_7(i8 %x) {
71 ; X64-LABEL: test_mul_by_7:
72 ; X64:       # %bb.0:
73 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
74 ; X64-NEXT:    leal (,%rdi,8), %eax
75 ; X64-NEXT:    subl %edi, %eax
76 ; X64-NEXT:    # kill: def $al killed $al killed $eax
77 ; X64-NEXT:    retq
78   %m = mul i8 %x, 7
79   ret i8 %m
82 define i8 @test_mul_by_8(i8 %x) {
83 ; X64-LABEL: test_mul_by_8:
84 ; X64:       # %bb.0:
85 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
86 ; X64-NEXT:    leal (,%rdi,8), %eax
87 ; X64-NEXT:    # kill: def $al killed $al killed $eax
88 ; X64-NEXT:    retq
89   %m = mul i8 %x, 8
90   ret i8 %m
93 define i8 @test_mul_by_9(i8 %x) {
94 ; X64-LABEL: test_mul_by_9:
95 ; X64:       # %bb.0:
96 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
97 ; X64-NEXT:    leal (%rdi,%rdi,8), %eax
98 ; X64-NEXT:    # kill: def $al killed $al killed $eax
99 ; X64-NEXT:    retq
100   %m = mul i8 %x, 9
101   ret i8 %m
104 define i8 @test_mul_by_10(i8 %x) {
105 ; X64-LABEL: test_mul_by_10:
106 ; X64:       # %bb.0:
107 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
108 ; X64-NEXT:    addl %edi, %edi
109 ; X64-NEXT:    leal (%rdi,%rdi,4), %eax
110 ; X64-NEXT:    # kill: def $al killed $al killed $eax
111 ; X64-NEXT:    retq
112   %m = mul i8 %x, 10
113   ret i8 %m
116 define i8 @test_mul_by_11(i8 %x) {
117 ; X64-LABEL: test_mul_by_11:
118 ; X64:       # %bb.0:
119 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
120 ; X64-NEXT:    leal (%rdi,%rdi,4), %eax
121 ; X64-NEXT:    leal (%rdi,%rax,2), %eax
122 ; X64-NEXT:    # kill: def $al killed $al killed $eax
123 ; X64-NEXT:    retq
124   %m = mul i8 %x, 11
125   ret i8 %m
128 define i8 @test_mul_by_12(i8 %x) {
129 ; X64-LABEL: test_mul_by_12:
130 ; X64:       # %bb.0:
131 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
132 ; X64-NEXT:    shll $2, %edi
133 ; X64-NEXT:    leal (%rdi,%rdi,2), %eax
134 ; X64-NEXT:    # kill: def $al killed $al killed $eax
135 ; X64-NEXT:    retq
136   %m = mul i8 %x, 12
137   ret i8 %m
140 define i8 @test_mul_by_13(i8 %x) {
141 ; X64-LABEL: test_mul_by_13:
142 ; X64:       # %bb.0:
143 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
144 ; X64-NEXT:    leal (%rdi,%rdi,2), %eax
145 ; X64-NEXT:    leal (%rdi,%rax,4), %eax
146 ; X64-NEXT:    # kill: def $al killed $al killed $eax
147 ; X64-NEXT:    retq
148   %m = mul i8 %x, 13
149   ret i8 %m
152 define i8 @test_mul_by_14(i8 %x) {
153 ; X64-LABEL: test_mul_by_14:
154 ; X64:       # %bb.0:
155 ; X64-NEXT:    movl %edi, %eax
156 ; X64-NEXT:    shll $4, %eax
157 ; X64-NEXT:    subl %edi, %eax
158 ; X64-NEXT:    subl %edi, %eax
159 ; X64-NEXT:    # kill: def $al killed $al killed $eax
160 ; X64-NEXT:    retq
161   %m = mul i8 %x, 14
162   ret i8 %m
165 define i8 @test_mul_by_15(i8 %x) {
166 ; X64-LABEL: test_mul_by_15:
167 ; X64:       # %bb.0:
168 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
169 ; X64-NEXT:    leal (%rdi,%rdi,4), %eax
170 ; X64-NEXT:    leal (%rax,%rax,2), %eax
171 ; X64-NEXT:    # kill: def $al killed $al killed $eax
172 ; X64-NEXT:    retq
173   %m = mul i8 %x, 15
174   ret i8 %m
177 define i8 @test_mul_by_16(i8 %x) {
178 ; X64-LABEL: test_mul_by_16:
179 ; X64:       # %bb.0:
180 ; X64-NEXT:    movl %edi, %eax
181 ; X64-NEXT:    shlb $4, %al
182 ; X64-NEXT:    # kill: def $al killed $al killed $eax
183 ; X64-NEXT:    retq
184   %m = mul i8 %x, 16
185   ret i8 %m
188 define i8 @test_mul_by_17(i8 %x) {
189 ; X64-LABEL: test_mul_by_17:
190 ; X64:       # %bb.0:
191 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
192 ; X64-NEXT:    movl %edi, %eax
193 ; X64-NEXT:    shll $4, %eax
194 ; X64-NEXT:    addl %edi, %eax
195 ; X64-NEXT:    # kill: def $al killed $al killed $eax
196 ; X64-NEXT:    retq
197   %m = mul i8 %x, 17
198   ret i8 %m
201 define i8 @test_mul_by_18(i8 %x) {
202 ; X64-LABEL: test_mul_by_18:
203 ; X64:       # %bb.0:
204 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
205 ; X64-NEXT:    addl %edi, %edi
206 ; X64-NEXT:    leal (%rdi,%rdi,8), %eax
207 ; X64-NEXT:    # kill: def $al killed $al killed $eax
208 ; X64-NEXT:    retq
209   %m = mul i8 %x, 18
210   ret i8 %m
213 define i8 @test_mul_by_19(i8 %x) {
214 ; X64-LABEL: test_mul_by_19:
215 ; X64:       # %bb.0:
216 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
217 ; X64-NEXT:    leal (%rdi,%rdi,8), %eax
218 ; X64-NEXT:    leal (%rdi,%rax,2), %eax
219 ; X64-NEXT:    # kill: def $al killed $al killed $eax
220 ; X64-NEXT:    retq
221   %m = mul i8 %x, 19
222   ret i8 %m
225 define i8 @test_mul_by_20(i8 %x) {
226 ; X64-LABEL: test_mul_by_20:
227 ; X64:       # %bb.0:
228 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
229 ; X64-NEXT:    shll $2, %edi
230 ; X64-NEXT:    leal (%rdi,%rdi,4), %eax
231 ; X64-NEXT:    # kill: def $al killed $al killed $eax
232 ; X64-NEXT:    retq
233   %m = mul i8 %x, 20
234   ret i8 %m
237 define i8 @test_mul_by_21(i8 %x) {
238 ; X64-LABEL: test_mul_by_21:
239 ; X64:       # %bb.0:
240 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
241 ; X64-NEXT:    leal (%rdi,%rdi,4), %eax
242 ; X64-NEXT:    leal (%rdi,%rax,4), %eax
243 ; X64-NEXT:    # kill: def $al killed $al killed $eax
244 ; X64-NEXT:    retq
245   %m = mul i8 %x, 21
246   ret i8 %m
249 define i8 @test_mul_by_22(i8 %x) {
250 ; X64-LABEL: test_mul_by_22:
251 ; X64:       # %bb.0:
252 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
253 ; X64-NEXT:    leal (%rdi,%rdi,4), %eax
254 ; X64-NEXT:    leal (%rdi,%rax,4), %eax
255 ; X64-NEXT:    addl %edi, %eax
256 ; X64-NEXT:    # kill: def $al killed $al killed $eax
257 ; X64-NEXT:    retq
258   %m = mul i8 %x, 22
259   ret i8 %m
262 define i8 @test_mul_by_23(i8 %x) {
263 ; X64-LABEL: test_mul_by_23:
264 ; X64:       # %bb.0:
265 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
266 ; X64-NEXT:    leal (%rdi,%rdi,2), %eax
267 ; X64-NEXT:    shll $3, %eax
268 ; X64-NEXT:    subl %edi, %eax
269 ; X64-NEXT:    # kill: def $al killed $al killed $eax
270 ; X64-NEXT:    retq
271   %m = mul i8 %x, 23
272   ret i8 %m
275 define i8 @test_mul_by_24(i8 %x) {
276 ; X64-LABEL: test_mul_by_24:
277 ; X64:       # %bb.0:
278 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
279 ; X64-NEXT:    shll $3, %edi
280 ; X64-NEXT:    leal (%rdi,%rdi,2), %eax
281 ; X64-NEXT:    # kill: def $al killed $al killed $eax
282 ; X64-NEXT:    retq
283   %m = mul i8 %x, 24
284   ret i8 %m
287 define i8 @test_mul_by_25(i8 %x) {
288 ; X64-LABEL: test_mul_by_25:
289 ; X64:       # %bb.0:
290 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
291 ; X64-NEXT:    leal (%rdi,%rdi,4), %eax
292 ; X64-NEXT:    leal (%rax,%rax,4), %eax
293 ; X64-NEXT:    # kill: def $al killed $al killed $eax
294 ; X64-NEXT:    retq
295   %m = mul i8 %x, 25
296   ret i8 %m
299 define i8 @test_mul_by_26(i8 %x) {
300 ; X64-LABEL: test_mul_by_26:
301 ; X64:       # %bb.0:
302 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
303 ; X64-NEXT:    leal (%rdi,%rdi,4), %eax
304 ; X64-NEXT:    leal (%rax,%rax,4), %eax
305 ; X64-NEXT:    addl %edi, %eax
306 ; X64-NEXT:    # kill: def $al killed $al killed $eax
307 ; X64-NEXT:    retq
308   %m = mul i8 %x, 26
309   ret i8 %m
312 define i8 @test_mul_by_27(i8 %x) {
313 ; X64-LABEL: test_mul_by_27:
314 ; X64:       # %bb.0:
315 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
316 ; X64-NEXT:    leal (%rdi,%rdi,8), %eax
317 ; X64-NEXT:    leal (%rax,%rax,2), %eax
318 ; X64-NEXT:    # kill: def $al killed $al killed $eax
319 ; X64-NEXT:    retq
320   %m = mul i8 %x, 27
321   ret i8 %m
324 define i8 @test_mul_by_28(i8 %x) {
325 ; X64-LABEL: test_mul_by_28:
326 ; X64:       # %bb.0:
327 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
328 ; X64-NEXT:    leal (%rdi,%rdi,8), %eax
329 ; X64-NEXT:    leal (%rax,%rax,2), %eax
330 ; X64-NEXT:    addl %edi, %eax
331 ; X64-NEXT:    # kill: def $al killed $al killed $eax
332 ; X64-NEXT:    retq
333   %m = mul i8 %x, 28
334   ret i8 %m
337 define i8 @test_mul_by_29(i8 %x) {
338 ; X64-LABEL: test_mul_by_29:
339 ; X64:       # %bb.0:
340 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
341 ; X64-NEXT:    leal (%rdi,%rdi,8), %eax
342 ; X64-NEXT:    leal (%rax,%rax,2), %eax
343 ; X64-NEXT:    addl %edi, %eax
344 ; X64-NEXT:    addl %edi, %eax
345 ; X64-NEXT:    # kill: def $al killed $al killed $eax
346 ; X64-NEXT:    retq
347   %m = mul i8 %x, 29
348   ret i8 %m
351 define i8 @test_mul_by_30(i8 %x) {
352 ; X64-LABEL: test_mul_by_30:
353 ; X64:       # %bb.0:
354 ; X64-NEXT:    movl %edi, %eax
355 ; X64-NEXT:    shll $5, %eax
356 ; X64-NEXT:    subl %edi, %eax
357 ; X64-NEXT:    subl %edi, %eax
358 ; X64-NEXT:    # kill: def $al killed $al killed $eax
359 ; X64-NEXT:    retq
360   %m = mul i8 %x, 30
361   ret i8 %m
364 define i8 @test_mul_by_31(i8 %x) {
365 ; X64-LABEL: test_mul_by_31:
366 ; X64:       # %bb.0:
367 ; X64-NEXT:    movl %edi, %eax
368 ; X64-NEXT:    shll $5, %eax
369 ; X64-NEXT:    subl %edi, %eax
370 ; X64-NEXT:    # kill: def $al killed $al killed $eax
371 ; X64-NEXT:    retq
372   %m = mul i8 %x, 31
373   ret i8 %m
376 define i8 @test_mul_by_32(i8 %x) {
377 ; X64-LABEL: test_mul_by_32:
378 ; X64:       # %bb.0:
379 ; X64-NEXT:    movl %edi, %eax
380 ; X64-NEXT:    shlb $5, %al
381 ; X64-NEXT:    # kill: def $al killed $al killed $eax
382 ; X64-NEXT:    retq
383   %m = mul i8 %x, 32
384   ret i8 %m
387 define i8 @test_mul_by_37(i8 %x) {
388 ; X64-LABEL: test_mul_by_37:
389 ; X64:       # %bb.0:
390 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
391 ; X64-NEXT:    leal (%rdi,%rdi,8), %eax
392 ; X64-NEXT:    leal (%rdi,%rax,4), %eax
393 ; X64-NEXT:    # kill: def $al killed $al killed $eax
394 ; X64-NEXT:    retq
395   %m = mul i8 %x, 37
396   ret i8 %m
399 define i8 @test_mul_by_41(i8 %x) {
400 ; X64-LABEL: test_mul_by_41:
401 ; X64:       # %bb.0:
402 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
403 ; X64-NEXT:    leal (%rdi,%rdi,4), %eax
404 ; X64-NEXT:    leal (%rdi,%rax,8), %eax
405 ; X64-NEXT:    # kill: def $al killed $al killed $eax
406 ; X64-NEXT:    retq
407   %m = mul i8 %x, 41
408   ret i8 %m
411 define i8 @test_mul_by_62(i8 %x) {
412 ; X64-LABEL: test_mul_by_62:
413 ; X64:       # %bb.0:
414 ; X64-NEXT:    movl %edi, %eax
415 ; X64-NEXT:    shll $6, %eax
416 ; X64-NEXT:    subl %edi, %eax
417 ; X64-NEXT:    subl %edi, %eax
418 ; X64-NEXT:    # kill: def $al killed $al killed $eax
419 ; X64-NEXT:    retq
420   %m = mul i8 %x, 62
421   ret i8 %m
424 define i8 @test_mul_by_66(i8 %x) {
425 ; X64-LABEL: test_mul_by_66:
426 ; X64:       # %bb.0:
427 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
428 ; X64-NEXT:    movl %edi, %eax
429 ; X64-NEXT:    shll $6, %eax
430 ; X64-NEXT:    leal (%rax,%rdi,2), %eax
431 ; X64-NEXT:    # kill: def $al killed $al killed $eax
432 ; X64-NEXT:    retq
433   %m = mul i8 %x, 66
434   ret i8 %m
437 define i8 @test_mul_by_73(i8 %x) {
438 ; X64-LABEL: test_mul_by_73:
439 ; X64:       # %bb.0:
440 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
441 ; X64-NEXT:    leal (%rdi,%rdi,8), %eax
442 ; X64-NEXT:    leal (%rdi,%rax,8), %eax
443 ; X64-NEXT:    # kill: def $al killed $al killed $eax
444 ; X64-NEXT:    retq
445   %m = mul i8 %x, 73
446   ret i8 %m
449 define i8 @test_mul_by_520(i8 %x) {
450 ; X64-LABEL: test_mul_by_520:
451 ; X64:       # %bb.0:
452 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
453 ; X64-NEXT:    leal (,%rdi,8), %eax
454 ; X64-NEXT:    # kill: def $al killed $al killed $eax
455 ; X64-NEXT:    retq
456   %m = mul i8 %x, 520
457   ret i8 %m
460 define i8 @test_mul_by_neg10(i8 %x) {
461 ; X64-LABEL: test_mul_by_neg10:
462 ; X64:       # %bb.0:
463 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
464 ; X64-NEXT:    addl %edi, %edi
465 ; X64-NEXT:    leal (%rdi,%rdi,4), %eax
466 ; X64-NEXT:    negl %eax
467 ; X64-NEXT:    # kill: def $al killed $al killed $eax
468 ; X64-NEXT:    retq
469   %m = mul i8 %x, -10
470   ret i8 %m
473 define i8 @test_mul_by_neg36(i8 %x) {
474 ; X64-LABEL: test_mul_by_neg36:
475 ; X64:       # %bb.0:
476 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
477 ; X64-NEXT:    shll $2, %edi
478 ; X64-NEXT:    leal (%rdi,%rdi,8), %eax
479 ; X64-NEXT:    negl %eax
480 ; X64-NEXT:    # kill: def $al killed $al killed $eax
481 ; X64-NEXT:    retq
482   %m = mul i8 %x, -36
483   ret i8 %m