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
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]]
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
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]]
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
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
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