Skip to content

Commit 8b7ac35

Browse files
committed
Add new test cases and reformat code.
1 parent d014f09 commit 8b7ac35

File tree

3 files changed

+325
-9
lines changed

3 files changed

+325
-9
lines changed

llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11638,15 +11638,15 @@ SDValue DAGCombiner::foldBitwiseOpWithNeg(SDNode *N) {
1163811638
SDLoc DL(N);
1163911639
SDValue X, Y, Z, NotY;
1164011640

11641-
if (sd_match(
11642-
N, m_c_BinOp(Opc, m_Value(X), m_Add(m_AllOf(m_Value(NotY), m_Not(m_Value(Y))),
11643-
m_Value(Z)))))
11641+
if (sd_match(N, m_c_BinOp(Opc, m_Value(X),
11642+
m_Add(m_AllOf(m_Value(NotY), m_Not(m_Value(Y))),
11643+
m_Value(Z)))))
1164411644
return DAG.getNode(Opc, DL, VT, X,
1164511645
DAG.getNOT(DL, DAG.getNode(ISD::SUB, DL, VT, Y, Z), VT));
1164611646

1164711647
if (sd_match(N, m_c_BinOp(Opc, m_Value(X),
11648-
m_Sub(m_AllOf(m_Value(NotY), m_Not(m_Value(Y))),
11649-
m_Value(Z)))) &&
11648+
m_Sub(m_AllOf(m_Value(NotY), m_Not(m_Value(Y))),
11649+
m_Value(Z)))) &&
1165011650
NotY->hasOneUse())
1165111651
return DAG.getNode(Opc, DL, VT, X,
1165211652
DAG.getNOT(DL, DAG.getNode(ISD::ADD, DL, VT, Y, Z), VT));
Lines changed: 316 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,316 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc < %s -mtriple=aarch64-linux | FileCheck %s
3+
4+
define i8 @andnot_add_with_neg_i8(i8 %0, i8 %1) {
5+
; CHECK-LABEL: andnot_add_with_neg_i8:
6+
; CHECK: // %bb.0: // %entry
7+
; CHECK-NEXT: sub w8, w0, w1
8+
; CHECK-NEXT: bic w0, w0, w8
9+
; CHECK-NEXT: ret
10+
entry:
11+
%3 = xor i8 %0, -1
12+
%4 = add i8 %3, %1
13+
%5 = and i8 %4, %0
14+
ret i8 %5
15+
}
16+
17+
define i8 @andnot_sub_with_neg_i8(i8 %0, i8 %1) {
18+
; CHECK-LABEL: andnot_sub_with_neg_i8:
19+
; CHECK: // %bb.0: // %entry
20+
; CHECK-NEXT: add w8, w0, w1
21+
; CHECK-NEXT: bic w0, w0, w8
22+
; CHECK-NEXT: ret
23+
entry:
24+
%3 = xor i8 %0, -1
25+
%4 = sub i8 %3, %1
26+
%5 = and i8 %4, %0
27+
ret i8 %5
28+
}
29+
30+
define i8 @xornot_add_with_neg_i8(i8 %0, i8 %1) {
31+
; CHECK-LABEL: xornot_add_with_neg_i8:
32+
; CHECK: // %bb.0: // %entry
33+
; CHECK-NEXT: sub w8, w0, w1
34+
; CHECK-NEXT: eon w0, w8, w0
35+
; CHECK-NEXT: ret
36+
entry:
37+
%3 = xor i8 %0, -1
38+
%4 = add i8 %3, %1
39+
%5 = xor i8 %4, %0
40+
ret i8 %5
41+
}
42+
43+
define i8 @xornot_sub_with_neg_i8(i8 %0, i8 %1) {
44+
; CHECK-LABEL: xornot_sub_with_neg_i8:
45+
; CHECK: // %bb.0: // %entry
46+
; CHECK-NEXT: add w8, w0, w1
47+
; CHECK-NEXT: eon w0, w8, w0
48+
; CHECK-NEXT: ret
49+
entry:
50+
%3 = xor i8 %0, -1
51+
%4 = sub i8 %3, %1
52+
%5 = xor i8 %4, %0
53+
ret i8 %5
54+
}
55+
56+
define i8 @ornot_add_with_neg_i8(i8 %0, i8 %1) {
57+
; CHECK-LABEL: ornot_add_with_neg_i8:
58+
; CHECK: // %bb.0: // %entry
59+
; CHECK-NEXT: sub w8, w0, w1
60+
; CHECK-NEXT: orn w0, w0, w8
61+
; CHECK-NEXT: ret
62+
entry:
63+
%3 = xor i8 %0, -1
64+
%4 = add i8 %3, %1
65+
%5 = or i8 %4, %0
66+
ret i8 %5
67+
}
68+
69+
define i8 @ornot_sub_with_neg_i8(i8 %0, i8 %1) {
70+
; CHECK-LABEL: ornot_sub_with_neg_i8:
71+
; CHECK: // %bb.0: // %entry
72+
; CHECK-NEXT: add w8, w0, w1
73+
; CHECK-NEXT: orn w0, w0, w8
74+
; CHECK-NEXT: ret
75+
entry:
76+
%3 = xor i8 %0, -1
77+
%4 = sub i8 %3, %1
78+
%5 = or i8 %4, %0
79+
ret i8 %5
80+
}
81+
82+
83+
define i16 @andnot_add_with_neg_i16(i16 %0, i16 %1) {
84+
; CHECK-LABEL: andnot_add_with_neg_i16:
85+
; CHECK: // %bb.0: // %entry
86+
; CHECK-NEXT: sub w8, w0, w1
87+
; CHECK-NEXT: bic w0, w0, w8
88+
; CHECK-NEXT: ret
89+
entry:
90+
%3 = xor i16 %0, -1
91+
%4 = add i16 %3, %1
92+
%5 = and i16 %4, %0
93+
ret i16 %5
94+
}
95+
96+
define i16 @andnot_sub_with_neg_i16(i16 %0, i16 %1) {
97+
; CHECK-LABEL: andnot_sub_with_neg_i16:
98+
; CHECK: // %bb.0: // %entry
99+
; CHECK-NEXT: add w8, w0, w1
100+
; CHECK-NEXT: bic w0, w0, w8
101+
; CHECK-NEXT: ret
102+
entry:
103+
%3 = xor i16 %0, -1
104+
%4 = sub i16 %3, %1
105+
%5 = and i16 %4, %0
106+
ret i16 %5
107+
}
108+
109+
define i16 @xornot_add_with_neg_i16(i16 %0, i16 %1) {
110+
; CHECK-LABEL: xornot_add_with_neg_i16:
111+
; CHECK: // %bb.0: // %entry
112+
; CHECK-NEXT: sub w8, w0, w1
113+
; CHECK-NEXT: eon w0, w8, w0
114+
; CHECK-NEXT: ret
115+
entry:
116+
%3 = xor i16 %0, -1
117+
%4 = add i16 %3, %1
118+
%5 = xor i16 %4, %0
119+
ret i16 %5
120+
}
121+
122+
define i16 @xornot_sub_with_neg_i16(i16 %0, i16 %1) {
123+
; CHECK-LABEL: xornot_sub_with_neg_i16:
124+
; CHECK: // %bb.0: // %entry
125+
; CHECK-NEXT: add w8, w0, w1
126+
; CHECK-NEXT: eon w0, w8, w0
127+
; CHECK-NEXT: ret
128+
entry:
129+
%3 = xor i16 %0, -1
130+
%4 = sub i16 %3, %1
131+
%5 = xor i16 %4, %0
132+
ret i16 %5
133+
}
134+
135+
define i16 @ornot_add_with_neg_i16(i16 %0, i16 %1) {
136+
; CHECK-LABEL: ornot_add_with_neg_i16:
137+
; CHECK: // %bb.0: // %entry
138+
; CHECK-NEXT: sub w8, w0, w1
139+
; CHECK-NEXT: orn w0, w0, w8
140+
; CHECK-NEXT: ret
141+
entry:
142+
%3 = xor i16 %0, -1
143+
%4 = add i16 %3, %1
144+
%5 = or i16 %4, %0
145+
ret i16 %5
146+
}
147+
148+
define i16 @ornot_sub_with_neg_i16(i16 %0, i16 %1) {
149+
; CHECK-LABEL: ornot_sub_with_neg_i16:
150+
; CHECK: // %bb.0: // %entry
151+
; CHECK-NEXT: add w8, w0, w1
152+
; CHECK-NEXT: orn w0, w0, w8
153+
; CHECK-NEXT: ret
154+
entry:
155+
%3 = xor i16 %0, -1
156+
%4 = sub i16 %3, %1
157+
%5 = or i16 %4, %0
158+
ret i16 %5
159+
}
160+
161+
define i32 @andnot_add_with_neg_i32(i32 %0, i32 %1) {
162+
; CHECK-LABEL: andnot_add_with_neg_i32:
163+
; CHECK: // %bb.0: // %entry
164+
; CHECK-NEXT: sub w8, w0, w1
165+
; CHECK-NEXT: bic w0, w0, w8
166+
; CHECK-NEXT: ret
167+
entry:
168+
%3 = xor i32 %0, -1
169+
%4 = add i32 %3, %1
170+
%5 = and i32 %4, %0
171+
ret i32 %5
172+
}
173+
174+
define i32 @andnot_sub_with_neg_i32(i32 %0, i32 %1) {
175+
; CHECK-LABEL: andnot_sub_with_neg_i32:
176+
; CHECK: // %bb.0: // %entry
177+
; CHECK-NEXT: add w8, w0, w1
178+
; CHECK-NEXT: bic w0, w0, w8
179+
; CHECK-NEXT: ret
180+
entry:
181+
%3 = xor i32 %0, -1
182+
%4 = sub i32 %3, %1
183+
%5 = and i32 %4, %0
184+
ret i32 %5
185+
}
186+
187+
define i32 @xornot_add_with_neg_i32(i32 %0, i32 %1) {
188+
; CHECK-LABEL: xornot_add_with_neg_i32:
189+
; CHECK: // %bb.0: // %entry
190+
; CHECK-NEXT: sub w8, w0, w1
191+
; CHECK-NEXT: eon w0, w8, w0
192+
; CHECK-NEXT: ret
193+
entry:
194+
%3 = xor i32 %0, -1
195+
%4 = add i32 %3, %1
196+
%5 = xor i32 %4, %0
197+
ret i32 %5
198+
}
199+
200+
define i32 @xornot_sub_with_neg_i32(i32 %0, i32 %1) {
201+
; CHECK-LABEL: xornot_sub_with_neg_i32:
202+
; CHECK: // %bb.0: // %entry
203+
; CHECK-NEXT: add w8, w0, w1
204+
; CHECK-NEXT: eon w0, w8, w0
205+
; CHECK-NEXT: ret
206+
entry:
207+
%3 = xor i32 %0, -1
208+
%4 = sub i32 %3, %1
209+
%5 = xor i32 %4, %0
210+
ret i32 %5
211+
}
212+
213+
define i32 @ornot_add_with_neg_i32(i32 %0, i32 %1) {
214+
; CHECK-LABEL: ornot_add_with_neg_i32:
215+
; CHECK: // %bb.0: // %entry
216+
; CHECK-NEXT: sub w8, w0, w1
217+
; CHECK-NEXT: orn w0, w0, w8
218+
; CHECK-NEXT: ret
219+
entry:
220+
%3 = xor i32 %0, -1
221+
%4 = add i32 %3, %1
222+
%5 = or i32 %4, %0
223+
ret i32 %5
224+
}
225+
226+
define i32 @ornot_sub_with_neg_i32(i32 %0, i32 %1) {
227+
; CHECK-LABEL: ornot_sub_with_neg_i32:
228+
; CHECK: // %bb.0: // %entry
229+
; CHECK-NEXT: add w8, w0, w1
230+
; CHECK-NEXT: orn w0, w0, w8
231+
; CHECK-NEXT: ret
232+
entry:
233+
%3 = xor i32 %0, -1
234+
%4 = sub i32 %3, %1
235+
%5 = or i32 %4, %0
236+
ret i32 %5
237+
}
238+
239+
240+
define i64 @andnot_add_with_neg_i64(i64 %0, i64 %1) {
241+
; CHECK-LABEL: andnot_add_with_neg_i64:
242+
; CHECK: // %bb.0: // %entry
243+
; CHECK-NEXT: sub x8, x0, x1
244+
; CHECK-NEXT: bic x0, x0, x8
245+
; CHECK-NEXT: ret
246+
entry:
247+
%3 = xor i64 %0, -1
248+
%4 = add i64 %3, %1
249+
%5 = and i64 %4, %0
250+
ret i64 %5
251+
}
252+
253+
define i64 @andnot_sub_with_neg_i64(i64 %0, i64 %1) {
254+
; CHECK-LABEL: andnot_sub_with_neg_i64:
255+
; CHECK: // %bb.0: // %entry
256+
; CHECK-NEXT: add x8, x0, x1
257+
; CHECK-NEXT: bic x0, x0, x8
258+
; CHECK-NEXT: ret
259+
entry:
260+
%3 = xor i64 %0, -1
261+
%4 = sub i64 %3, %1
262+
%5 = and i64 %4, %0
263+
ret i64 %5
264+
}
265+
266+
define i64 @xornot_add_with_neg_i64(i64 %0, i64 %1) {
267+
; CHECK-LABEL: xornot_add_with_neg_i64:
268+
; CHECK: // %bb.0: // %entry
269+
; CHECK-NEXT: sub x8, x0, x1
270+
; CHECK-NEXT: eon x0, x8, x0
271+
; CHECK-NEXT: ret
272+
entry:
273+
%3 = xor i64 %0, -1
274+
%4 = add i64 %3, %1
275+
%5 = xor i64 %4, %0
276+
ret i64 %5
277+
}
278+
279+
define i64 @xornot_sub_with_neg_i64(i64 %0, i64 %1) {
280+
; CHECK-LABEL: xornot_sub_with_neg_i64:
281+
; CHECK: // %bb.0: // %entry
282+
; CHECK-NEXT: add x8, x0, x1
283+
; CHECK-NEXT: eon x0, x8, x0
284+
; CHECK-NEXT: ret
285+
entry:
286+
%3 = xor i64 %0, -1
287+
%4 = sub i64 %3, %1
288+
%5 = xor i64 %4, %0
289+
ret i64 %5
290+
}
291+
292+
define i64 @ornot_add_with_neg_i64(i64 %0, i64 %1) {
293+
; CHECK-LABEL: ornot_add_with_neg_i64:
294+
; CHECK: // %bb.0: // %entry
295+
; CHECK-NEXT: sub x8, x0, x1
296+
; CHECK-NEXT: orn x0, x0, x8
297+
; CHECK-NEXT: ret
298+
entry:
299+
%3 = xor i64 %0, -1
300+
%4 = add i64 %3, %1
301+
%5 = or i64 %4, %0
302+
ret i64 %5
303+
}
304+
305+
define i64 @ornot_sub_with_neg_i64(i64 %0, i64 %1) {
306+
; CHECK-LABEL: ornot_sub_with_neg_i64:
307+
; CHECK: // %bb.0: // %entry
308+
; CHECK-NEXT: add x8, x0, x1
309+
; CHECK-NEXT: orn x0, x0, x8
310+
; CHECK-NEXT: ret
311+
entry:
312+
%3 = xor i64 %0, -1
313+
%4 = sub i64 %3, %1
314+
%5 = or i64 %4, %0
315+
ret i64 %5
316+
}

llvm/test/CodeGen/X86/fold-pcmpeqd-2.ll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ define void @program_1(ptr %dest, ptr %t0, <4 x float> %p0, <4 x float> %p1, <4
112112
; X64-NEXT: LBB0_3: ## %forbody
113113
; X64-NEXT: pushq %rbx
114114
; X64-NEXT: subq $48, %rsp
115-
; X64-NEXT: movaps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
115+
; X64-NEXT: movaps {{.*#+}} xmm1 = [1.28E+2,1.28E+2,1.28E+2,1.28E+2]
116116
; X64-NEXT: minps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
117117
; X64-NEXT: cvttps2dq %xmm1, %xmm0
118118
; X64-NEXT: cvtdq2ps %xmm0, %xmm0
@@ -172,10 +172,10 @@ define void @program_1(ptr %dest, ptr %t0, <4 x float> %p0, <4 x float> %p1, <4
172172
; X64-NEXT: xorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
173173
; X64-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) ## 16-byte Spill
174174
; X64-NEXT: movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 ## 16-byte Reload
175-
; X64-NEXT: por %xmm1, %xmm0
175+
; X64-NEXT: por %xmm1, %xmm0
176176
; X64-NEXT: movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) ## 16-byte Spill
177-
; X64-NEXT: xorps %xmm3, %xmm3
178-
; X64-NEXT: xorps %xmm4, %xmm4
177+
; X64-NEXT: xorps %xmm3, %xmm3
178+
; X64-NEXT: xorps %xmm4, %xmm4
179179
; X64-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 ## 16-byte Reload
180180
; X64-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 ## 16-byte Reload
181181
; X64-NEXT: movaps (%rsp), %xmm2 ## 16-byte Reload

0 commit comments

Comments
 (0)