Skip to content

Commit aac83fc

Browse files
authored
[Reassociate] Adds test coverage for reassociation of scalar & vector boolean types (#89899)
First step for #64840.
1 parent 37fcb32 commit aac83fc

File tree

2 files changed

+434
-0
lines changed

2 files changed

+434
-0
lines changed
Lines changed: 207 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,207 @@
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
3+
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]]
15+
;
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
24+
}
25+
26+
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]]
53+
;
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
77+
}
78+
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]]
98+
;
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
115+
}
116+
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]]
136+
;
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
153+
}
154+
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]]
182+
;
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
207+
}

0 commit comments

Comments
 (0)