Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / Transforms / Reassociate / reassoc_bool.ll
blob935a1e8c31a08e188b4219c1ee95a31079f42a45
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
2 ; RUN: opt < %s -passes=reassociate -S | FileCheck %s
4 define i1 @scalar(i1 %b0, i1 %b1, i1 %b2, i1 %b3, i1 %b4, i1 %b5, i1 %b6, i1 %b7) {
5 ; CHECK-LABEL: define i1 @scalar(
6 ; CHECK-SAME: i1 [[B0:%.*]], i1 [[B1:%.*]], i1 [[B2:%.*]], i1 [[B3:%.*]], i1 [[B4:%.*]], i1 [[B5:%.*]], i1 [[B6:%.*]], i1 [[B7:%.*]]) {
7 ; CHECK-NEXT:    [[OR01:%.*]] = or i1 [[B0]], [[B1]]
8 ; CHECK-NEXT:    [[OR23:%.*]] = or i1 [[B2]], [[B3]]
9 ; CHECK-NEXT:    [[OR45:%.*]] = or i1 [[B4]], [[B5]]
10 ; CHECK-NEXT:    [[OR67:%.*]] = or i1 [[B6]], [[B7]]
11 ; CHECK-NEXT:    [[OR0123:%.*]] = or i1 [[OR01]], [[OR23]]
12 ; CHECK-NEXT:    [[OR4567:%.*]] = or i1 [[OR45]], [[OR67]]
13 ; CHECK-NEXT:    [[OR01234567:%.*]] = or i1 [[OR0123]], [[OR4567]]
14 ; CHECK-NEXT:    ret i1 [[OR01234567]]
16   %or01 = or i1 %b0, %b1
17   %or23 = or i1 %b2, %b3
18   %or45 = or i1 %b4, %b5
19   %or67 = or i1 %b6, %b7
20   %or0123 = or i1 %or01, %or23
21   %or4567 = or i1 %or45, %or67
22   %or01234567 = or i1 %or0123, %or4567
23   ret i1 %or01234567
27 define i1 @scalar1(i1 %a, i1 %b0, i1 %b1, i1 %b2, i1 %b3, i1 %b4, i1 %b5, i1 %b6, i1 %b7) {
28 ; CHECK-LABEL: define i1 @scalar1(
29 ; CHECK-SAME: i1 [[A:%.*]], i1 [[B0:%.*]], i1 [[B1:%.*]], i1 [[B2:%.*]], i1 [[B3:%.*]], i1 [[B4:%.*]], i1 [[B5:%.*]], i1 [[B6:%.*]], i1 [[B7:%.*]]) {
30 ; CHECK-NEXT:    [[OR0:%.*]] = or i1 [[A]], [[B0]]
31 ; CHECK-NEXT:    [[OR1:%.*]] = or i1 [[A]], [[B1]]
32 ; CHECK-NEXT:    [[OR2:%.*]] = or i1 [[A]], [[B2]]
33 ; CHECK-NEXT:    [[OR3:%.*]] = or i1 [[A]], [[B3]]
34 ; CHECK-NEXT:    [[OR4:%.*]] = or i1 [[A]], [[B4]]
35 ; CHECK-NEXT:    [[OR5:%.*]] = or i1 [[A]], [[B5]]
36 ; CHECK-NEXT:    [[OR6:%.*]] = or i1 [[A]], [[B6]]
37 ; CHECK-NEXT:    [[OR7:%.*]] = or i1 [[A]], [[B7]]
38 ; CHECK-NEXT:    [[XOR0:%.*]] = xor i1 [[OR0]], [[OR1]]
39 ; CHECK-NEXT:    [[XOR1:%.*]] = xor i1 [[XOR0]], [[OR2]]
40 ; CHECK-NEXT:    [[XOR2:%.*]] = xor i1 [[XOR1]], [[OR3]]
41 ; CHECK-NEXT:    [[XOR3:%.*]] = xor i1 [[XOR2]], [[OR4]]
42 ; CHECK-NEXT:    [[XOR4:%.*]] = xor i1 [[XOR3]], [[OR5]]
43 ; CHECK-NEXT:    [[XOR5:%.*]] = xor i1 [[XOR4]], [[OR6]]
44 ; CHECK-NEXT:    [[XOR6:%.*]] = xor i1 [[XOR5]], [[OR7]]
45 ; CHECK-NEXT:    [[OR001:%.*]] = or i1 [[XOR0]], [[XOR1]]
46 ; CHECK-NEXT:    [[OR023:%.*]] = or i1 [[XOR2]], [[XOR3]]
47 ; CHECK-NEXT:    [[OR045:%.*]] = or i1 [[XOR4]], [[XOR5]]
48 ; CHECK-NEXT:    [[OR060:%.*]] = or i1 [[XOR0]], [[XOR6]]
49 ; CHECK-NEXT:    [[OR0123:%.*]] = or i1 [[OR001]], [[OR023]]
50 ; CHECK-NEXT:    [[OR4560:%.*]] = or i1 [[OR045]], [[OR060]]
51 ; CHECK-NEXT:    [[OR01234567:%.*]] = or i1 [[OR0123]], [[OR4560]]
52 ; CHECK-NEXT:    ret i1 [[OR01234567]]
54   %or0 = or i1 %b0, %a
55   %or1 = or i1 %b1, %a
56   %or2 = or i1 %b2, %a
57   %or3 = or i1 %b3, %a
58   %or4 = or i1 %b4, %a
59   %or5 = or i1 %b5, %a
60   %or6 = or i1 %b6, %a
61   %or7 = or i1 %b7, %a
62   %xor0 = xor i1 %or0, %or1
63   %xor1 = xor i1 %xor0, %or2
64   %xor2 = xor i1 %xor1, %or3
65   %xor3 = xor i1 %xor2, %or4
66   %xor4 = xor i1 %xor3, %or5
67   %xor5 = xor i1 %xor4, %or6
68   %xor6 = xor i1 %xor5, %or7
69   %or001 = or i1 %xor0, %xor1
70   %or023 = or i1 %xor2, %xor3
71   %or045 = or i1 %xor4, %xor5
72   %or060 = or i1 %xor6, %xor0
73   %or0123 = or i1 %or001, %or023
74   %or4560 = or i1 %or045, %or060
75   %or01234567 = or i1 %or0123, %or4560
76   ret i1 %or01234567
79 define i1 @scalar2(i1 %a, i1 %b0, i1 %b1, i1 %b2, i1 %b3, i1 %b4, i1 %b5, i1 %b6, i1 %b7) {
80 ; CHECK-LABEL: define i1 @scalar2(
81 ; CHECK-SAME: i1 [[A:%.*]], i1 [[B0:%.*]], i1 [[B1:%.*]], i1 [[B2:%.*]], i1 [[B3:%.*]], i1 [[B4:%.*]], i1 [[B5:%.*]], i1 [[B6:%.*]], i1 [[B7:%.*]]) {
82 ; CHECK-NEXT:    [[OR0:%.*]] = or i1 [[A]], [[B0]]
83 ; CHECK-NEXT:    [[OR1:%.*]] = or i1 [[A]], [[B1]]
84 ; CHECK-NEXT:    [[OR2:%.*]] = or i1 [[A]], [[B2]]
85 ; CHECK-NEXT:    [[OR3:%.*]] = or i1 [[A]], [[B3]]
86 ; CHECK-NEXT:    [[OR4:%.*]] = or i1 [[A]], [[B4]]
87 ; CHECK-NEXT:    [[OR5:%.*]] = or i1 [[A]], [[B5]]
88 ; CHECK-NEXT:    [[OR6:%.*]] = or i1 [[A]], [[B6]]
89 ; CHECK-NEXT:    [[OR7:%.*]] = or i1 [[A]], [[B7]]
90 ; CHECK-NEXT:    [[XOR0:%.*]] = xor i1 [[OR0]], [[OR1]]
91 ; CHECK-NEXT:    [[XOR1:%.*]] = xor i1 [[OR2]], [[OR3]]
92 ; CHECK-NEXT:    [[XOR2:%.*]] = xor i1 [[OR4]], [[OR5]]
93 ; CHECK-NEXT:    [[XOR3:%.*]] = xor i1 [[OR6]], [[OR7]]
94 ; CHECK-NEXT:    [[OR01:%.*]] = xor i1 [[XOR0]], [[XOR1]]
95 ; CHECK-NEXT:    [[OR23:%.*]] = xor i1 [[XOR2]], [[XOR3]]
96 ; CHECK-NEXT:    [[OR0123:%.*]] = xor i1 [[OR01]], [[OR23]]
97 ; CHECK-NEXT:    ret i1 [[OR0123]]
99   %or0 = or i1 %b0, %a
100   %or1 = or i1 %b1, %a
101   %or2 = or i1 %b2, %a
102   %or3 = or i1 %b3, %a
103   %or4 = or i1 %b4, %a
104   %or5 = or i1 %b5, %a
105   %or6 = or i1 %b6, %a
106   %or7 = or i1 %b7, %a
107   %xor0 = xor i1 %or0, %or1
108   %xor1 = xor i1 %or2, %or3
109   %xor2 = xor i1 %or4, %or5
110   %xor3 = xor i1 %or6, %or7
111   %or01 = xor i1 %xor0, %xor1
112   %or23 = xor i1 %xor2, %xor3
113   %or0123 = xor i1 %or01, %or23
114   ret i1 %or0123
117 define i1 @scalar3(i1 %a, i1 %b0, i1 %b1, i1 %b2, i1 %b3, i1 %b4, i1 %b5, i1 %b6, i1 %b7) {
118 ; CHECK-LABEL: define i1 @scalar3(
119 ; CHECK-SAME: i1 [[A:%.*]], i1 [[B0:%.*]], i1 [[B1:%.*]], i1 [[B2:%.*]], i1 [[B3:%.*]], i1 [[B4:%.*]], i1 [[B5:%.*]], i1 [[B6:%.*]], i1 [[B7:%.*]]) {
120 ; CHECK-NEXT:    [[XOR0:%.*]] = xor i1 [[A]], [[B0]]
121 ; CHECK-NEXT:    [[XOR1:%.*]] = xor i1 [[A]], [[B1]]
122 ; CHECK-NEXT:    [[XOR2:%.*]] = xor i1 [[A]], [[B2]]
123 ; CHECK-NEXT:    [[XOR3:%.*]] = xor i1 [[A]], [[B3]]
124 ; CHECK-NEXT:    [[XOR4:%.*]] = xor i1 [[A]], [[B4]]
125 ; CHECK-NEXT:    [[XOR5:%.*]] = xor i1 [[A]], [[B5]]
126 ; CHECK-NEXT:    [[XOR6:%.*]] = xor i1 [[A]], [[B6]]
127 ; CHECK-NEXT:    [[XOR7:%.*]] = xor i1 [[A]], [[B7]]
128 ; CHECK-NEXT:    [[AND0:%.*]] = and i1 [[XOR0]], [[XOR1]]
129 ; CHECK-NEXT:    [[AND1:%.*]] = and i1 [[XOR2]], [[XOR3]]
130 ; CHECK-NEXT:    [[AND2:%.*]] = and i1 [[XOR4]], [[XOR5]]
131 ; CHECK-NEXT:    [[AND3:%.*]] = and i1 [[XOR6]], [[XOR7]]
132 ; CHECK-NEXT:    [[OR01:%.*]] = and i1 [[AND0]], [[AND1]]
133 ; CHECK-NEXT:    [[OR23:%.*]] = and i1 [[AND2]], [[AND3]]
134 ; CHECK-NEXT:    [[OR0123:%.*]] = and i1 [[OR01]], [[OR23]]
135 ; CHECK-NEXT:    ret i1 [[OR0123]]
137   %xor0 = xor i1 %b0, %a
138   %xor1 = xor i1 %b1, %a
139   %xor2 = xor i1 %b2, %a
140   %xor3 = xor i1 %b3, %a
141   %xor4 = xor i1 %b4, %a
142   %xor5 = xor i1 %b5, %a
143   %xor6 = xor i1 %b6, %a
144   %xor7 = xor i1 %b7, %a
145   %and0 = and i1 %xor0, %xor1
146   %and1 = and i1 %xor2, %xor3
147   %and2 = and i1 %xor4, %xor5
148   %and3 = and i1 %xor6, %xor7
149   %or01 = and i1 %and0, %and1
150   %or23 = and i1 %and2, %and3
151   %or0123 = and i1 %or01, %or23
152   ret i1 %or0123
155 define i1 @scalar4(i1 %a, i1 %b0, i1 %b1, i1 %b2, i1 %b3, i1 %b4, i1 %b5, i1 %b6, i1 %b7) {
156 ; CHECK-LABEL: define i1 @scalar4(
157 ; CHECK-SAME: i1 [[A:%.*]], i1 [[B0:%.*]], i1 [[B1:%.*]], i1 [[B2:%.*]], i1 [[B3:%.*]], i1 [[B4:%.*]], i1 [[B5:%.*]], i1 [[B6:%.*]], i1 [[B7:%.*]]) {
158 ; CHECK-NEXT:    [[XOR0:%.*]] = xor i1 [[A]], [[B0]]
159 ; CHECK-NEXT:    [[XOR1:%.*]] = xor i1 [[A]], [[B1]]
160 ; CHECK-NEXT:    [[XOR2:%.*]] = xor i1 [[A]], [[B2]]
161 ; CHECK-NEXT:    [[XOR3:%.*]] = xor i1 [[A]], [[B3]]
162 ; CHECK-NEXT:    [[XOR4:%.*]] = xor i1 [[A]], [[B4]]
163 ; CHECK-NEXT:    [[XOR5:%.*]] = xor i1 [[A]], [[B5]]
164 ; CHECK-NEXT:    [[XOR6:%.*]] = xor i1 [[A]], [[B6]]
165 ; CHECK-NEXT:    [[XOR7:%.*]] = xor i1 [[A]], [[B7]]
166 ; CHECK-NEXT:    [[OR0:%.*]] = or i1 [[XOR0]], [[XOR1]]
167 ; CHECK-NEXT:    [[OR1:%.*]] = or i1 [[XOR2]], [[XOR3]]
168 ; CHECK-NEXT:    [[OR2:%.*]] = or i1 [[XOR4]], [[XOR5]]
169 ; CHECK-NEXT:    [[OR3:%.*]] = or i1 [[XOR6]], [[XOR7]]
170 ; CHECK-NEXT:    [[OR4:%.*]] = or i1 [[B0]], [[B1]]
171 ; CHECK-NEXT:    [[OR5:%.*]] = or i1 [[B2]], [[B3]]
172 ; CHECK-NEXT:    [[OR6:%.*]] = or i1 [[B4]], [[B5]]
173 ; CHECK-NEXT:    [[OR7:%.*]] = or i1 [[B6]], [[B7]]
174 ; CHECK-NEXT:    [[OR01:%.*]] = or i1 [[OR0]], [[OR1]]
175 ; CHECK-NEXT:    [[OR23:%.*]] = or i1 [[OR2]], [[OR3]]
176 ; CHECK-NEXT:    [[OR45:%.*]] = or i1 [[OR4]], [[OR5]]
177 ; CHECK-NEXT:    [[OR67:%.*]] = or i1 [[OR6]], [[OR7]]
178 ; CHECK-NEXT:    [[OR0123:%.*]] = or i1 [[OR01]], [[OR23]]
179 ; CHECK-NEXT:    [[OR4567:%.*]] = or i1 [[OR45]], [[OR67]]
180 ; CHECK-NEXT:    [[OR01234567:%.*]] = or i1 [[OR4567]], [[OR0123]]
181 ; CHECK-NEXT:    ret i1 [[OR01234567]]
183   %xor0 = xor i1 %b0, %a
184   %xor1 = xor i1 %b1, %a
185   %xor2 = xor i1 %b2, %a
186   %xor3 = xor i1 %b3, %a
187   %xor4 = xor i1 %b4, %a
188   %xor5 = xor i1 %b5, %a
189   %xor6 = xor i1 %b6, %a
190   %xor7 = xor i1 %b7, %a
191   %or0 = or i1 %xor0, %xor1
192   %or1 = or i1 %xor2, %xor3
193   %or2 = or i1 %xor4, %xor5
194   %or3 = or i1 %xor6, %xor7
195   %or4 = or i1 %b0, %b1
196   %or5 = or i1 %b2, %b3
197   %or6 = or i1 %b4, %b5
198   %or7 = or i1 %b6, %b7
199   %or01 = or i1 %or0, %or1
200   %or23 = or i1 %or2, %or3
201   %or45 = or i1 %or4, %or5
202   %or67 = or i1 %or6, %or7
203   %or0123 = or i1 %or01, %or23
204   %or4567 = or i1 %or45, %or67
205   %or01234567 = or i1 %or0123, %or4567
206   ret i1 %or01234567