1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i686-unknown-unknown | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdefine i32 @shl16sar15(i32 %a) #0 { 4*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: shl16sar15: 5*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 6*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movswl {{[0-9]+}}(%esp), %eax 7*9880d681SAndroid Build Coastguard Worker %1 = shl i32 %a, 16 8*9880d681SAndroid Build Coastguard Worker %2 = ashr exact i32 %1, 15 9*9880d681SAndroid Build Coastguard Worker ret i32 %2 10*9880d681SAndroid Build Coastguard Worker} 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Workerdefine i32 @shl16sar17(i32 %a) #0 { 13*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: shl16sar17: 14*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 15*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movswl {{[0-9]+}}(%esp), %eax 16*9880d681SAndroid Build Coastguard Worker %1 = shl i32 %a, 16 17*9880d681SAndroid Build Coastguard Worker %2 = ashr exact i32 %1, 17 18*9880d681SAndroid Build Coastguard Worker ret i32 %2 19*9880d681SAndroid Build Coastguard Worker} 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Workerdefine i32 @shl24sar23(i32 %a) #0 { 22*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: shl24sar23: 23*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 24*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movsbl {{[0-9]+}}(%esp), %eax 25*9880d681SAndroid Build Coastguard Worker %1 = shl i32 %a, 24 26*9880d681SAndroid Build Coastguard Worker %2 = ashr exact i32 %1, 23 27*9880d681SAndroid Build Coastguard Worker ret i32 %2 28*9880d681SAndroid Build Coastguard Worker} 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Workerdefine i32 @shl24sar25(i32 %a) #0 { 31*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: shl24sar25: 32*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 33*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movsbl {{[0-9]+}}(%esp), %eax 34*9880d681SAndroid Build Coastguard Worker %1 = shl i32 %a, 24 35*9880d681SAndroid Build Coastguard Worker %2 = ashr exact i32 %1, 25 36*9880d681SAndroid Build Coastguard Worker ret i32 %2 37*9880d681SAndroid Build Coastguard Worker} 38