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