xref: /aosp_15_r20/external/llvm/test/Transforms/InstCombine/2010-11-01-lshr-mask.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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