1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt < %s -instcombine -S | FileCheck %s
3
4define i32 @func1(i32 %a, i32 %b) {
5; CHECK-LABEL: @func1(
6; CHECK-NEXT:    [[T2:%.*]] = xor i32 %a, %b
7; CHECK-NEXT:    ret i32 [[T2]]
8;
9  %b_not = xor i32 %b, -1
10  %t0 = and i32 %a, %b_not
11  %a_not = xor i32 %a, -1
12  %t1 = and i32 %a_not, %b
13  %t2 = or i32 %t0, %t1
14  ret i32 %t2
15}
16
17define i32 @func2(i32 %a, i32 %b) {
18; CHECK-LABEL: @func2(
19; CHECK-NEXT:    [[T2:%.*]] = xor i32 %a, %b
20; CHECK-NEXT:    ret i32 [[T2]]
21;
22  %b_not = xor i32 %b, -1
23  %t0 = and i32 %b_not, %a
24  %a_not = xor i32 %a, -1
25  %t1 = and i32 %a_not, %b
26  %t2 = or i32 %t0, %t1
27  ret i32 %t2
28}
29
30define i32 @func3(i32 %a, i32 %b) {
31; CHECK-LABEL: @func3(
32; CHECK-NEXT:    [[T2:%.*]] = xor i32 %a, %b
33; CHECK-NEXT:    ret i32 [[T2]]
34;
35  %b_not = xor i32 %b, -1
36  %t0 = and i32 %a, %b_not
37  %a_not = xor i32 %a, -1
38  %t1 = and i32 %b, %a_not
39  %t2 = or i32 %t0, %t1
40  ret i32 %t2
41}
42
43define i32 @func4(i32 %a, i32 %b) {
44; CHECK-LABEL: @func4(
45; CHECK-NEXT:    [[T2:%.*]] = xor i32 %a, %b
46; CHECK-NEXT:    ret i32 [[T2]]
47;
48  %b_not = xor i32 %b, -1
49  %t0 = and i32 %b_not, %a
50  %a_not = xor i32 %a, -1
51  %t1 = and i32 %b, %a_not
52  %t2 = or i32 %t0, %t1
53  ret i32 %t2
54}
55
56