Skip to content

Commit 1ad3279

Browse files
committed
pre-commit systemz test
1 parent 1ccbd2a commit 1ad3279

File tree

1 file changed

+286
-0
lines changed

1 file changed

+286
-0
lines changed
Lines changed: 286 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,286 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s --check-prefix=NO-MISC3
3+
; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z15 | FileCheck %s --check-prefix=MISC3
4+
5+
; test that masked-merge code is generated as "xor;and;xor" sequence or
6+
; "andn ; and; or" if and-not is available.
7+
8+
define i32 @masked_merge0(i32 %a0, i32 %a1, i32 %a2) {
9+
; NO-MISC3-LABEL: masked_merge0:
10+
; NO-MISC3: # %bb.0:
11+
; NO-MISC3-NEXT: nr %r3, %r2
12+
; NO-MISC3-NEXT: xilf %r2, 4294967295
13+
; NO-MISC3-NEXT: nr %r2, %r4
14+
; NO-MISC3-NEXT: or %r2, %r3
15+
; NO-MISC3-NEXT: br %r14
16+
;
17+
; MISC3-LABEL: masked_merge0:
18+
; MISC3: # %bb.0:
19+
; MISC3-NEXT: nr %r3, %r2
20+
; MISC3-NEXT: ncrk %r2, %r4, %r2
21+
; MISC3-NEXT: or %r2, %r3
22+
; MISC3-NEXT: br %r14
23+
%and0 = and i32 %a0, %a1
24+
%not = xor i32 %a0, -1
25+
%and1 = and i32 %not, %a2
26+
%or = or i32 %and0, %and1
27+
ret i32 %or
28+
}
29+
30+
define i16 @masked_merge1(i16 %a0, i16 %a1, i16 %a2) {
31+
; NO-MISC3-LABEL: masked_merge1:
32+
; NO-MISC3: # %bb.0:
33+
; NO-MISC3-NEXT: nr %r3, %r2
34+
; NO-MISC3-NEXT: xilf %r2, 4294967295
35+
; NO-MISC3-NEXT: nr %r2, %r4
36+
; NO-MISC3-NEXT: or %r2, %r3
37+
; NO-MISC3-NEXT: br %r14
38+
;
39+
; MISC3-LABEL: masked_merge1:
40+
; MISC3: # %bb.0:
41+
; MISC3-NEXT: nr %r3, %r2
42+
; MISC3-NEXT: ncrk %r2, %r4, %r2
43+
; MISC3-NEXT: or %r2, %r3
44+
; MISC3-NEXT: br %r14
45+
%and0 = and i16 %a0, %a1
46+
%not = xor i16 %a0, -1
47+
%and1 = and i16 %a2, %not
48+
%or = or i16 %and0, %and1
49+
ret i16 %or
50+
}
51+
52+
define i8 @masked_merge2(i8 %a0, i8 %a1, i8 %a2) {
53+
; NO-MISC3-LABEL: masked_merge2:
54+
; NO-MISC3: # %bb.0:
55+
; NO-MISC3-NEXT: nrk %r0, %r3, %r2
56+
; NO-MISC3-NEXT: xilf %r2, 4294967295
57+
; NO-MISC3-NEXT: nr %r2, %r3
58+
; NO-MISC3-NEXT: or %r2, %r0
59+
; NO-MISC3-NEXT: br %r14
60+
;
61+
; MISC3-LABEL: masked_merge2:
62+
; MISC3: # %bb.0:
63+
; MISC3-NEXT: ncrk %r0, %r3, %r2
64+
; MISC3-NEXT: nr %r2, %r3
65+
; MISC3-NEXT: or %r2, %r0
66+
; MISC3-NEXT: br %r14
67+
%not = xor i8 %a0, -1
68+
%and0 = and i8 %not, %a1
69+
%and1 = and i8 %a1, %a0
70+
%or = or i8 %and0, %and1
71+
ret i8 %or
72+
}
73+
74+
define i64 @masked_merge3(i64 %a0, i64 %a1, i64 %a2) {
75+
; NO-MISC3-LABEL: masked_merge3:
76+
; NO-MISC3: # %bb.0:
77+
; NO-MISC3-NEXT: lcgr %r0, %r4
78+
; NO-MISC3-NEXT: aghi %r0, -1
79+
; NO-MISC3-NEXT: lgr %r1, %r0
80+
; NO-MISC3-NEXT: ngr %r1, %r2
81+
; NO-MISC3-NEXT: ngr %r3, %r2
82+
; NO-MISC3-NEXT: xgr %r1, %r0
83+
; NO-MISC3-NEXT: xgr %r3, %r2
84+
; NO-MISC3-NEXT: ogrk %r2, %r1, %r3
85+
; NO-MISC3-NEXT: br %r14
86+
;
87+
; MISC3-LABEL: masked_merge3:
88+
; MISC3: # %bb.0:
89+
; MISC3-NEXT: lcgr %r0, %r2
90+
; MISC3-NEXT: aghi %r0, -1
91+
; MISC3-NEXT: ncgrk %r0, %r0, %r4
92+
; MISC3-NEXT: ncgrk %r2, %r2, %r3
93+
; MISC3-NEXT: ogr %r2, %r0
94+
; MISC3-NEXT: br %r14
95+
%v0 = xor i64 %a1, -1
96+
%v1 = xor i64 %a2, -1
97+
%not = xor i64 %a0, -1
98+
%and0 = and i64 %not, %v1
99+
%and1 = and i64 %v0, %a0
100+
%or = or i64 %and0, %and1
101+
ret i64 %or
102+
}
103+
104+
define i32 @not_a_masked_merge0(i32 %a0, i32 %a1, i32 %a2) {
105+
; NO-MISC3-LABEL: not_a_masked_merge0:
106+
; NO-MISC3: # %bb.0:
107+
; NO-MISC3-NEXT: lcr %r0, %r2
108+
; NO-MISC3-NEXT: nr %r3, %r2
109+
; NO-MISC3-NEXT: nr %r0, %r4
110+
; NO-MISC3-NEXT: ork %r2, %r3, %r0
111+
; NO-MISC3-NEXT: br %r14
112+
;
113+
; MISC3-LABEL: not_a_masked_merge0:
114+
; MISC3: # %bb.0:
115+
; MISC3-NEXT: lcr %r0, %r2
116+
; MISC3-NEXT: nr %r3, %r2
117+
; MISC3-NEXT: nr %r0, %r4
118+
; MISC3-NEXT: ork %r2, %r3, %r0
119+
; MISC3-NEXT: br %r14
120+
%and0 = and i32 %a0, %a1
121+
%not_a_not = sub i32 0, %a0
122+
%and1 = and i32 %not_a_not, %a2
123+
%or = or i32 %and0, %and1
124+
ret i32 %or
125+
}
126+
127+
define i32 @not_a_masked_merge1(i32 %a0, i32 %a1, i32 %a2, i32 %a3) {
128+
; NO-MISC3-LABEL: not_a_masked_merge1:
129+
; NO-MISC3: # %bb.0:
130+
; NO-MISC3-NEXT: xilf %r5, 4294967295
131+
; NO-MISC3-NEXT: nr %r2, %r3
132+
; NO-MISC3-NEXT: nr %r4, %r5
133+
; NO-MISC3-NEXT: or %r2, %r4
134+
; NO-MISC3-NEXT: br %r14
135+
;
136+
; MISC3-LABEL: not_a_masked_merge1:
137+
; MISC3: # %bb.0:
138+
; MISC3-NEXT: nr %r2, %r3
139+
; MISC3-NEXT: ncrk %r0, %r4, %r5
140+
; MISC3-NEXT: or %r2, %r0
141+
; MISC3-NEXT: br %r14
142+
%and0 = and i32 %a0, %a1
143+
%not = xor i32 %a3, -1
144+
%and1 = and i32 %not, %a2
145+
%or = or i32 %and0, %and1
146+
ret i32 %or
147+
}
148+
149+
define i32 @not_a_masked_merge2(i32 %a0, i32 %a1, i32 %a2) {
150+
; NO-MISC3-LABEL: not_a_masked_merge2:
151+
; NO-MISC3: # %bb.0:
152+
; NO-MISC3-NEXT: or %r3, %r2
153+
; NO-MISC3-NEXT: xilf %r2, 4294967295
154+
; NO-MISC3-NEXT: nr %r2, %r4
155+
; NO-MISC3-NEXT: or %r2, %r3
156+
; NO-MISC3-NEXT: br %r14
157+
;
158+
; MISC3-LABEL: not_a_masked_merge2:
159+
; MISC3: # %bb.0:
160+
; MISC3-NEXT: or %r3, %r2
161+
; MISC3-NEXT: ncrk %r2, %r4, %r2
162+
; MISC3-NEXT: or %r2, %r3
163+
; MISC3-NEXT: br %r14
164+
%not_an_and0 = or i32 %a0, %a1
165+
%not = xor i32 %a0, -1
166+
%and1 = and i32 %not, %a2
167+
%or = or i32 %not_an_and0, %and1
168+
ret i32 %or
169+
}
170+
171+
define i32 @not_a_masked_merge3(i32 %a0, i32 %a1, i32 %a2) {
172+
; NO-MISC3-LABEL: not_a_masked_merge3:
173+
; NO-MISC3: # %bb.0:
174+
; NO-MISC3-NEXT: nr %r3, %r2
175+
; NO-MISC3-NEXT: xr %r2, %r4
176+
; NO-MISC3-NEXT: xilf %r2, 4294967295
177+
; NO-MISC3-NEXT: or %r2, %r3
178+
; NO-MISC3-NEXT: br %r14
179+
;
180+
; MISC3-LABEL: not_a_masked_merge3:
181+
; MISC3: # %bb.0:
182+
; MISC3-NEXT: nr %r3, %r2
183+
; MISC3-NEXT: xr %r2, %r4
184+
; MISC3-NEXT: ocrk %r2, %r3, %r2
185+
; MISC3-NEXT: br %r14
186+
%and0 = and i32 %a0, %a1
187+
%not = xor i32 %a0, -1
188+
%not_an_and1 = xor i32 %not, %a2
189+
%or = or i32 %and0, %not_an_and1
190+
ret i32 %or
191+
}
192+
193+
define i32 @not_a_masked_merge4(i32 %a0, i32 %a1, i32 %a2) {
194+
; NO-MISC3-LABEL: not_a_masked_merge4:
195+
; NO-MISC3: # %bb.0:
196+
; NO-MISC3-NEXT: nr %r2, %r3
197+
; NO-MISC3-NEXT: br %r14
198+
;
199+
; MISC3-LABEL: not_a_masked_merge4:
200+
; MISC3: # %bb.0:
201+
; MISC3-NEXT: nr %r2, %r3
202+
; MISC3-NEXT: br %r14
203+
%and0 = and i32 %a0, %a1
204+
%not = xor i32 %a2, -1
205+
%and1 = and i32 %not, %a2
206+
%or = or i32 %and0, %and1
207+
ret i32 %or
208+
}
209+
210+
define i32 @masked_merge_no_transform0(i32 %a0, i32 %a1, i32 %a2, ptr %p1) {
211+
; NO-MISC3-LABEL: masked_merge_no_transform0:
212+
; NO-MISC3: # %bb.0:
213+
; NO-MISC3-NEXT: nr %r3, %r2
214+
; NO-MISC3-NEXT: xilf %r2, 4294967295
215+
; NO-MISC3-NEXT: nr %r2, %r4
216+
; NO-MISC3-NEXT: or %r2, %r3
217+
; NO-MISC3-NEXT: st %r3, 0(%r5)
218+
; NO-MISC3-NEXT: br %r14
219+
;
220+
; MISC3-LABEL: masked_merge_no_transform0:
221+
; MISC3: # %bb.0:
222+
; MISC3-NEXT: nr %r3, %r2
223+
; MISC3-NEXT: ncrk %r2, %r4, %r2
224+
; MISC3-NEXT: or %r2, %r3
225+
; MISC3-NEXT: st %r3, 0(%r5)
226+
; MISC3-NEXT: br %r14
227+
%and0 = and i32 %a0, %a1
228+
%not = xor i32 %a0, -1
229+
%and1 = and i32 %not, %a2
230+
%or = or i32 %and0, %and1
231+
store i32 %and0, ptr %p1
232+
ret i32 %or
233+
}
234+
235+
define i32 @masked_merge_no_transform1(i32 %a0, i32 %a1, i32 %a2, ptr %p1) {
236+
; NO-MISC3-LABEL: masked_merge_no_transform1:
237+
; NO-MISC3: # %bb.0:
238+
; NO-MISC3-NEXT: nrk %r0, %r2, %r3
239+
; NO-MISC3-NEXT: xilf %r2, 4294967295
240+
; NO-MISC3-NEXT: nr %r4, %r2
241+
; NO-MISC3-NEXT: or %r0, %r4
242+
; NO-MISC3-NEXT: st %r2, 0(%r5)
243+
; NO-MISC3-NEXT: lr %r2, %r0
244+
; NO-MISC3-NEXT: br %r14
245+
;
246+
; MISC3-LABEL: masked_merge_no_transform1:
247+
; MISC3: # %bb.0:
248+
; MISC3-NEXT: nrk %r0, %r2, %r3
249+
; MISC3-NEXT: ncrk %r1, %r4, %r2
250+
; MISC3-NEXT: xilf %r2, 4294967295
251+
; MISC3-NEXT: or %r0, %r1
252+
; MISC3-NEXT: st %r2, 0(%r5)
253+
; MISC3-NEXT: lr %r2, %r0
254+
; MISC3-NEXT: br %r14
255+
%and0 = and i32 %a0, %a1
256+
%not = xor i32 %a0, -1
257+
%and1 = and i32 %not, %a2
258+
%or = or i32 %and0, %and1
259+
store i32 %not, ptr %p1
260+
ret i32 %or
261+
}
262+
263+
define i32 @masked_merge_no_transform2(i32 %a0, i32 %a1, i32 %a2, ptr %p1) {
264+
; NO-MISC3-LABEL: masked_merge_no_transform2:
265+
; NO-MISC3: # %bb.0:
266+
; NO-MISC3-NEXT: nr %r3, %r2
267+
; NO-MISC3-NEXT: xilf %r2, 4294967295
268+
; NO-MISC3-NEXT: nr %r4, %r2
269+
; NO-MISC3-NEXT: ork %r2, %r3, %r4
270+
; NO-MISC3-NEXT: st %r4, 0(%r5)
271+
; NO-MISC3-NEXT: br %r14
272+
;
273+
; MISC3-LABEL: masked_merge_no_transform2:
274+
; MISC3: # %bb.0:
275+
; MISC3-NEXT: nr %r3, %r2
276+
; MISC3-NEXT: ncrk %r0, %r4, %r2
277+
; MISC3-NEXT: ork %r2, %r3, %r0
278+
; MISC3-NEXT: st %r0, 0(%r5)
279+
; MISC3-NEXT: br %r14
280+
%and0 = and i32 %a0, %a1
281+
%not = xor i32 %a0, -1
282+
%and1 = and i32 %not, %a2
283+
%or = or i32 %and0, %and1
284+
store i32 %and1, ptr %p1
285+
ret i32 %or
286+
}

0 commit comments

Comments
 (0)