xref: /llvm-project/llvm/test/CodeGen/X86/isel-shift.ll (revision cc455033d4d4f5731461a6d5fa72e0f9bf871a70)
1*cc455033SEvgenii Kudriashov; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*cc455033SEvgenii Kudriashov; RUN: llc < %s -mtriple=i686-apple-darwin10 | FileCheck %s --check-prefixes=X86,SDAG,SDAG-X86
3*cc455033SEvgenii Kudriashov; RUN: llc < %s -mtriple=i686-apple-darwin10 -fast-isel -fast-isel-abort=1 | FileCheck %s --check-prefixes=X86,FASTISEL-X86
4*cc455033SEvgenii Kudriashov; TODO: llc < %s -mtriple=i686-apple-darwin10 -global-isel -global-isel-abort=1 | FileCheck %s --check-prefixes=X86,GISEL-X86
5*cc455033SEvgenii Kudriashov; RUN: llc < %s -mtriple=x86_64-apple-darwin10 | FileCheck %s --check-prefixes=X64,SDAG,SDAG-X64
6*cc455033SEvgenii Kudriashov; RUN: llc < %s -mtriple=x86_64-apple-darwin10 -fast-isel -fast-isel-abort=1 | FileCheck %s --check-prefixes=X64,FASTISEL-X64
7*cc455033SEvgenii Kudriashov; RUN: llc < %s -mtriple=x86_64-apple-darwin10 -global-isel -global-isel-abort=1 | FileCheck %s --check-prefixes=X64,GISEL-X64
8*cc455033SEvgenii Kudriashov
9*cc455033SEvgenii Kudriashovdefine i8 @shl_i8(i8 %a, i8 %b) {
10*cc455033SEvgenii Kudriashov; X86-LABEL: shl_i8:
11*cc455033SEvgenii Kudriashov; X86:       ## %bb.0:
12*cc455033SEvgenii Kudriashov; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx
13*cc455033SEvgenii Kudriashov; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
14*cc455033SEvgenii Kudriashov; X86-NEXT:    shlb %cl, %al
15*cc455033SEvgenii Kudriashov; X86-NEXT:    retl
16*cc455033SEvgenii Kudriashov;
17*cc455033SEvgenii Kudriashov; SDAG-X64-LABEL: shl_i8:
18*cc455033SEvgenii Kudriashov; SDAG-X64:       ## %bb.0:
19*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    movl %esi, %ecx
20*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    movl %edi, %eax
21*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx
22*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    shlb %cl, %al
23*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    ## kill: def $al killed $al killed $eax
24*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    retq
25*cc455033SEvgenii Kudriashov;
26*cc455033SEvgenii Kudriashov; FASTISEL-X64-LABEL: shl_i8:
27*cc455033SEvgenii Kudriashov; FASTISEL-X64:       ## %bb.0:
28*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    movl %esi, %ecx
29*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    movl %edi, %eax
30*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx
31*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    shlb %cl, %al
32*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    ## kill: def $al killed $al killed $eax
33*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    retq
34*cc455033SEvgenii Kudriashov;
35*cc455033SEvgenii Kudriashov; GISEL-X64-LABEL: shl_i8:
36*cc455033SEvgenii Kudriashov; GISEL-X64:       ## %bb.0:
37*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    movl %edi, %eax
38*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    movl %esi, %ecx
39*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx
40*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    shlb %cl, %al
41*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    ## kill: def $al killed $al killed $eax
42*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    retq
43*cc455033SEvgenii Kudriashov  %c = shl i8 %a, %b
44*cc455033SEvgenii Kudriashov  ret i8 %c
45*cc455033SEvgenii Kudriashov}
46*cc455033SEvgenii Kudriashov
47*cc455033SEvgenii Kudriashovdefine i16 @shl_i16(i16 %a, i16 %b) {
48*cc455033SEvgenii Kudriashov; SDAG-X86-LABEL: shl_i16:
49*cc455033SEvgenii Kudriashov; SDAG-X86:       ## %bb.0:
50*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx
51*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
52*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    shll %cl, %eax
53*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    ## kill: def $ax killed $ax killed $eax
54*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    retl
55*cc455033SEvgenii Kudriashov;
56*cc455033SEvgenii Kudriashov; FASTISEL-X86-LABEL: shl_i16:
57*cc455033SEvgenii Kudriashov; FASTISEL-X86:       ## %bb.0:
58*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx
59*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
60*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    ## kill: def $cl killed $cx
61*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    shlw %cl, %ax
62*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    retl
63*cc455033SEvgenii Kudriashov;
64*cc455033SEvgenii Kudriashov; SDAG-X64-LABEL: shl_i16:
65*cc455033SEvgenii Kudriashov; SDAG-X64:       ## %bb.0:
66*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    movl %esi, %ecx
67*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    movl %edi, %eax
68*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx
69*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    shll %cl, %eax
70*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    ## kill: def $ax killed $ax killed $eax
71*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    retq
72*cc455033SEvgenii Kudriashov;
73*cc455033SEvgenii Kudriashov; FASTISEL-X64-LABEL: shl_i16:
74*cc455033SEvgenii Kudriashov; FASTISEL-X64:       ## %bb.0:
75*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    movl %esi, %ecx
76*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    movl %edi, %eax
77*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    ## kill: def $cx killed $cx killed $ecx
78*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    ## kill: def $cl killed $cx
79*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    shlw %cl, %ax
80*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax
81*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    retq
82*cc455033SEvgenii Kudriashov;
83*cc455033SEvgenii Kudriashov; GISEL-X64-LABEL: shl_i16:
84*cc455033SEvgenii Kudriashov; GISEL-X64:       ## %bb.0:
85*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    movl %edi, %eax
86*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    movl %esi, %ecx
87*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx
88*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    shlw %cl, %ax
89*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax
90*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    retq
91*cc455033SEvgenii Kudriashov  %c = shl i16 %a, %b
92*cc455033SEvgenii Kudriashov  ret i16 %c
93*cc455033SEvgenii Kudriashov}
94*cc455033SEvgenii Kudriashov
95*cc455033SEvgenii Kudriashovdefine i32 @shl_i32(i32 %a, i32 %b) {
96*cc455033SEvgenii Kudriashov; SDAG-X86-LABEL: shl_i32:
97*cc455033SEvgenii Kudriashov; SDAG-X86:       ## %bb.0:
98*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx
99*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
100*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    shll %cl, %eax
101*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    retl
102*cc455033SEvgenii Kudriashov;
103*cc455033SEvgenii Kudriashov; FASTISEL-X86-LABEL: shl_i32:
104*cc455033SEvgenii Kudriashov; FASTISEL-X86:       ## %bb.0:
105*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
106*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
107*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    ## kill: def $cl killed $ecx
108*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    shll %cl, %eax
109*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    retl
110*cc455033SEvgenii Kudriashov;
111*cc455033SEvgenii Kudriashov; SDAG-X64-LABEL: shl_i32:
112*cc455033SEvgenii Kudriashov; SDAG-X64:       ## %bb.0:
113*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    movl %esi, %ecx
114*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    movl %edi, %eax
115*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx
116*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    shll %cl, %eax
117*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    retq
118*cc455033SEvgenii Kudriashov;
119*cc455033SEvgenii Kudriashov; FASTISEL-X64-LABEL: shl_i32:
120*cc455033SEvgenii Kudriashov; FASTISEL-X64:       ## %bb.0:
121*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    movl %esi, %ecx
122*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    movl %edi, %eax
123*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    ## kill: def $cl killed $ecx
124*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    shll %cl, %eax
125*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    retq
126*cc455033SEvgenii Kudriashov;
127*cc455033SEvgenii Kudriashov; GISEL-X64-LABEL: shl_i32:
128*cc455033SEvgenii Kudriashov; GISEL-X64:       ## %bb.0:
129*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    movl %edi, %eax
130*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    movl %esi, %ecx
131*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx
132*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    shll %cl, %eax
133*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    retq
134*cc455033SEvgenii Kudriashov  %c = shl i32 %a, %b
135*cc455033SEvgenii Kudriashov  ret i32 %c
136*cc455033SEvgenii Kudriashov}
137*cc455033SEvgenii Kudriashov
138*cc455033SEvgenii Kudriashovdefine i64 @shl_i64(i64 %a, i64 %b) nounwind {
139*cc455033SEvgenii Kudriashov; SDAG-X86-LABEL: shl_i64:
140*cc455033SEvgenii Kudriashov; SDAG-X86:       ## %bb.0:
141*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    pushl %esi
142*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx
143*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
144*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
145*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movl %esi, %eax
146*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    shll %cl, %eax
147*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    shldl %cl, %esi, %edx
148*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    testb $32, %cl
149*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    je LBB3_2
150*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:  ## %bb.1:
151*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movl %eax, %edx
152*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    xorl %eax, %eax
153*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:  LBB3_2:
154*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    popl %esi
155*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    retl
156*cc455033SEvgenii Kudriashov;
157*cc455033SEvgenii Kudriashov; FASTISEL-X86-LABEL: shl_i64:
158*cc455033SEvgenii Kudriashov; FASTISEL-X86:       ## %bb.0:
159*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
160*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
161*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
162*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    shldl %cl, %eax, %edx
163*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    shll %cl, %eax
164*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    testb $32, %cl
165*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    je LBB3_2
166*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:  ## %bb.1:
167*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movl %eax, %edx
168*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    xorl %eax, %eax
169*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:  LBB3_2:
170*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    retl
171*cc455033SEvgenii Kudriashov;
172*cc455033SEvgenii Kudriashov; SDAG-X64-LABEL: shl_i64:
173*cc455033SEvgenii Kudriashov; SDAG-X64:       ## %bb.0:
174*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    movq %rsi, %rcx
175*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    movq %rdi, %rax
176*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    ## kill: def $cl killed $cl killed $rcx
177*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    shlq %cl, %rax
178*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    retq
179*cc455033SEvgenii Kudriashov;
180*cc455033SEvgenii Kudriashov; FASTISEL-X64-LABEL: shl_i64:
181*cc455033SEvgenii Kudriashov; FASTISEL-X64:       ## %bb.0:
182*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    movq %rsi, %rcx
183*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    movq %rdi, %rax
184*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    ## kill: def $cl killed $rcx
185*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    shlq %cl, %rax
186*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    retq
187*cc455033SEvgenii Kudriashov;
188*cc455033SEvgenii Kudriashov; GISEL-X64-LABEL: shl_i64:
189*cc455033SEvgenii Kudriashov; GISEL-X64:       ## %bb.0:
190*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    movq %rdi, %rax
191*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    movq %rsi, %rcx
192*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    ## kill: def $cl killed $cl killed $rcx
193*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    shlq %cl, %rax
194*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    retq
195*cc455033SEvgenii Kudriashov  %c = shl i64 %a, %b
196*cc455033SEvgenii Kudriashov  ret i64 %c
197*cc455033SEvgenii Kudriashov}
198*cc455033SEvgenii Kudriashov
199*cc455033SEvgenii Kudriashovdefine i8 @lshr_i8(i8 %a, i8 %b) {
200*cc455033SEvgenii Kudriashov; X86-LABEL: lshr_i8:
201*cc455033SEvgenii Kudriashov; X86:       ## %bb.0:
202*cc455033SEvgenii Kudriashov; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx
203*cc455033SEvgenii Kudriashov; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
204*cc455033SEvgenii Kudriashov; X86-NEXT:    shrb %cl, %al
205*cc455033SEvgenii Kudriashov; X86-NEXT:    retl
206*cc455033SEvgenii Kudriashov;
207*cc455033SEvgenii Kudriashov; SDAG-X64-LABEL: lshr_i8:
208*cc455033SEvgenii Kudriashov; SDAG-X64:       ## %bb.0:
209*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    movl %esi, %ecx
210*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    movl %edi, %eax
211*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx
212*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    shrb %cl, %al
213*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    ## kill: def $al killed $al killed $eax
214*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    retq
215*cc455033SEvgenii Kudriashov;
216*cc455033SEvgenii Kudriashov; FASTISEL-X64-LABEL: lshr_i8:
217*cc455033SEvgenii Kudriashov; FASTISEL-X64:       ## %bb.0:
218*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    movl %esi, %ecx
219*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    movl %edi, %eax
220*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx
221*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    shrb %cl, %al
222*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    ## kill: def $al killed $al killed $eax
223*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    retq
224*cc455033SEvgenii Kudriashov;
225*cc455033SEvgenii Kudriashov; GISEL-X64-LABEL: lshr_i8:
226*cc455033SEvgenii Kudriashov; GISEL-X64:       ## %bb.0:
227*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    movl %edi, %eax
228*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    movl %esi, %ecx
229*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx
230*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    shrb %cl, %al
231*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    ## kill: def $al killed $al killed $eax
232*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    retq
233*cc455033SEvgenii Kudriashov  %c = lshr i8 %a, %b
234*cc455033SEvgenii Kudriashov  ret i8 %c
235*cc455033SEvgenii Kudriashov}
236*cc455033SEvgenii Kudriashov
237*cc455033SEvgenii Kudriashovdefine i16 @lshr_i16(i16 %a, i16 %b) {
238*cc455033SEvgenii Kudriashov; SDAG-X86-LABEL: lshr_i16:
239*cc455033SEvgenii Kudriashov; SDAG-X86:       ## %bb.0:
240*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx
241*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
242*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    shrl %cl, %eax
243*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    ## kill: def $ax killed $ax killed $eax
244*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    retl
245*cc455033SEvgenii Kudriashov;
246*cc455033SEvgenii Kudriashov; FASTISEL-X86-LABEL: lshr_i16:
247*cc455033SEvgenii Kudriashov; FASTISEL-X86:       ## %bb.0:
248*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx
249*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
250*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    ## kill: def $cl killed $cx
251*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    shrw %cl, %ax
252*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    retl
253*cc455033SEvgenii Kudriashov;
254*cc455033SEvgenii Kudriashov; SDAG-X64-LABEL: lshr_i16:
255*cc455033SEvgenii Kudriashov; SDAG-X64:       ## %bb.0:
256*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    movl %esi, %ecx
257*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    movzwl %di, %eax
258*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx
259*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    shrl %cl, %eax
260*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    ## kill: def $ax killed $ax killed $eax
261*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    retq
262*cc455033SEvgenii Kudriashov;
263*cc455033SEvgenii Kudriashov; FASTISEL-X64-LABEL: lshr_i16:
264*cc455033SEvgenii Kudriashov; FASTISEL-X64:       ## %bb.0:
265*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    movl %esi, %ecx
266*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    movl %edi, %eax
267*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    ## kill: def $cx killed $cx killed $ecx
268*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    ## kill: def $cl killed $cx
269*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    shrw %cl, %ax
270*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax
271*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    retq
272*cc455033SEvgenii Kudriashov;
273*cc455033SEvgenii Kudriashov; GISEL-X64-LABEL: lshr_i16:
274*cc455033SEvgenii Kudriashov; GISEL-X64:       ## %bb.0:
275*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    movl %edi, %eax
276*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    movl %esi, %ecx
277*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx
278*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    shrw %cl, %ax
279*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax
280*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    retq
281*cc455033SEvgenii Kudriashov  %c = lshr i16 %a, %b
282*cc455033SEvgenii Kudriashov  ret i16 %c
283*cc455033SEvgenii Kudriashov}
284*cc455033SEvgenii Kudriashov
285*cc455033SEvgenii Kudriashovdefine i32 @lshr_i32(i32 %a, i32 %b) {
286*cc455033SEvgenii Kudriashov; SDAG-X86-LABEL: lshr_i32:
287*cc455033SEvgenii Kudriashov; SDAG-X86:       ## %bb.0:
288*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx
289*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
290*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    shrl %cl, %eax
291*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    retl
292*cc455033SEvgenii Kudriashov;
293*cc455033SEvgenii Kudriashov; FASTISEL-X86-LABEL: lshr_i32:
294*cc455033SEvgenii Kudriashov; FASTISEL-X86:       ## %bb.0:
295*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
296*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
297*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    ## kill: def $cl killed $ecx
298*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    shrl %cl, %eax
299*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    retl
300*cc455033SEvgenii Kudriashov;
301*cc455033SEvgenii Kudriashov; SDAG-X64-LABEL: lshr_i32:
302*cc455033SEvgenii Kudriashov; SDAG-X64:       ## %bb.0:
303*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    movl %esi, %ecx
304*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    movl %edi, %eax
305*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx
306*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    shrl %cl, %eax
307*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    retq
308*cc455033SEvgenii Kudriashov;
309*cc455033SEvgenii Kudriashov; FASTISEL-X64-LABEL: lshr_i32:
310*cc455033SEvgenii Kudriashov; FASTISEL-X64:       ## %bb.0:
311*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    movl %esi, %ecx
312*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    movl %edi, %eax
313*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    ## kill: def $cl killed $ecx
314*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    shrl %cl, %eax
315*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    retq
316*cc455033SEvgenii Kudriashov;
317*cc455033SEvgenii Kudriashov; GISEL-X64-LABEL: lshr_i32:
318*cc455033SEvgenii Kudriashov; GISEL-X64:       ## %bb.0:
319*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    movl %edi, %eax
320*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    movl %esi, %ecx
321*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx
322*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    shrl %cl, %eax
323*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    retq
324*cc455033SEvgenii Kudriashov  %c = lshr i32 %a, %b
325*cc455033SEvgenii Kudriashov  ret i32 %c
326*cc455033SEvgenii Kudriashov}
327*cc455033SEvgenii Kudriashov
328*cc455033SEvgenii Kudriashovdefine i64 @lshr_i64(i64 %a, i64 %b) nounwind {
329*cc455033SEvgenii Kudriashov; SDAG-X86-LABEL: lshr_i64:
330*cc455033SEvgenii Kudriashov; SDAG-X86:       ## %bb.0:
331*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    pushl %esi
332*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx
333*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
334*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
335*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movl %esi, %edx
336*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    shrl %cl, %edx
337*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    shrdl %cl, %esi, %eax
338*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    testb $32, %cl
339*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    je LBB7_2
340*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:  ## %bb.1:
341*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movl %edx, %eax
342*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    xorl %edx, %edx
343*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:  LBB7_2:
344*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    popl %esi
345*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    retl
346*cc455033SEvgenii Kudriashov;
347*cc455033SEvgenii Kudriashov; FASTISEL-X86-LABEL: lshr_i64:
348*cc455033SEvgenii Kudriashov; FASTISEL-X86:       ## %bb.0:
349*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
350*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
351*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
352*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    shrdl %cl, %edx, %eax
353*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    shrl %cl, %edx
354*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    testb $32, %cl
355*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    je LBB7_2
356*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:  ## %bb.1:
357*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movl %edx, %eax
358*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    xorl %edx, %edx
359*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:  LBB7_2:
360*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    retl
361*cc455033SEvgenii Kudriashov;
362*cc455033SEvgenii Kudriashov; SDAG-X64-LABEL: lshr_i64:
363*cc455033SEvgenii Kudriashov; SDAG-X64:       ## %bb.0:
364*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    movq %rsi, %rcx
365*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    movq %rdi, %rax
366*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    ## kill: def $cl killed $cl killed $rcx
367*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    shrq %cl, %rax
368*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    retq
369*cc455033SEvgenii Kudriashov;
370*cc455033SEvgenii Kudriashov; FASTISEL-X64-LABEL: lshr_i64:
371*cc455033SEvgenii Kudriashov; FASTISEL-X64:       ## %bb.0:
372*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    movq %rsi, %rcx
373*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    movq %rdi, %rax
374*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    ## kill: def $cl killed $rcx
375*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    shrq %cl, %rax
376*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    retq
377*cc455033SEvgenii Kudriashov;
378*cc455033SEvgenii Kudriashov; GISEL-X64-LABEL: lshr_i64:
379*cc455033SEvgenii Kudriashov; GISEL-X64:       ## %bb.0:
380*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    movq %rdi, %rax
381*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    movq %rsi, %rcx
382*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    ## kill: def $cl killed $cl killed $rcx
383*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    shrq %cl, %rax
384*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    retq
385*cc455033SEvgenii Kudriashov  %c = lshr i64 %a, %b
386*cc455033SEvgenii Kudriashov  ret i64 %c
387*cc455033SEvgenii Kudriashov}
388*cc455033SEvgenii Kudriashov
389*cc455033SEvgenii Kudriashovdefine i8 @ashr_i8(i8 %a, i8 %b) {
390*cc455033SEvgenii Kudriashov; X86-LABEL: ashr_i8:
391*cc455033SEvgenii Kudriashov; X86:       ## %bb.0:
392*cc455033SEvgenii Kudriashov; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx
393*cc455033SEvgenii Kudriashov; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
394*cc455033SEvgenii Kudriashov; X86-NEXT:    sarb %cl, %al
395*cc455033SEvgenii Kudriashov; X86-NEXT:    retl
396*cc455033SEvgenii Kudriashov;
397*cc455033SEvgenii Kudriashov; SDAG-X64-LABEL: ashr_i8:
398*cc455033SEvgenii Kudriashov; SDAG-X64:       ## %bb.0:
399*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    movl %esi, %ecx
400*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    movl %edi, %eax
401*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx
402*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    sarb %cl, %al
403*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    ## kill: def $al killed $al killed $eax
404*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    retq
405*cc455033SEvgenii Kudriashov;
406*cc455033SEvgenii Kudriashov; FASTISEL-X64-LABEL: ashr_i8:
407*cc455033SEvgenii Kudriashov; FASTISEL-X64:       ## %bb.0:
408*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    movl %esi, %ecx
409*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    movl %edi, %eax
410*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx
411*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    sarb %cl, %al
412*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    ## kill: def $al killed $al killed $eax
413*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    retq
414*cc455033SEvgenii Kudriashov;
415*cc455033SEvgenii Kudriashov; GISEL-X64-LABEL: ashr_i8:
416*cc455033SEvgenii Kudriashov; GISEL-X64:       ## %bb.0:
417*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    movl %edi, %eax
418*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    movl %esi, %ecx
419*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx
420*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    sarb %cl, %al
421*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    ## kill: def $al killed $al killed $eax
422*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    retq
423*cc455033SEvgenii Kudriashov  %c = ashr i8 %a, %b
424*cc455033SEvgenii Kudriashov  ret i8 %c
425*cc455033SEvgenii Kudriashov}
426*cc455033SEvgenii Kudriashov
427*cc455033SEvgenii Kudriashovdefine i16 @ashr_i16(i16 %a, i16 %b) {
428*cc455033SEvgenii Kudriashov; SDAG-X86-LABEL: ashr_i16:
429*cc455033SEvgenii Kudriashov; SDAG-X86:       ## %bb.0:
430*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx
431*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movswl {{[0-9]+}}(%esp), %eax
432*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    sarl %cl, %eax
433*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    ## kill: def $ax killed $ax killed $eax
434*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    retl
435*cc455033SEvgenii Kudriashov;
436*cc455033SEvgenii Kudriashov; FASTISEL-X86-LABEL: ashr_i16:
437*cc455033SEvgenii Kudriashov; FASTISEL-X86:       ## %bb.0:
438*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx
439*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
440*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    ## kill: def $cl killed $cx
441*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    sarw %cl, %ax
442*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    retl
443*cc455033SEvgenii Kudriashov;
444*cc455033SEvgenii Kudriashov; SDAG-X64-LABEL: ashr_i16:
445*cc455033SEvgenii Kudriashov; SDAG-X64:       ## %bb.0:
446*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    movl %esi, %ecx
447*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    movswl %di, %eax
448*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx
449*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    sarl %cl, %eax
450*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    ## kill: def $ax killed $ax killed $eax
451*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    retq
452*cc455033SEvgenii Kudriashov;
453*cc455033SEvgenii Kudriashov; FASTISEL-X64-LABEL: ashr_i16:
454*cc455033SEvgenii Kudriashov; FASTISEL-X64:       ## %bb.0:
455*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    movl %esi, %ecx
456*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    movl %edi, %eax
457*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    ## kill: def $cx killed $cx killed $ecx
458*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    ## kill: def $cl killed $cx
459*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    sarw %cl, %ax
460*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax
461*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    retq
462*cc455033SEvgenii Kudriashov;
463*cc455033SEvgenii Kudriashov; GISEL-X64-LABEL: ashr_i16:
464*cc455033SEvgenii Kudriashov; GISEL-X64:       ## %bb.0:
465*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    movl %edi, %eax
466*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    movl %esi, %ecx
467*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx
468*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    sarw %cl, %ax
469*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax
470*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    retq
471*cc455033SEvgenii Kudriashov  %c = ashr i16 %a, %b
472*cc455033SEvgenii Kudriashov  ret i16 %c
473*cc455033SEvgenii Kudriashov}
474*cc455033SEvgenii Kudriashov
475*cc455033SEvgenii Kudriashovdefine i32 @ashr_i32(i32 %a, i32 %b) {
476*cc455033SEvgenii Kudriashov; SDAG-X86-LABEL: ashr_i32:
477*cc455033SEvgenii Kudriashov; SDAG-X86:       ## %bb.0:
478*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx
479*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
480*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    sarl %cl, %eax
481*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    retl
482*cc455033SEvgenii Kudriashov;
483*cc455033SEvgenii Kudriashov; FASTISEL-X86-LABEL: ashr_i32:
484*cc455033SEvgenii Kudriashov; FASTISEL-X86:       ## %bb.0:
485*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
486*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
487*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    ## kill: def $cl killed $ecx
488*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    sarl %cl, %eax
489*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    retl
490*cc455033SEvgenii Kudriashov;
491*cc455033SEvgenii Kudriashov; SDAG-X64-LABEL: ashr_i32:
492*cc455033SEvgenii Kudriashov; SDAG-X64:       ## %bb.0:
493*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    movl %esi, %ecx
494*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    movl %edi, %eax
495*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx
496*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    sarl %cl, %eax
497*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    retq
498*cc455033SEvgenii Kudriashov;
499*cc455033SEvgenii Kudriashov; FASTISEL-X64-LABEL: ashr_i32:
500*cc455033SEvgenii Kudriashov; FASTISEL-X64:       ## %bb.0:
501*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    movl %esi, %ecx
502*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    movl %edi, %eax
503*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    ## kill: def $cl killed $ecx
504*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    sarl %cl, %eax
505*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    retq
506*cc455033SEvgenii Kudriashov;
507*cc455033SEvgenii Kudriashov; GISEL-X64-LABEL: ashr_i32:
508*cc455033SEvgenii Kudriashov; GISEL-X64:       ## %bb.0:
509*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    movl %edi, %eax
510*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    movl %esi, %ecx
511*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx
512*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    sarl %cl, %eax
513*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    retq
514*cc455033SEvgenii Kudriashov  %c = ashr i32 %a, %b
515*cc455033SEvgenii Kudriashov  ret i32 %c
516*cc455033SEvgenii Kudriashov}
517*cc455033SEvgenii Kudriashov
518*cc455033SEvgenii Kudriashovdefine i64 @ashr_i64(i64 %a, i64 %b) nounwind {
519*cc455033SEvgenii Kudriashov; SDAG-X86-LABEL: ashr_i64:
520*cc455033SEvgenii Kudriashov; SDAG-X86:       ## %bb.0:
521*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    pushl %esi
522*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx
523*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
524*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
525*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movl %esi, %edx
526*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    sarl %cl, %edx
527*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    shrdl %cl, %esi, %eax
528*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    testb $32, %cl
529*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    je LBB11_2
530*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:  ## %bb.1:
531*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    sarl $31, %esi
532*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movl %edx, %eax
533*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movl %esi, %edx
534*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:  LBB11_2:
535*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    popl %esi
536*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    retl
537*cc455033SEvgenii Kudriashov;
538*cc455033SEvgenii Kudriashov; FASTISEL-X86-LABEL: ashr_i64:
539*cc455033SEvgenii Kudriashov; FASTISEL-X86:       ## %bb.0:
540*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    pushl %esi
541*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
542*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
543*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
544*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    shrdl %cl, %esi, %eax
545*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movl %esi, %edx
546*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    sarl %cl, %edx
547*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    testb $32, %cl
548*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    je LBB11_2
549*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:  ## %bb.1:
550*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    sarl $31, %esi
551*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movl %edx, %eax
552*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movl %esi, %edx
553*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:  LBB11_2:
554*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    popl %esi
555*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    retl
556*cc455033SEvgenii Kudriashov;
557*cc455033SEvgenii Kudriashov; SDAG-X64-LABEL: ashr_i64:
558*cc455033SEvgenii Kudriashov; SDAG-X64:       ## %bb.0:
559*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    movq %rsi, %rcx
560*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    movq %rdi, %rax
561*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    ## kill: def $cl killed $cl killed $rcx
562*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    sarq %cl, %rax
563*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    retq
564*cc455033SEvgenii Kudriashov;
565*cc455033SEvgenii Kudriashov; FASTISEL-X64-LABEL: ashr_i64:
566*cc455033SEvgenii Kudriashov; FASTISEL-X64:       ## %bb.0:
567*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    movq %rsi, %rcx
568*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    movq %rdi, %rax
569*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    ## kill: def $cl killed $rcx
570*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    sarq %cl, %rax
571*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    retq
572*cc455033SEvgenii Kudriashov;
573*cc455033SEvgenii Kudriashov; GISEL-X64-LABEL: ashr_i64:
574*cc455033SEvgenii Kudriashov; GISEL-X64:       ## %bb.0:
575*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    movq %rdi, %rax
576*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    movq %rsi, %rcx
577*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    ## kill: def $cl killed $cl killed $rcx
578*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    sarq %cl, %rax
579*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    retq
580*cc455033SEvgenii Kudriashov  %c = ashr i64 %a, %b
581*cc455033SEvgenii Kudriashov  ret i64 %c
582*cc455033SEvgenii Kudriashov}
583*cc455033SEvgenii Kudriashov
584*cc455033SEvgenii Kudriashovdefine i8 @shl_imm1_i8(i8 %a) {
585*cc455033SEvgenii Kudriashov; SDAG-X86-LABEL: shl_imm1_i8:
586*cc455033SEvgenii Kudriashov; SDAG-X86:       ## %bb.0:
587*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
588*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    addb %al, %al
589*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    retl
590*cc455033SEvgenii Kudriashov;
591*cc455033SEvgenii Kudriashov; FASTISEL-X86-LABEL: shl_imm1_i8:
592*cc455033SEvgenii Kudriashov; FASTISEL-X86:       ## %bb.0:
593*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
594*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    shlb %al
595*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    retl
596*cc455033SEvgenii Kudriashov;
597*cc455033SEvgenii Kudriashov; SDAG-X64-LABEL: shl_imm1_i8:
598*cc455033SEvgenii Kudriashov; SDAG-X64:       ## %bb.0:
599*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    ## kill: def $edi killed $edi def $rdi
600*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    leal (%rdi,%rdi), %eax
601*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    ## kill: def $al killed $al killed $eax
602*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    retq
603*cc455033SEvgenii Kudriashov;
604*cc455033SEvgenii Kudriashov; FASTISEL-X64-LABEL: shl_imm1_i8:
605*cc455033SEvgenii Kudriashov; FASTISEL-X64:       ## %bb.0:
606*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    ## kill: def $edi killed $edi def $rdi
607*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    leal (,%rdi,2), %eax
608*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    ## kill: def $al killed $al killed $eax
609*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    retq
610*cc455033SEvgenii Kudriashov;
611*cc455033SEvgenii Kudriashov; GISEL-X64-LABEL: shl_imm1_i8:
612*cc455033SEvgenii Kudriashov; GISEL-X64:       ## %bb.0:
613*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    ## kill: def $edi killed $edi def $rdi
614*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    leal (%rdi,%rdi), %eax
615*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    ## kill: def $al killed $al killed $eax
616*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    retq
617*cc455033SEvgenii Kudriashov  %c = shl i8 %a, 1
618*cc455033SEvgenii Kudriashov  ret i8 %c
619*cc455033SEvgenii Kudriashov}
620*cc455033SEvgenii Kudriashov
621*cc455033SEvgenii Kudriashovdefine i16 @shl_imm1_i16(i16 %a) {
622*cc455033SEvgenii Kudriashov; SDAG-X86-LABEL: shl_imm1_i16:
623*cc455033SEvgenii Kudriashov; SDAG-X86:       ## %bb.0:
624*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
625*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    addl %eax, %eax
626*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    ## kill: def $ax killed $ax killed $eax
627*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    retl
628*cc455033SEvgenii Kudriashov;
629*cc455033SEvgenii Kudriashov; FASTISEL-X86-LABEL: shl_imm1_i16:
630*cc455033SEvgenii Kudriashov; FASTISEL-X86:       ## %bb.0:
631*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
632*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    shlw %ax
633*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    retl
634*cc455033SEvgenii Kudriashov;
635*cc455033SEvgenii Kudriashov; SDAG-X64-LABEL: shl_imm1_i16:
636*cc455033SEvgenii Kudriashov; SDAG-X64:       ## %bb.0:
637*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    ## kill: def $edi killed $edi def $rdi
638*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    leal (%rdi,%rdi), %eax
639*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    ## kill: def $ax killed $ax killed $eax
640*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    retq
641*cc455033SEvgenii Kudriashov;
642*cc455033SEvgenii Kudriashov; FASTISEL-X64-LABEL: shl_imm1_i16:
643*cc455033SEvgenii Kudriashov; FASTISEL-X64:       ## %bb.0:
644*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    ## kill: def $edi killed $edi def $rdi
645*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    leal (,%rdi,2), %eax
646*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax
647*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    retq
648*cc455033SEvgenii Kudriashov;
649*cc455033SEvgenii Kudriashov; GISEL-X64-LABEL: shl_imm1_i16:
650*cc455033SEvgenii Kudriashov; GISEL-X64:       ## %bb.0:
651*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    ## kill: def $edi killed $edi def $rdi
652*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    leal (%rdi,%rdi), %eax
653*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax
654*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    retq
655*cc455033SEvgenii Kudriashov  %c = shl i16 %a, 1
656*cc455033SEvgenii Kudriashov  ret i16 %c
657*cc455033SEvgenii Kudriashov}
658*cc455033SEvgenii Kudriashov
659*cc455033SEvgenii Kudriashovdefine i32 @shl_imm1_i32(i32 %a) {
660*cc455033SEvgenii Kudriashov; SDAG-X86-LABEL: shl_imm1_i32:
661*cc455033SEvgenii Kudriashov; SDAG-X86:       ## %bb.0:
662*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
663*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    addl %eax, %eax
664*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    retl
665*cc455033SEvgenii Kudriashov;
666*cc455033SEvgenii Kudriashov; FASTISEL-X86-LABEL: shl_imm1_i32:
667*cc455033SEvgenii Kudriashov; FASTISEL-X86:       ## %bb.0:
668*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
669*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    shll %eax
670*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    retl
671*cc455033SEvgenii Kudriashov;
672*cc455033SEvgenii Kudriashov; SDAG-X64-LABEL: shl_imm1_i32:
673*cc455033SEvgenii Kudriashov; SDAG-X64:       ## %bb.0:
674*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    ## kill: def $edi killed $edi def $rdi
675*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    leal (%rdi,%rdi), %eax
676*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    retq
677*cc455033SEvgenii Kudriashov;
678*cc455033SEvgenii Kudriashov; FASTISEL-X64-LABEL: shl_imm1_i32:
679*cc455033SEvgenii Kudriashov; FASTISEL-X64:       ## %bb.0:
680*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    ## kill: def $edi killed $edi def $rdi
681*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    leal (,%rdi,2), %eax
682*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    retq
683*cc455033SEvgenii Kudriashov;
684*cc455033SEvgenii Kudriashov; GISEL-X64-LABEL: shl_imm1_i32:
685*cc455033SEvgenii Kudriashov; GISEL-X64:       ## %bb.0:
686*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    ## kill: def $edi killed $edi def $rdi
687*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    leal (%rdi,%rdi), %eax
688*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    retq
689*cc455033SEvgenii Kudriashov  %c = shl i32 %a, 1
690*cc455033SEvgenii Kudriashov  ret i32 %c
691*cc455033SEvgenii Kudriashov}
692*cc455033SEvgenii Kudriashov
693*cc455033SEvgenii Kudriashovdefine i64 @shl_imm1_i64(i64 %a) {
694*cc455033SEvgenii Kudriashov; SDAG-X86-LABEL: shl_imm1_i64:
695*cc455033SEvgenii Kudriashov; SDAG-X86:       ## %bb.0:
696*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
697*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
698*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    shldl $1, %eax, %edx
699*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    addl %eax, %eax
700*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    retl
701*cc455033SEvgenii Kudriashov;
702*cc455033SEvgenii Kudriashov; FASTISEL-X86-LABEL: shl_imm1_i64:
703*cc455033SEvgenii Kudriashov; FASTISEL-X86:       ## %bb.0:
704*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
705*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
706*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    shldl $1, %eax, %edx
707*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    addl %eax, %eax
708*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    retl
709*cc455033SEvgenii Kudriashov;
710*cc455033SEvgenii Kudriashov; SDAG-X64-LABEL: shl_imm1_i64:
711*cc455033SEvgenii Kudriashov; SDAG-X64:       ## %bb.0:
712*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    leaq (%rdi,%rdi), %rax
713*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    retq
714*cc455033SEvgenii Kudriashov;
715*cc455033SEvgenii Kudriashov; FASTISEL-X64-LABEL: shl_imm1_i64:
716*cc455033SEvgenii Kudriashov; FASTISEL-X64:       ## %bb.0:
717*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    leaq (,%rdi,2), %rax
718*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    retq
719*cc455033SEvgenii Kudriashov;
720*cc455033SEvgenii Kudriashov; GISEL-X64-LABEL: shl_imm1_i64:
721*cc455033SEvgenii Kudriashov; GISEL-X64:       ## %bb.0:
722*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    leaq (%rdi,%rdi), %rax
723*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    retq
724*cc455033SEvgenii Kudriashov  %c = shl i64 %a, 1
725*cc455033SEvgenii Kudriashov  ret i64 %c
726*cc455033SEvgenii Kudriashov}
727*cc455033SEvgenii Kudriashov
728*cc455033SEvgenii Kudriashovdefine i8 @lshr_imm1_i8(i8 %a) {
729*cc455033SEvgenii Kudriashov; X86-LABEL: lshr_imm1_i8:
730*cc455033SEvgenii Kudriashov; X86:       ## %bb.0:
731*cc455033SEvgenii Kudriashov; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
732*cc455033SEvgenii Kudriashov; X86-NEXT:    shrb %al
733*cc455033SEvgenii Kudriashov; X86-NEXT:    retl
734*cc455033SEvgenii Kudriashov;
735*cc455033SEvgenii Kudriashov; X64-LABEL: lshr_imm1_i8:
736*cc455033SEvgenii Kudriashov; X64:       ## %bb.0:
737*cc455033SEvgenii Kudriashov; X64-NEXT:    movl %edi, %eax
738*cc455033SEvgenii Kudriashov; X64-NEXT:    shrb %al
739*cc455033SEvgenii Kudriashov; X64-NEXT:    ## kill: def $al killed $al killed $eax
740*cc455033SEvgenii Kudriashov; X64-NEXT:    retq
741*cc455033SEvgenii Kudriashov  %c = lshr i8 %a, 1
742*cc455033SEvgenii Kudriashov  ret i8 %c
743*cc455033SEvgenii Kudriashov}
744*cc455033SEvgenii Kudriashov
745*cc455033SEvgenii Kudriashovdefine i16 @lshr_imm1_i16(i16 %a) {
746*cc455033SEvgenii Kudriashov; SDAG-X86-LABEL: lshr_imm1_i16:
747*cc455033SEvgenii Kudriashov; SDAG-X86:       ## %bb.0:
748*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
749*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    shrl %eax
750*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    ## kill: def $ax killed $ax killed $eax
751*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    retl
752*cc455033SEvgenii Kudriashov;
753*cc455033SEvgenii Kudriashov; FASTISEL-X86-LABEL: lshr_imm1_i16:
754*cc455033SEvgenii Kudriashov; FASTISEL-X86:       ## %bb.0:
755*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
756*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    shrw %ax
757*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    retl
758*cc455033SEvgenii Kudriashov;
759*cc455033SEvgenii Kudriashov; SDAG-X64-LABEL: lshr_imm1_i16:
760*cc455033SEvgenii Kudriashov; SDAG-X64:       ## %bb.0:
761*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    movzwl %di, %eax
762*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    shrl %eax
763*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    ## kill: def $ax killed $ax killed $eax
764*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    retq
765*cc455033SEvgenii Kudriashov;
766*cc455033SEvgenii Kudriashov; FASTISEL-X64-LABEL: lshr_imm1_i16:
767*cc455033SEvgenii Kudriashov; FASTISEL-X64:       ## %bb.0:
768*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    movl %edi, %eax
769*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    shrw %ax
770*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax
771*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    retq
772*cc455033SEvgenii Kudriashov;
773*cc455033SEvgenii Kudriashov; GISEL-X64-LABEL: lshr_imm1_i16:
774*cc455033SEvgenii Kudriashov; GISEL-X64:       ## %bb.0:
775*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    movl %edi, %eax
776*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    shrw %ax
777*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax
778*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    retq
779*cc455033SEvgenii Kudriashov  %c = lshr i16 %a, 1
780*cc455033SEvgenii Kudriashov  ret i16 %c
781*cc455033SEvgenii Kudriashov}
782*cc455033SEvgenii Kudriashov
783*cc455033SEvgenii Kudriashovdefine i32 @lshr_imm1_i32(i32 %a) {
784*cc455033SEvgenii Kudriashov; X86-LABEL: lshr_imm1_i32:
785*cc455033SEvgenii Kudriashov; X86:       ## %bb.0:
786*cc455033SEvgenii Kudriashov; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
787*cc455033SEvgenii Kudriashov; X86-NEXT:    shrl %eax
788*cc455033SEvgenii Kudriashov; X86-NEXT:    retl
789*cc455033SEvgenii Kudriashov;
790*cc455033SEvgenii Kudriashov; X64-LABEL: lshr_imm1_i32:
791*cc455033SEvgenii Kudriashov; X64:       ## %bb.0:
792*cc455033SEvgenii Kudriashov; X64-NEXT:    movl %edi, %eax
793*cc455033SEvgenii Kudriashov; X64-NEXT:    shrl %eax
794*cc455033SEvgenii Kudriashov; X64-NEXT:    retq
795*cc455033SEvgenii Kudriashov  %c = lshr i32 %a, 1
796*cc455033SEvgenii Kudriashov  ret i32 %c
797*cc455033SEvgenii Kudriashov}
798*cc455033SEvgenii Kudriashov
799*cc455033SEvgenii Kudriashovdefine i64 @lshr_imm1_i64(i64 %a) {
800*cc455033SEvgenii Kudriashov; SDAG-X86-LABEL: lshr_imm1_i64:
801*cc455033SEvgenii Kudriashov; SDAG-X86:       ## %bb.0:
802*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
803*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
804*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    shrdl $1, %edx, %eax
805*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    shrl %edx
806*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    retl
807*cc455033SEvgenii Kudriashov;
808*cc455033SEvgenii Kudriashov; FASTISEL-X86-LABEL: lshr_imm1_i64:
809*cc455033SEvgenii Kudriashov; FASTISEL-X86:       ## %bb.0:
810*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
811*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
812*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    shrdl $1, %edx, %eax
813*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    shrl %edx
814*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    retl
815*cc455033SEvgenii Kudriashov;
816*cc455033SEvgenii Kudriashov; X64-LABEL: lshr_imm1_i64:
817*cc455033SEvgenii Kudriashov; X64:       ## %bb.0:
818*cc455033SEvgenii Kudriashov; X64-NEXT:    movq %rdi, %rax
819*cc455033SEvgenii Kudriashov; X64-NEXT:    shrq %rax
820*cc455033SEvgenii Kudriashov; X64-NEXT:    retq
821*cc455033SEvgenii Kudriashov  %c = lshr i64 %a, 1
822*cc455033SEvgenii Kudriashov  ret i64 %c
823*cc455033SEvgenii Kudriashov}
824*cc455033SEvgenii Kudriashov
825*cc455033SEvgenii Kudriashovdefine i8 @ashr_imm1_i8(i8 %a) {
826*cc455033SEvgenii Kudriashov; X86-LABEL: ashr_imm1_i8:
827*cc455033SEvgenii Kudriashov; X86:       ## %bb.0:
828*cc455033SEvgenii Kudriashov; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
829*cc455033SEvgenii Kudriashov; X86-NEXT:    sarb %al
830*cc455033SEvgenii Kudriashov; X86-NEXT:    retl
831*cc455033SEvgenii Kudriashov;
832*cc455033SEvgenii Kudriashov; X64-LABEL: ashr_imm1_i8:
833*cc455033SEvgenii Kudriashov; X64:       ## %bb.0:
834*cc455033SEvgenii Kudriashov; X64-NEXT:    movl %edi, %eax
835*cc455033SEvgenii Kudriashov; X64-NEXT:    sarb %al
836*cc455033SEvgenii Kudriashov; X64-NEXT:    ## kill: def $al killed $al killed $eax
837*cc455033SEvgenii Kudriashov; X64-NEXT:    retq
838*cc455033SEvgenii Kudriashov  %c = ashr i8 %a, 1
839*cc455033SEvgenii Kudriashov  ret i8 %c
840*cc455033SEvgenii Kudriashov}
841*cc455033SEvgenii Kudriashov
842*cc455033SEvgenii Kudriashovdefine i16 @ashr_imm1_i16(i16 %a) {
843*cc455033SEvgenii Kudriashov; SDAG-X86-LABEL: ashr_imm1_i16:
844*cc455033SEvgenii Kudriashov; SDAG-X86:       ## %bb.0:
845*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movswl {{[0-9]+}}(%esp), %eax
846*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    shrl %eax
847*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    ## kill: def $ax killed $ax killed $eax
848*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    retl
849*cc455033SEvgenii Kudriashov;
850*cc455033SEvgenii Kudriashov; FASTISEL-X86-LABEL: ashr_imm1_i16:
851*cc455033SEvgenii Kudriashov; FASTISEL-X86:       ## %bb.0:
852*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
853*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    sarw %ax
854*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    retl
855*cc455033SEvgenii Kudriashov;
856*cc455033SEvgenii Kudriashov; SDAG-X64-LABEL: ashr_imm1_i16:
857*cc455033SEvgenii Kudriashov; SDAG-X64:       ## %bb.0:
858*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    movswl %di, %eax
859*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    shrl %eax
860*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    ## kill: def $ax killed $ax killed $eax
861*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    retq
862*cc455033SEvgenii Kudriashov;
863*cc455033SEvgenii Kudriashov; FASTISEL-X64-LABEL: ashr_imm1_i16:
864*cc455033SEvgenii Kudriashov; FASTISEL-X64:       ## %bb.0:
865*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    movl %edi, %eax
866*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    sarw %ax
867*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax
868*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    retq
869*cc455033SEvgenii Kudriashov;
870*cc455033SEvgenii Kudriashov; GISEL-X64-LABEL: ashr_imm1_i16:
871*cc455033SEvgenii Kudriashov; GISEL-X64:       ## %bb.0:
872*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    movl %edi, %eax
873*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    sarw %ax
874*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax
875*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    retq
876*cc455033SEvgenii Kudriashov  %c = ashr i16 %a, 1
877*cc455033SEvgenii Kudriashov  ret i16 %c
878*cc455033SEvgenii Kudriashov}
879*cc455033SEvgenii Kudriashov
880*cc455033SEvgenii Kudriashovdefine i32 @ashr_imm1_i32(i32 %a) {
881*cc455033SEvgenii Kudriashov; X86-LABEL: ashr_imm1_i32:
882*cc455033SEvgenii Kudriashov; X86:       ## %bb.0:
883*cc455033SEvgenii Kudriashov; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
884*cc455033SEvgenii Kudriashov; X86-NEXT:    sarl %eax
885*cc455033SEvgenii Kudriashov; X86-NEXT:    retl
886*cc455033SEvgenii Kudriashov;
887*cc455033SEvgenii Kudriashov; X64-LABEL: ashr_imm1_i32:
888*cc455033SEvgenii Kudriashov; X64:       ## %bb.0:
889*cc455033SEvgenii Kudriashov; X64-NEXT:    movl %edi, %eax
890*cc455033SEvgenii Kudriashov; X64-NEXT:    sarl %eax
891*cc455033SEvgenii Kudriashov; X64-NEXT:    retq
892*cc455033SEvgenii Kudriashov  %c = ashr i32 %a, 1
893*cc455033SEvgenii Kudriashov  ret i32 %c
894*cc455033SEvgenii Kudriashov}
895*cc455033SEvgenii Kudriashov
896*cc455033SEvgenii Kudriashovdefine i64 @ashr_imm1_i64(i64 %a) {
897*cc455033SEvgenii Kudriashov; SDAG-X86-LABEL: ashr_imm1_i64:
898*cc455033SEvgenii Kudriashov; SDAG-X86:       ## %bb.0:
899*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
900*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
901*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    shrdl $1, %edx, %eax
902*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    sarl %edx
903*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    retl
904*cc455033SEvgenii Kudriashov;
905*cc455033SEvgenii Kudriashov; FASTISEL-X86-LABEL: ashr_imm1_i64:
906*cc455033SEvgenii Kudriashov; FASTISEL-X86:       ## %bb.0:
907*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
908*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
909*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    shrdl $1, %edx, %eax
910*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    sarl %edx
911*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    retl
912*cc455033SEvgenii Kudriashov;
913*cc455033SEvgenii Kudriashov; X64-LABEL: ashr_imm1_i64:
914*cc455033SEvgenii Kudriashov; X64:       ## %bb.0:
915*cc455033SEvgenii Kudriashov; X64-NEXT:    movq %rdi, %rax
916*cc455033SEvgenii Kudriashov; X64-NEXT:    sarq %rax
917*cc455033SEvgenii Kudriashov; X64-NEXT:    retq
918*cc455033SEvgenii Kudriashov  %c = ashr i64 %a, 1
919*cc455033SEvgenii Kudriashov  ret i64 %c
920*cc455033SEvgenii Kudriashov}
921*cc455033SEvgenii Kudriashov
922*cc455033SEvgenii Kudriashovdefine i8 @shl_imm4_i8(i8 %a) {
923*cc455033SEvgenii Kudriashov; X86-LABEL: shl_imm4_i8:
924*cc455033SEvgenii Kudriashov; X86:       ## %bb.0:
925*cc455033SEvgenii Kudriashov; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
926*cc455033SEvgenii Kudriashov; X86-NEXT:    shlb $4, %al
927*cc455033SEvgenii Kudriashov; X86-NEXT:    retl
928*cc455033SEvgenii Kudriashov;
929*cc455033SEvgenii Kudriashov; X64-LABEL: shl_imm4_i8:
930*cc455033SEvgenii Kudriashov; X64:       ## %bb.0:
931*cc455033SEvgenii Kudriashov; X64-NEXT:    movl %edi, %eax
932*cc455033SEvgenii Kudriashov; X64-NEXT:    shlb $4, %al
933*cc455033SEvgenii Kudriashov; X64-NEXT:    ## kill: def $al killed $al killed $eax
934*cc455033SEvgenii Kudriashov; X64-NEXT:    retq
935*cc455033SEvgenii Kudriashov  %c = shl i8 %a, 4
936*cc455033SEvgenii Kudriashov  ret i8 %c
937*cc455033SEvgenii Kudriashov}
938*cc455033SEvgenii Kudriashov
939*cc455033SEvgenii Kudriashovdefine i16 @shl_imm4_i16(i16 %a) {
940*cc455033SEvgenii Kudriashov; SDAG-X86-LABEL: shl_imm4_i16:
941*cc455033SEvgenii Kudriashov; SDAG-X86:       ## %bb.0:
942*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
943*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    shll $4, %eax
944*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    ## kill: def $ax killed $ax killed $eax
945*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    retl
946*cc455033SEvgenii Kudriashov;
947*cc455033SEvgenii Kudriashov; FASTISEL-X86-LABEL: shl_imm4_i16:
948*cc455033SEvgenii Kudriashov; FASTISEL-X86:       ## %bb.0:
949*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
950*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    shlw $4, %ax
951*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    retl
952*cc455033SEvgenii Kudriashov;
953*cc455033SEvgenii Kudriashov; SDAG-X64-LABEL: shl_imm4_i16:
954*cc455033SEvgenii Kudriashov; SDAG-X64:       ## %bb.0:
955*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    movl %edi, %eax
956*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    shll $4, %eax
957*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    ## kill: def $ax killed $ax killed $eax
958*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    retq
959*cc455033SEvgenii Kudriashov;
960*cc455033SEvgenii Kudriashov; FASTISEL-X64-LABEL: shl_imm4_i16:
961*cc455033SEvgenii Kudriashov; FASTISEL-X64:       ## %bb.0:
962*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    movl %edi, %eax
963*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    shlw $4, %ax
964*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax
965*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    retq
966*cc455033SEvgenii Kudriashov;
967*cc455033SEvgenii Kudriashov; GISEL-X64-LABEL: shl_imm4_i16:
968*cc455033SEvgenii Kudriashov; GISEL-X64:       ## %bb.0:
969*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    movl %edi, %eax
970*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    shlw $4, %ax
971*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax
972*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    retq
973*cc455033SEvgenii Kudriashov  %c = shl i16 %a, 4
974*cc455033SEvgenii Kudriashov  ret i16 %c
975*cc455033SEvgenii Kudriashov}
976*cc455033SEvgenii Kudriashov
977*cc455033SEvgenii Kudriashovdefine i32 @shl_imm4_i32(i32 %a) {
978*cc455033SEvgenii Kudriashov; X86-LABEL: shl_imm4_i32:
979*cc455033SEvgenii Kudriashov; X86:       ## %bb.0:
980*cc455033SEvgenii Kudriashov; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
981*cc455033SEvgenii Kudriashov; X86-NEXT:    shll $4, %eax
982*cc455033SEvgenii Kudriashov; X86-NEXT:    retl
983*cc455033SEvgenii Kudriashov;
984*cc455033SEvgenii Kudriashov; X64-LABEL: shl_imm4_i32:
985*cc455033SEvgenii Kudriashov; X64:       ## %bb.0:
986*cc455033SEvgenii Kudriashov; X64-NEXT:    movl %edi, %eax
987*cc455033SEvgenii Kudriashov; X64-NEXT:    shll $4, %eax
988*cc455033SEvgenii Kudriashov; X64-NEXT:    retq
989*cc455033SEvgenii Kudriashov  %c = shl i32 %a, 4
990*cc455033SEvgenii Kudriashov  ret i32 %c
991*cc455033SEvgenii Kudriashov}
992*cc455033SEvgenii Kudriashov
993*cc455033SEvgenii Kudriashovdefine i64 @shl_imm4_i64(i64 %a) {
994*cc455033SEvgenii Kudriashov; SDAG-X86-LABEL: shl_imm4_i64:
995*cc455033SEvgenii Kudriashov; SDAG-X86:       ## %bb.0:
996*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
997*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
998*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    shldl $4, %eax, %edx
999*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    shll $4, %eax
1000*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    retl
1001*cc455033SEvgenii Kudriashov;
1002*cc455033SEvgenii Kudriashov; FASTISEL-X86-LABEL: shl_imm4_i64:
1003*cc455033SEvgenii Kudriashov; FASTISEL-X86:       ## %bb.0:
1004*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
1005*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
1006*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    shldl $4, %eax, %edx
1007*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    shll $4, %eax
1008*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    retl
1009*cc455033SEvgenii Kudriashov;
1010*cc455033SEvgenii Kudriashov; X64-LABEL: shl_imm4_i64:
1011*cc455033SEvgenii Kudriashov; X64:       ## %bb.0:
1012*cc455033SEvgenii Kudriashov; X64-NEXT:    movq %rdi, %rax
1013*cc455033SEvgenii Kudriashov; X64-NEXT:    shlq $4, %rax
1014*cc455033SEvgenii Kudriashov; X64-NEXT:    retq
1015*cc455033SEvgenii Kudriashov  %c = shl i64 %a, 4
1016*cc455033SEvgenii Kudriashov  ret i64 %c
1017*cc455033SEvgenii Kudriashov}
1018*cc455033SEvgenii Kudriashov
1019*cc455033SEvgenii Kudriashovdefine i8 @lshr_imm4_i8(i8 %a) {
1020*cc455033SEvgenii Kudriashov; X86-LABEL: lshr_imm4_i8:
1021*cc455033SEvgenii Kudriashov; X86:       ## %bb.0:
1022*cc455033SEvgenii Kudriashov; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
1023*cc455033SEvgenii Kudriashov; X86-NEXT:    shrb $4, %al
1024*cc455033SEvgenii Kudriashov; X86-NEXT:    retl
1025*cc455033SEvgenii Kudriashov;
1026*cc455033SEvgenii Kudriashov; X64-LABEL: lshr_imm4_i8:
1027*cc455033SEvgenii Kudriashov; X64:       ## %bb.0:
1028*cc455033SEvgenii Kudriashov; X64-NEXT:    movl %edi, %eax
1029*cc455033SEvgenii Kudriashov; X64-NEXT:    shrb $4, %al
1030*cc455033SEvgenii Kudriashov; X64-NEXT:    ## kill: def $al killed $al killed $eax
1031*cc455033SEvgenii Kudriashov; X64-NEXT:    retq
1032*cc455033SEvgenii Kudriashov  %c = lshr i8 %a, 4
1033*cc455033SEvgenii Kudriashov  ret i8 %c
1034*cc455033SEvgenii Kudriashov}
1035*cc455033SEvgenii Kudriashov
1036*cc455033SEvgenii Kudriashovdefine i16 @lshr_imm4_i16(i16 %a) {
1037*cc455033SEvgenii Kudriashov; SDAG-X86-LABEL: lshr_imm4_i16:
1038*cc455033SEvgenii Kudriashov; SDAG-X86:       ## %bb.0:
1039*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
1040*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    shrl $4, %eax
1041*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    ## kill: def $ax killed $ax killed $eax
1042*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    retl
1043*cc455033SEvgenii Kudriashov;
1044*cc455033SEvgenii Kudriashov; FASTISEL-X86-LABEL: lshr_imm4_i16:
1045*cc455033SEvgenii Kudriashov; FASTISEL-X86:       ## %bb.0:
1046*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
1047*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    shrw $4, %ax
1048*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    retl
1049*cc455033SEvgenii Kudriashov;
1050*cc455033SEvgenii Kudriashov; SDAG-X64-LABEL: lshr_imm4_i16:
1051*cc455033SEvgenii Kudriashov; SDAG-X64:       ## %bb.0:
1052*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    movzwl %di, %eax
1053*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    shrl $4, %eax
1054*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    ## kill: def $ax killed $ax killed $eax
1055*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    retq
1056*cc455033SEvgenii Kudriashov;
1057*cc455033SEvgenii Kudriashov; FASTISEL-X64-LABEL: lshr_imm4_i16:
1058*cc455033SEvgenii Kudriashov; FASTISEL-X64:       ## %bb.0:
1059*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    movl %edi, %eax
1060*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    shrw $4, %ax
1061*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax
1062*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    retq
1063*cc455033SEvgenii Kudriashov;
1064*cc455033SEvgenii Kudriashov; GISEL-X64-LABEL: lshr_imm4_i16:
1065*cc455033SEvgenii Kudriashov; GISEL-X64:       ## %bb.0:
1066*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    movl %edi, %eax
1067*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    shrw $4, %ax
1068*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax
1069*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    retq
1070*cc455033SEvgenii Kudriashov  %c = lshr i16 %a, 4
1071*cc455033SEvgenii Kudriashov  ret i16 %c
1072*cc455033SEvgenii Kudriashov}
1073*cc455033SEvgenii Kudriashov
1074*cc455033SEvgenii Kudriashovdefine i32 @lshr_imm4_i32(i32 %a) {
1075*cc455033SEvgenii Kudriashov; X86-LABEL: lshr_imm4_i32:
1076*cc455033SEvgenii Kudriashov; X86:       ## %bb.0:
1077*cc455033SEvgenii Kudriashov; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
1078*cc455033SEvgenii Kudriashov; X86-NEXT:    shrl $4, %eax
1079*cc455033SEvgenii Kudriashov; X86-NEXT:    retl
1080*cc455033SEvgenii Kudriashov;
1081*cc455033SEvgenii Kudriashov; X64-LABEL: lshr_imm4_i32:
1082*cc455033SEvgenii Kudriashov; X64:       ## %bb.0:
1083*cc455033SEvgenii Kudriashov; X64-NEXT:    movl %edi, %eax
1084*cc455033SEvgenii Kudriashov; X64-NEXT:    shrl $4, %eax
1085*cc455033SEvgenii Kudriashov; X64-NEXT:    retq
1086*cc455033SEvgenii Kudriashov  %c = lshr i32 %a, 4
1087*cc455033SEvgenii Kudriashov  ret i32 %c
1088*cc455033SEvgenii Kudriashov}
1089*cc455033SEvgenii Kudriashov
1090*cc455033SEvgenii Kudriashovdefine i64 @lshr_imm4_i64(i64 %a) {
1091*cc455033SEvgenii Kudriashov; SDAG-X86-LABEL: lshr_imm4_i64:
1092*cc455033SEvgenii Kudriashov; SDAG-X86:       ## %bb.0:
1093*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
1094*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
1095*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    shrdl $4, %edx, %eax
1096*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    shrl $4, %edx
1097*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    retl
1098*cc455033SEvgenii Kudriashov;
1099*cc455033SEvgenii Kudriashov; FASTISEL-X86-LABEL: lshr_imm4_i64:
1100*cc455033SEvgenii Kudriashov; FASTISEL-X86:       ## %bb.0:
1101*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
1102*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
1103*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    shrdl $4, %edx, %eax
1104*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    shrl $4, %edx
1105*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    retl
1106*cc455033SEvgenii Kudriashov;
1107*cc455033SEvgenii Kudriashov; X64-LABEL: lshr_imm4_i64:
1108*cc455033SEvgenii Kudriashov; X64:       ## %bb.0:
1109*cc455033SEvgenii Kudriashov; X64-NEXT:    movq %rdi, %rax
1110*cc455033SEvgenii Kudriashov; X64-NEXT:    shrq $4, %rax
1111*cc455033SEvgenii Kudriashov; X64-NEXT:    retq
1112*cc455033SEvgenii Kudriashov  %c = lshr i64 %a, 4
1113*cc455033SEvgenii Kudriashov  ret i64 %c
1114*cc455033SEvgenii Kudriashov}
1115*cc455033SEvgenii Kudriashov
1116*cc455033SEvgenii Kudriashovdefine i8 @ashr_imm4_i8(i8 %a) {
1117*cc455033SEvgenii Kudriashov; X86-LABEL: ashr_imm4_i8:
1118*cc455033SEvgenii Kudriashov; X86:       ## %bb.0:
1119*cc455033SEvgenii Kudriashov; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
1120*cc455033SEvgenii Kudriashov; X86-NEXT:    sarb $4, %al
1121*cc455033SEvgenii Kudriashov; X86-NEXT:    retl
1122*cc455033SEvgenii Kudriashov;
1123*cc455033SEvgenii Kudriashov; X64-LABEL: ashr_imm4_i8:
1124*cc455033SEvgenii Kudriashov; X64:       ## %bb.0:
1125*cc455033SEvgenii Kudriashov; X64-NEXT:    movl %edi, %eax
1126*cc455033SEvgenii Kudriashov; X64-NEXT:    sarb $4, %al
1127*cc455033SEvgenii Kudriashov; X64-NEXT:    ## kill: def $al killed $al killed $eax
1128*cc455033SEvgenii Kudriashov; X64-NEXT:    retq
1129*cc455033SEvgenii Kudriashov  %c = ashr i8 %a, 4
1130*cc455033SEvgenii Kudriashov  ret i8 %c
1131*cc455033SEvgenii Kudriashov}
1132*cc455033SEvgenii Kudriashov
1133*cc455033SEvgenii Kudriashovdefine i16 @ashr_imm4_i16(i16 %a) {
1134*cc455033SEvgenii Kudriashov; SDAG-X86-LABEL: ashr_imm4_i16:
1135*cc455033SEvgenii Kudriashov; SDAG-X86:       ## %bb.0:
1136*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movswl {{[0-9]+}}(%esp), %eax
1137*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    shrl $4, %eax
1138*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    ## kill: def $ax killed $ax killed $eax
1139*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    retl
1140*cc455033SEvgenii Kudriashov;
1141*cc455033SEvgenii Kudriashov; FASTISEL-X86-LABEL: ashr_imm4_i16:
1142*cc455033SEvgenii Kudriashov; FASTISEL-X86:       ## %bb.0:
1143*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
1144*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    sarw $4, %ax
1145*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    retl
1146*cc455033SEvgenii Kudriashov;
1147*cc455033SEvgenii Kudriashov; SDAG-X64-LABEL: ashr_imm4_i16:
1148*cc455033SEvgenii Kudriashov; SDAG-X64:       ## %bb.0:
1149*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    movswl %di, %eax
1150*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    shrl $4, %eax
1151*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    ## kill: def $ax killed $ax killed $eax
1152*cc455033SEvgenii Kudriashov; SDAG-X64-NEXT:    retq
1153*cc455033SEvgenii Kudriashov;
1154*cc455033SEvgenii Kudriashov; FASTISEL-X64-LABEL: ashr_imm4_i16:
1155*cc455033SEvgenii Kudriashov; FASTISEL-X64:       ## %bb.0:
1156*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    movl %edi, %eax
1157*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    sarw $4, %ax
1158*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax
1159*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    retq
1160*cc455033SEvgenii Kudriashov;
1161*cc455033SEvgenii Kudriashov; GISEL-X64-LABEL: ashr_imm4_i16:
1162*cc455033SEvgenii Kudriashov; GISEL-X64:       ## %bb.0:
1163*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    movl %edi, %eax
1164*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    sarw $4, %ax
1165*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax
1166*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    retq
1167*cc455033SEvgenii Kudriashov  %c = ashr i16 %a, 4
1168*cc455033SEvgenii Kudriashov  ret i16 %c
1169*cc455033SEvgenii Kudriashov}
1170*cc455033SEvgenii Kudriashov
1171*cc455033SEvgenii Kudriashovdefine i32 @ashr_imm4_i32(i32 %a) {
1172*cc455033SEvgenii Kudriashov; X86-LABEL: ashr_imm4_i32:
1173*cc455033SEvgenii Kudriashov; X86:       ## %bb.0:
1174*cc455033SEvgenii Kudriashov; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
1175*cc455033SEvgenii Kudriashov; X86-NEXT:    sarl $4, %eax
1176*cc455033SEvgenii Kudriashov; X86-NEXT:    retl
1177*cc455033SEvgenii Kudriashov;
1178*cc455033SEvgenii Kudriashov; X64-LABEL: ashr_imm4_i32:
1179*cc455033SEvgenii Kudriashov; X64:       ## %bb.0:
1180*cc455033SEvgenii Kudriashov; X64-NEXT:    movl %edi, %eax
1181*cc455033SEvgenii Kudriashov; X64-NEXT:    sarl $4, %eax
1182*cc455033SEvgenii Kudriashov; X64-NEXT:    retq
1183*cc455033SEvgenii Kudriashov  %c = ashr i32 %a, 4
1184*cc455033SEvgenii Kudriashov  ret i32 %c
1185*cc455033SEvgenii Kudriashov}
1186*cc455033SEvgenii Kudriashov
1187*cc455033SEvgenii Kudriashovdefine i64 @ashr_imm4_i64(i64 %a) {
1188*cc455033SEvgenii Kudriashov; SDAG-X86-LABEL: ashr_imm4_i64:
1189*cc455033SEvgenii Kudriashov; SDAG-X86:       ## %bb.0:
1190*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
1191*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
1192*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    shrdl $4, %edx, %eax
1193*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    sarl $4, %edx
1194*cc455033SEvgenii Kudriashov; SDAG-X86-NEXT:    retl
1195*cc455033SEvgenii Kudriashov;
1196*cc455033SEvgenii Kudriashov; FASTISEL-X86-LABEL: ashr_imm4_i64:
1197*cc455033SEvgenii Kudriashov; FASTISEL-X86:       ## %bb.0:
1198*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
1199*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
1200*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    shrdl $4, %edx, %eax
1201*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    sarl $4, %edx
1202*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    retl
1203*cc455033SEvgenii Kudriashov;
1204*cc455033SEvgenii Kudriashov; X64-LABEL: ashr_imm4_i64:
1205*cc455033SEvgenii Kudriashov; X64:       ## %bb.0:
1206*cc455033SEvgenii Kudriashov; X64-NEXT:    movq %rdi, %rax
1207*cc455033SEvgenii Kudriashov; X64-NEXT:    sarq $4, %rax
1208*cc455033SEvgenii Kudriashov; X64-NEXT:    retq
1209*cc455033SEvgenii Kudriashov  %c = ashr i64 %a, 4
1210*cc455033SEvgenii Kudriashov  ret i64 %c
1211*cc455033SEvgenii Kudriashov}
1212*cc455033SEvgenii Kudriashov
1213*cc455033SEvgenii Kudriashovdefine i8 @PR36731(i8 %a) {
1214*cc455033SEvgenii Kudriashov; SDAG-LABEL: PR36731:
1215*cc455033SEvgenii Kudriashov; SDAG:       ## %bb.0:
1216*cc455033SEvgenii Kudriashov; SDAG-NEXT:    ret{{[l|q]}}
1217*cc455033SEvgenii Kudriashov;
1218*cc455033SEvgenii Kudriashov; FASTISEL-X86-LABEL: PR36731:
1219*cc455033SEvgenii Kudriashov; FASTISEL-X86:       ## %bb.0:
1220*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
1221*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    movb $255, %cl
1222*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    shlb %cl, %al
1223*cc455033SEvgenii Kudriashov; FASTISEL-X86-NEXT:    retl
1224*cc455033SEvgenii Kudriashov;
1225*cc455033SEvgenii Kudriashov; FASTISEL-X64-LABEL: PR36731:
1226*cc455033SEvgenii Kudriashov; FASTISEL-X64:       ## %bb.0:
1227*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    movl %edi, %eax
1228*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    movb $255, %cl
1229*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    shlb %cl, %al
1230*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    ## kill: def $al killed $al killed $eax
1231*cc455033SEvgenii Kudriashov; FASTISEL-X64-NEXT:    retq
1232*cc455033SEvgenii Kudriashov;
1233*cc455033SEvgenii Kudriashov; GISEL-X64-LABEL: PR36731:
1234*cc455033SEvgenii Kudriashov; GISEL-X64:       ## %bb.0:
1235*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    movl %edi, %eax
1236*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    shlb $255, %al
1237*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    ## kill: def $al killed $al killed $eax
1238*cc455033SEvgenii Kudriashov; GISEL-X64-NEXT:    retq
1239*cc455033SEvgenii Kudriashov  %b = shl i8 %a, -1
1240*cc455033SEvgenii Kudriashov  ret i8 %b
1241*cc455033SEvgenii Kudriashov}
1242