1*9880d681SAndroid Build Coastguard Worker; RUN: opt -instcombine -S < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; <rdar://problem/8606771> 4*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @main( 5*9880d681SAndroid Build Coastguard Workerdefine i32 @main(i32 %argc) nounwind ssp { 6*9880d681SAndroid Build Coastguard Workerentry: 7*9880d681SAndroid Build Coastguard Worker %tmp3151 = trunc i32 %argc to i8 8*9880d681SAndroid Build Coastguard Worker; CHECK: %0 = shl i8 %tmp3151, 5 9*9880d681SAndroid Build Coastguard Worker; CHECK: and i8 %0, 64 10*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: shl 11*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: shr 12*9880d681SAndroid Build Coastguard Worker %tmp3161 = or i8 %tmp3151, -17 13*9880d681SAndroid Build Coastguard Worker %tmp3162 = and i8 %tmp3151, 122 14*9880d681SAndroid Build Coastguard Worker %tmp3163 = xor i8 %tmp3162, -17 15*9880d681SAndroid Build Coastguard Worker %tmp4114 = shl i8 %tmp3163, 6 16*9880d681SAndroid Build Coastguard Worker %tmp4115 = xor i8 %tmp4114, %tmp3163 17*9880d681SAndroid Build Coastguard Worker %tmp4120 = xor i8 %tmp3161, %tmp4115 18*9880d681SAndroid Build Coastguard Worker %tmp4126 = lshr i8 %tmp4120, 7 19*9880d681SAndroid Build Coastguard Worker %tmp4127 = mul i8 %tmp4126, 64 20*9880d681SAndroid Build Coastguard Worker %tmp4086 = zext i8 %tmp4127 to i32 21*9880d681SAndroid Build Coastguard Worker; CHECK: ret i32 22*9880d681SAndroid Build Coastguard Worker ret i32 %tmp4086 23*9880d681SAndroid Build Coastguard Worker} 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Worker; rdar://8739316 26*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @foo( 27*9880d681SAndroid Build Coastguard Workerdefine i8 @foo(i8 %arg, i8 %arg1) nounwind { 28*9880d681SAndroid Build Coastguard Workerbb: 29*9880d681SAndroid Build Coastguard Worker %tmp = shl i8 %arg, 7 30*9880d681SAndroid Build Coastguard Worker %tmp2 = and i8 %arg1, 84 31*9880d681SAndroid Build Coastguard Worker %tmp3 = and i8 %arg1, -118 32*9880d681SAndroid Build Coastguard Worker %tmp4 = and i8 %arg1, 33 33*9880d681SAndroid Build Coastguard Worker %tmp5 = sub i8 -88, %tmp2 34*9880d681SAndroid Build Coastguard Worker %tmp6 = and i8 %tmp5, 84 35*9880d681SAndroid Build Coastguard Worker %tmp7 = or i8 %tmp4, %tmp6 36*9880d681SAndroid Build Coastguard Worker %tmp8 = xor i8 %tmp, %tmp3 37*9880d681SAndroid Build Coastguard Worker %tmp9 = or i8 %tmp7, %tmp8 38*9880d681SAndroid Build Coastguard Worker %tmp10 = lshr i8 %tmp8, 7 39*9880d681SAndroid Build Coastguard Worker %tmp11 = shl i8 %tmp10, 5 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Worker; CHECK: %tmp10 = lshr i8 %tmp8, 7 42*9880d681SAndroid Build Coastguard Worker; CHECK: %tmp11 = shl nuw nsw i8 %tmp10, 5 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Worker %tmp12 = xor i8 %tmp11, %tmp9 45*9880d681SAndroid Build Coastguard Worker ret i8 %tmp12 46*9880d681SAndroid Build Coastguard Worker} 47