83
|
1 ; RUN: llc < %s -mtriple=x86_64-pc-linux-gnu | FileCheck %s --check-prefix=X64
|
|
2 ; RUN: llc < %s -mtriple=x86_64-pc-linux-gnux32 | FileCheck %s --check-prefix=X64
|
|
3 ; RUN: llc < %s -mtriple=i686-pc-linux | FileCheck %s --check-prefix=X86
|
|
4
|
|
5 define i32 @mul4_32(i32 %A) {
|
|
6 ; X64-LABEL: mul4_32:
|
|
7 ; X64: leal
|
|
8 ; X86-LABEL: mul4_32:
|
|
9 ; X86: shll
|
|
10 %mul = mul i32 %A, 4
|
|
11 ret i32 %mul
|
|
12 }
|
|
13
|
|
14 define i64 @mul4_64(i64 %A) {
|
|
15 ; X64-LABEL: mul4_64:
|
|
16 ; X64: leaq
|
|
17 ; X86-LABEL: mul4_64:
|
|
18 ; X86: shldl
|
|
19 ; X86: shll
|
|
20 %mul = mul i64 %A, 4
|
|
21 ret i64 %mul
|
|
22 }
|
|
23
|
|
24 define i32 @mul4096_32(i32 %A) {
|
|
25 ; X64-LABEL: mul4096_32:
|
|
26 ; X64: shll
|
|
27 ; X86-LABEL: mul4096_32:
|
|
28 ; X86: shll
|
|
29 %mul = mul i32 %A, 4096
|
|
30 ret i32 %mul
|
|
31 }
|
|
32
|
|
33 define i64 @mul4096_64(i64 %A) {
|
|
34 ; X64-LABEL: mul4096_64:
|
|
35 ; X64: shlq
|
|
36 ; X86-LABEL: mul4096_64:
|
|
37 ; X86: shldl
|
|
38 ; X86: shll
|
|
39 %mul = mul i64 %A, 4096
|
|
40 ret i64 %mul
|
|
41 }
|
|
42
|
|
43 define i32 @mulmin4096_32(i32 %A) {
|
|
44 ; X64-LABEL: mulmin4096_32:
|
|
45 ; X64: shll
|
|
46 ; X64-NEXT: negl
|
|
47 ; X86-LABEL: mulmin4096_32:
|
|
48 ; X86: shll
|
|
49 ; X86-NEXT: negl
|
|
50 %mul = mul i32 %A, -4096
|
|
51 ret i32 %mul
|
|
52 }
|
|
53
|
|
54 define i64 @mulmin4096_64(i64 %A) {
|
|
55 ; X64-LABEL: mulmin4096_64:
|
|
56 ; X64: shlq
|
|
57 ; X64-NEXT: negq
|
|
58 ; X86-LABEL: mulmin4096_64:
|
|
59 ; X86: shldl
|
|
60 ; X86-NEXT: shll
|
|
61 ; X86-NEXT: xorl
|
|
62 ; X86-NEXT: negl
|
|
63 ; X86-NEXT: sbbl
|
|
64 %mul = mul i64 %A, -4096
|
|
65 ret i64 %mul
|
|
66 }
|
|
67
|
|
68 define i32 @mul3_32(i32 %A) {
|
|
69 ; X64-LABEL: mul3_32:
|
|
70 ; X64: leal
|
|
71 ; X86-LABEL: mul3_32:
|
|
72 ; But why?!
|
|
73 ; X86: imull
|
|
74 %mul = mul i32 %A, 3
|
|
75 ret i32 %mul
|
|
76 }
|
|
77
|
|
78 define i64 @mul3_64(i64 %A) {
|
|
79 ; X64-LABEL: mul3_64:
|
|
80 ; X64: leaq
|
|
81 ; X86-LABEL: mul3_64:
|
|
82 ; X86: mull
|
|
83 ; X86-NEXT: imull
|
|
84 %mul = mul i64 %A, 3
|
|
85 ret i64 %mul
|
|
86 }
|
|
87
|
|
88 define i32 @mul40_32(i32 %A) {
|
|
89 ; X64-LABEL: mul40_32:
|
|
90 ; X64: shll
|
|
91 ; X64-NEXT: leal
|
|
92 ; X86-LABEL: mul40_32:
|
|
93 ; X86: shll
|
|
94 ; X86-NEXT: leal
|
|
95 %mul = mul i32 %A, 40
|
|
96 ret i32 %mul
|
|
97 }
|
|
98
|
|
99 define i64 @mul40_64(i64 %A) {
|
|
100 ; X64-LABEL: mul40_64:
|
|
101 ; X64: shlq
|
|
102 ; X64-NEXT: leaq
|
|
103 ; X86-LABEL: mul40_64:
|
|
104 ; X86: leal
|
|
105 ; X86-NEXT: movl
|
|
106 ; X86-NEXT: mull
|
|
107 ; X86-NEXT: leal
|
|
108 %mul = mul i64 %A, 40
|
|
109 ret i64 %mul
|
|
110 }
|
95
|
111
|
|
112 define i32 @mul4_32_minsize(i32 %A) minsize {
|
|
113 ; X64-LABEL: mul4_32_minsize:
|
|
114 ; X64: leal
|
|
115 ; X86-LABEL: mul4_32_minsize:
|
|
116 ; X86: shll
|
|
117 %mul = mul i32 %A, 4
|
|
118 ret i32 %mul
|
|
119 }
|
|
120
|
|
121 define i32 @mul40_32_minsize(i32 %A) minsize {
|
|
122 ; X64-LABEL: mul40_32_minsize:
|
|
123 ; X64: imull
|
|
124 ; X86-LABEL: mul40_32_minsize:
|
|
125 ; X86: imull
|
|
126 %mul = mul i32 %A, 40
|
|
127 ret i32 %mul
|
|
128 }
|