Line data Source code
1 : /* Generated automatically by the program `genmatch' from
2 : a IL pattern matching and simplification description. */
3 : #pragma GCC diagnostic push
4 : #pragma GCC diagnostic ignored "-Wunused-variable"
5 : #pragma GCC diagnostic ignored "-Wunused-function"
6 :
7 : #include "generic-match-auto.h"
8 :
9 : bool
10 1163496372 : tree_nop_convert (tree t, tree *res_ops)
11 : {
12 1163496372 : const tree type = TREE_TYPE (t);
13 1163496372 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
14 1163496372 : if (TREE_SIDE_EFFECTS (t)) return false;
15 1117240564 : switch (TREE_CODE (t))
16 : {
17 241620085 : CASE_CONVERT:
18 241620085 : {
19 241620085 : tree _p0 = TREE_OPERAND (t, 0);
20 241620085 : {
21 241620085 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
22 241620085 : if (tree_nop_conversion_p (type, TREE_TYPE (captures[0]))
23 : )
24 : {
25 198184949 : {
26 198184949 : res_ops[0] = captures[0];
27 198184949 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 0, __FILE__, __LINE__, false);
28 198184949 : return true;
29 : }
30 : }
31 : }
32 : break;
33 : }
34 4597639 : case VIEW_CONVERT_EXPR:
35 4597639 : {
36 4597639 : tree _p0 = TREE_OPERAND (t, 0);
37 4597639 : {
38 4597639 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
39 3211908 : if (VECTOR_TYPE_P (type) && VECTOR_TYPE_P (TREE_TYPE (captures[0]))
40 3211890 : && known_eq (TYPE_VECTOR_SUBPARTS (type),
41 : TYPE_VECTOR_SUBPARTS (TREE_TYPE (captures[0])))
42 6818276 : && tree_nop_conversion_p (TREE_TYPE (type), TREE_TYPE (TREE_TYPE (captures[0])))
43 : )
44 : {
45 2220627 : {
46 2220627 : res_ops[0] = captures[0];
47 2220627 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 1, __FILE__, __LINE__, false);
48 2220627 : return true;
49 : }
50 : }
51 : }
52 2377012 : break;
53 : }
54 : default:;
55 : }
56 : return false;
57 : }
58 :
59 : bool
60 92107326 : tree_with_known_nonzero_bits (tree t)
61 : {
62 92107326 : const tree type = TREE_TYPE (t);
63 92107326 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
64 92107326 : if (TREE_SIDE_EFFECTS (t)) return false;
65 86861063 : switch (TREE_CODE (t))
66 : {
67 277576 : case BIT_IOR_EXPR:
68 277576 : {
69 277576 : tree _p0 = TREE_OPERAND (t, 0);
70 277576 : tree _p1 = TREE_OPERAND (t, 1);
71 277576 : if (tree_with_known_nonzero_bits_1 (_p0))
72 : {
73 269962 : {
74 269962 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
75 269962 : {
76 269962 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 39, __FILE__, __LINE__, false);
77 269962 : return true;
78 : }
79 : }
80 : }
81 7614 : if (tree_with_known_nonzero_bits_1 (_p1))
82 : {
83 186 : {
84 186 : tree captures[2] ATTRIBUTE_UNUSED = { _p1, _p0 };
85 186 : {
86 186 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 39, __FILE__, __LINE__, false);
87 186 : return true;
88 : }
89 : }
90 : }
91 : break;
92 : }
93 86590915 : default:;
94 : }
95 86590915 : if (tree_with_known_nonzero_bits_1 (t))
96 : {
97 40204196 : {
98 40204196 : tree captures[1] ATTRIBUTE_UNUSED = { t };
99 40204196 : {
100 40204196 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 40, __FILE__, __LINE__, false);
101 40204196 : return true;
102 : }
103 : }
104 : }
105 : return false;
106 : }
107 :
108 : tree
109 15 : generic_simplify_4 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
110 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
111 : const enum tree_code ARG_UNUSED (op))
112 : {
113 15 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
114 15 : if (INTEGRAL_TYPE_P (type)
115 : )
116 : {
117 15 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail75;
118 15 : {
119 15 : tree res_op0;
120 15 : {
121 15 : tree _o1[2], _r1;
122 15 : _o1[0] = captures[1];
123 15 : _o1[1] = captures[4];
124 15 : _r1 = fold_build2_loc (loc, op, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
125 15 : res_op0 = _r1;
126 : }
127 15 : tree res_op1;
128 15 : res_op1 = captures[2];
129 15 : tree _r;
130 15 : _r = fold_build2_loc (loc, RSHIFT_EXPR, type, res_op0, res_op1);
131 15 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 52, __FILE__, __LINE__, true);
132 15 : return _r;
133 : }
134 0 : next_after_fail75:;
135 : }
136 : return NULL_TREE;
137 : }
138 :
139 : tree
140 90 : generic_simplify_12 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
141 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures))
142 : {
143 90 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
144 90 : {
145 90 : bool wascmp;
146 90 : if (bitwise_inverted_equal_p (captures[0], captures[2], wascmp)
147 90 : && (!wascmp || element_precision (type) == 1)
148 : )
149 : {
150 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail87;
151 0 : {
152 0 : tree _r;
153 0 : _r = captures[0];
154 0 : if (TREE_SIDE_EFFECTS (captures[1]))
155 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
156 0 : if (TREE_SIDE_EFFECTS (captures[2]))
157 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[2]), _r);
158 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 60, __FILE__, __LINE__, true);
159 0 : return _r;
160 : }
161 0 : next_after_fail87:;
162 : }
163 : }
164 90 : return NULL_TREE;
165 : }
166 :
167 : tree
168 0 : generic_simplify_21 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
169 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures))
170 : {
171 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
172 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail96;
173 0 : {
174 0 : tree res_op0;
175 0 : res_op0 = captures[0];
176 0 : tree res_op1;
177 0 : res_op1 = captures[1];
178 0 : tree _r;
179 0 : _r = fold_build2_loc (loc, BIT_AND_EXPR, type, res_op0, res_op1);
180 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 69, __FILE__, __LINE__, true);
181 : return _r;
182 : }
183 0 : next_after_fail96:;
184 0 : return NULL_TREE;
185 : }
186 :
187 : tree
188 113 : generic_simplify_29 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
189 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
190 : const enum tree_code ARG_UNUSED (opo),
191 : const enum tree_code ARG_UNUSED (opi))
192 : {
193 113 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
194 113 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail104;
195 113 : {
196 113 : tree res_op0;
197 113 : {
198 113 : tree _o1[1], _r1;
199 113 : _o1[0] = captures[1];
200 113 : _r1 = fold_build1_loc (loc, BIT_NOT_EXPR, TREE_TYPE (_o1[0]), _o1[0]);
201 113 : res_op0 = _r1;
202 : }
203 113 : tree res_op1;
204 113 : res_op1 = captures[2];
205 113 : tree _r;
206 113 : _r = fold_build2_loc (loc, BIT_AND_EXPR, type, res_op0, res_op1);
207 113 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 77, __FILE__, __LINE__, true);
208 : return _r;
209 : }
210 0 : next_after_fail104:;
211 0 : return NULL_TREE;
212 : }
213 :
214 : tree
215 268455 : generic_simplify_34 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
216 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
217 : const enum tree_code ARG_UNUSED (bitop),
218 : const enum tree_code ARG_UNUSED (rbitop),
219 : const enum tree_code ARG_UNUSED (resbitop))
220 : {
221 268455 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
222 268455 : {
223 268455 : bool wascmp;
224 268455 : if (bitwise_inverted_equal_p (captures[2], captures[0], wascmp)
225 268455 : && (!wascmp || element_precision (type) == 1)
226 : )
227 : {
228 13 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail109;
229 13 : {
230 13 : tree res_op0;
231 13 : res_op0 = captures[2];
232 13 : tree res_op1;
233 13 : res_op1 = captures[1];
234 13 : tree _r;
235 13 : _r = fold_build2_loc (loc, resbitop, type, res_op0, res_op1);
236 13 : if (TREE_SIDE_EFFECTS (captures[0]))
237 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[0]), _r);
238 13 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 81, __FILE__, __LINE__, true);
239 13 : return _r;
240 : }
241 0 : next_after_fail109:;
242 : }
243 : }
244 268442 : return NULL_TREE;
245 : }
246 :
247 : tree
248 56 : generic_simplify_43 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
249 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
250 : const enum tree_code ARG_UNUSED (inner_op),
251 : const enum tree_code ARG_UNUSED (outer_op))
252 : {
253 56 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
254 56 : {
255 56 : bool fail = false;
256 56 : wide_int zero_mask_not;
257 56 : wide_int C0;
258 56 : wide_int cst_emit;
259 56 : if (TREE_CODE (captures[1]) == SSA_NAME)
260 0 : zero_mask_not = get_nonzero_bits (captures[1]);
261 : else
262 : fail = true;
263 56 : if (inner_op == BIT_XOR_EXPR)
264 : {
265 33 : C0 = wi::bit_and_not (wi::to_wide (captures[2]), wi::to_wide (captures[3]));
266 33 : cst_emit = C0 | wi::to_wide (captures[3]);
267 : }
268 : else
269 : {
270 23 : C0 = wi::to_wide (captures[2]);
271 23 : cst_emit = C0 ^ wi::to_wide (captures[3]);
272 : }
273 56 : if (!fail && (C0 & zero_mask_not) == 0
274 : )
275 : {
276 0 : if (TREE_SIDE_EFFECTS (captures[1])) goto next_after_fail120;
277 0 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail120;
278 0 : if (TREE_SIDE_EFFECTS (captures[3])) goto next_after_fail120;
279 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail120;
280 0 : {
281 0 : tree res_op0;
282 0 : res_op0 = captures[1];
283 0 : tree res_op1;
284 0 : res_op1 = wide_int_to_tree (type, cst_emit);
285 0 : tree _r;
286 0 : _r = fold_build2_loc (loc, outer_op, type, res_op0, res_op1);
287 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 91, __FILE__, __LINE__, true);
288 0 : return _r;
289 : }
290 56 : next_after_fail120:;
291 : }
292 : else
293 : {
294 56 : if (!fail && (wi::to_wide (captures[3]) & zero_mask_not) == 0
295 : )
296 : {
297 0 : if (TREE_SIDE_EFFECTS (captures[1])) goto next_after_fail121;
298 0 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail121;
299 0 : if (TREE_SIDE_EFFECTS (captures[3])) goto next_after_fail121;
300 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail121;
301 0 : {
302 0 : tree res_op0;
303 0 : res_op0 = captures[1];
304 0 : tree res_op1;
305 0 : res_op1 = wide_int_to_tree (type, cst_emit);
306 0 : tree _r;
307 0 : _r = fold_build2_loc (loc, inner_op, type, res_op0, res_op1);
308 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 92, __FILE__, __LINE__, true);
309 0 : return _r;
310 : }
311 56 : next_after_fail121:;
312 : }
313 : }
314 56 : }
315 56 : return NULL_TREE;
316 : }
317 :
318 : tree
319 7 : generic_simplify_57 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
320 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
321 : const enum tree_code ARG_UNUSED (op))
322 : {
323 7 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
324 7 : if (INTEGRAL_TYPE_P (type)
325 7 : && TYPE_OVERFLOW_WRAPS (type)
326 14 : && !TYPE_SATURATING (type)
327 : )
328 : {
329 7 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail138;
330 7 : {
331 7 : tree res_op0;
332 7 : {
333 7 : tree _o1[2], _r1;
334 7 : _o1[0] = captures[1];
335 7 : _o1[1] = captures[4];
336 7 : _r1 = fold_build2_loc (loc, op, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
337 7 : res_op0 = _r1;
338 : }
339 7 : tree res_op1;
340 7 : res_op1 = captures[2];
341 7 : tree _r;
342 7 : _r = fold_build2_loc (loc, LSHIFT_EXPR, type, res_op0, res_op1);
343 7 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 106, __FILE__, __LINE__, true);
344 7 : return _r;
345 : }
346 0 : next_after_fail138:;
347 : }
348 : return NULL_TREE;
349 : }
350 :
351 : tree
352 864 : generic_simplify_65 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
353 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures))
354 : {
355 864 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
356 864 : if (!TYPE_SATURATING (type)
357 : )
358 : {
359 864 : if ((!FLOAT_TYPE_P (type) || flag_associative_math)
360 1728 : && !FIXED_POINT_TYPE_P (type)
361 : )
362 : {
363 864 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail154;
364 864 : {
365 864 : tree res_op0;
366 864 : res_op0 = captures[2];
367 864 : tree res_op1;
368 864 : res_op1 = captures[1];
369 864 : tree _r;
370 864 : _r = fold_build2_loc (loc, PLUS_EXPR, type, res_op0, res_op1);
371 864 : if (TREE_SIDE_EFFECTS (captures[0]))
372 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[0]), _r);
373 864 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 122, __FILE__, __LINE__, true);
374 864 : return _r;
375 : }
376 0 : next_after_fail154:;
377 : }
378 : }
379 : return NULL_TREE;
380 : }
381 :
382 : tree
383 9692 : generic_simplify_72 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
384 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
385 : const enum tree_code ARG_UNUSED (plusminus))
386 : {
387 9692 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
388 9692 : if (!TYPE_SATURATING (type)
389 9692 : && (!FLOAT_TYPE_P (type) || flag_associative_math)
390 : )
391 : {
392 9526 : if (!ALL_FRACT_MODE_P (TYPE_MODE (type))
393 : )
394 : {
395 4 : if ((!ANY_INTEGRAL_TYPE_P (type)
396 9522 : || TYPE_OVERFLOW_WRAPS (type)
397 3305 : || (INTEGRAL_TYPE_P (type)
398 3305 : && ((tree_expr_nonzero_p (captures[0])
399 136 : && expr_not_equal_to (captures[0],
400 9662 : wi::minus_one (TYPE_PRECISION (type)),
401 : gimple_match_ctx (captures[1])))
402 : || (plusminus == PLUS_EXPR
403 3169 : ? expr_not_equal_to (captures[2],
404 9544 : wi::max_value (TYPE_PRECISION (type), SIGNED),
405 : gimple_match_ctx (captures[1]))
406 3151 : : (expr_not_equal_to (captures[2],
407 12677 : wi::min_value (TYPE_PRECISION (type), SIGNED),
408 : gimple_match_ctx (captures[1]))
409 3127 : && expr_not_equal_to (captures[2],
410 6254 : wi::min_value (TYPE_PRECISION (type), SIGNED)
411 18907 : + 1, gimple_match_ctx (captures[1])))))))
412 12695 : && single_use (captures[1])
413 : )
414 : {
415 9502 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail162;
416 9502 : {
417 9502 : tree res_op0;
418 9502 : {
419 9502 : tree _o1[2], _r1;
420 9502 : _o1[0] = build_one_cst (type);
421 9502 : _o1[1] = captures[2];
422 9502 : _r1 = fold_build2_loc (loc, plusminus, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
423 9502 : res_op0 = _r1;
424 : }
425 9502 : tree res_op1;
426 9502 : res_op1 = captures[0];
427 9502 : tree _r;
428 9502 : _r = fold_build2_loc (loc, MULT_EXPR, type, res_op0, res_op1);
429 9502 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 130, __FILE__, __LINE__, true);
430 9502 : return _r;
431 : }
432 0 : next_after_fail162:;
433 : }
434 : }
435 : }
436 : return NULL_TREE;
437 : }
438 :
439 : tree
440 0 : generic_simplify_84 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
441 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures))
442 : {
443 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
444 0 : if (TREE_CODE (captures[1]) == SSA_NAME && num_imm_uses (captures[1]) == 2
445 : )
446 : {
447 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail175;
448 0 : {
449 0 : if (! tree_invariant_p (captures[2])) goto next_after_fail175;
450 0 : tree res_op0;
451 0 : {
452 0 : tree _o1[2], _r1;
453 0 : {
454 0 : tree _o2[3], _r2;
455 0 : _o2[0] = unshare_expr (captures[2]);
456 0 : _o2[1] = captures[2];
457 0 : _o2[2] = captures[4];
458 0 : _r2 = fold_build3_loc (loc, VEC_PERM_EXPR, TREE_TYPE (_o2[0]), _o2[0], _o2[1], _o2[2]);
459 0 : _o1[0] = _r2;
460 : }
461 0 : _o1[1] = captures[3];
462 0 : _r1 = fold_build2_loc (loc, MULT_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
463 0 : res_op0 = _r1;
464 : }
465 0 : tree res_op1;
466 0 : res_op1 = captures[5];
467 0 : tree _r;
468 0 : _r = fold_build2_loc (loc, PLUS_EXPR, type, res_op0, res_op1);
469 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 143, __FILE__, __LINE__, true);
470 0 : return _r;
471 : }
472 : next_after_fail175:;
473 : }
474 : return NULL_TREE;
475 : }
476 :
477 : tree
478 1 : generic_simplify_91 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
479 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures))
480 : {
481 1 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
482 1 : if (!TYPE_OVERFLOW_SANITIZED (type) && !TYPE_OVERFLOW_TRAPS (type)
483 1 : && !TYPE_SATURATING (type) && !TYPE_OVERFLOW_SANITIZED (TREE_TYPE (captures[0]))
484 1 : && !TYPE_OVERFLOW_TRAPS (TREE_TYPE (captures[0]))
485 2 : && !TYPE_SATURATING (TREE_TYPE (captures[0]))
486 : )
487 : {
488 1 : if (TREE_SIDE_EFFECTS (_p0)) goto next_after_fail182;
489 1 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail182;
490 1 : {
491 1 : tree res_op0;
492 1 : {
493 1 : tree _o1[1], _r1;
494 1 : {
495 1 : tree _o2[2], _r2;
496 1 : _o2[0] = captures[1];
497 1 : _o2[1] = captures[2];
498 1 : _r2 = fold_build2_loc (loc, BIT_XOR_EXPR, TREE_TYPE (_o2[0]), _o2[0], _o2[1]);
499 1 : _o1[0] = _r2;
500 : }
501 1 : if (TREE_TYPE (_o1[0]) != type)
502 : {
503 0 : _r1 = fold_build1_loc (loc, NOP_EXPR, type, _o1[0]);
504 : }
505 : else
506 : _r1 = _o1[0];
507 1 : res_op0 = _r1;
508 : }
509 1 : tree _r;
510 1 : _r = fold_build1_loc (loc, BIT_NOT_EXPR, type, res_op0);
511 1 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 150, __FILE__, __LINE__, true);
512 1 : return _r;
513 : }
514 : next_after_fail182:;
515 : }
516 : return NULL_TREE;
517 : }
518 :
519 : tree
520 12242 : generic_simplify_103 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
521 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures))
522 : {
523 12242 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
524 12242 : if (!TYPE_SATURATING (type)
525 : )
526 : {
527 12242 : if ((!FLOAT_TYPE_P (type) || flag_associative_math)
528 24484 : && !FIXED_POINT_TYPE_P (type)
529 : )
530 : {
531 12242 : if (element_precision (type) <= element_precision (TREE_TYPE (captures[1]))
532 12242 : || (INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
533 3010 : && TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[1])))
534 : )
535 : {
536 12122 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail198;
537 12122 : {
538 12122 : tree res_op0;
539 12122 : res_op0 = captures[1];
540 12122 : tree _r;
541 12122 : _r = fold_build1_loc (loc, NOP_EXPR, type, res_op0);
542 12122 : if (TREE_SIDE_EFFECTS (captures[2]))
543 15 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[2]), _r);
544 12122 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 165, __FILE__, __LINE__, true);
545 12122 : return _r;
546 : }
547 0 : next_after_fail198:;
548 : }
549 : }
550 : }
551 : return NULL_TREE;
552 : }
553 :
554 : tree
555 2 : generic_simplify_108 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
556 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
557 : const combined_fn ARG_UNUSED (logs))
558 : {
559 2 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
560 2 : if (flag_unsafe_math_optimizations
561 : )
562 : {
563 2 : if (! HONOR_SIGN_DEPENDENT_ROUNDING (type)
564 2 : && ! HONOR_NANS (type) && ! HONOR_INFINITIES (type)
565 2 : && ! flag_trapping_math
566 4 : && ! flag_errno_math
567 : )
568 : {
569 2 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail205;
570 2 : {
571 2 : tree res_op0;
572 2 : {
573 2 : tree _o1[2], _r1;
574 2 : _o1[0] = captures[1];
575 2 : _o1[1] = captures[3];
576 2 : _r1 = fold_build2_loc (loc, RDIV_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
577 2 : res_op0 = _r1;
578 : }
579 2 : tree _r;
580 2 : _r = maybe_build_call_expr_loc (loc, logs, type, 1, res_op0);
581 2 : if (!_r)
582 0 : goto next_after_fail205;
583 2 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 172, __FILE__, __LINE__, true);
584 2 : return _r;
585 : }
586 : next_after_fail205:;
587 : }
588 : }
589 : return NULL_TREE;
590 : }
591 :
592 : tree
593 20379 : generic_simplify_115 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
594 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures))
595 : {
596 20379 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
597 20379 : {
598 20379 : bool wascmp;
599 20379 : if (bitwise_inverted_equal_p (captures[0], captures[2], wascmp)
600 20379 : && (!wascmp || element_precision (type) == 1)
601 : )
602 : {
603 1 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail212;
604 1 : {
605 1 : tree res_op0;
606 1 : res_op0 = captures[0];
607 1 : tree res_op1;
608 1 : {
609 1 : tree _o1[1], _r1;
610 1 : _o1[0] = captures[3];
611 1 : _r1 = fold_build1_loc (loc, BIT_NOT_EXPR, TREE_TYPE (_o1[0]), _o1[0]);
612 1 : res_op1 = _r1;
613 : }
614 1 : tree _r;
615 1 : _r = fold_build2_loc (loc, BIT_IOR_EXPR, type, res_op0, res_op1);
616 1 : if (TREE_SIDE_EFFECTS (captures[2]))
617 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[2]), _r);
618 1 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 179, __FILE__, __LINE__, true);
619 1 : return _r;
620 : }
621 0 : next_after_fail212:;
622 : }
623 : }
624 20378 : return NULL_TREE;
625 : }
626 :
627 : tree
628 2 : generic_simplify_124 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
629 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures))
630 : {
631 2 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
632 2 : if (TREE_SIDE_EFFECTS (_p0)) goto next_after_fail221;
633 2 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail221;
634 2 : {
635 2 : tree res_op0;
636 2 : res_op0 = captures[0];
637 2 : tree res_op1;
638 2 : res_op1 = captures[3];
639 2 : tree _r;
640 2 : _r = fold_build2_loc (loc, BIT_IOR_EXPR, type, res_op0, res_op1);
641 2 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 186, __FILE__, __LINE__, true);
642 : return _r;
643 : }
644 : next_after_fail221:;
645 : return NULL_TREE;
646 : }
647 :
648 : tree
649 0 : generic_simplify_135 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
650 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
651 : const enum tree_code ARG_UNUSED (op))
652 : {
653 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
654 0 : if (TREE_SIDE_EFFECTS (_p1)) goto next_after_fail232;
655 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail232;
656 0 : {
657 0 : tree _r;
658 0 : _r = captures[0];
659 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 183, __FILE__, __LINE__, true);
660 : return _r;
661 : }
662 : next_after_fail232:;
663 : return NULL_TREE;
664 : }
665 :
666 : tree
667 0 : generic_simplify_144 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
668 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
669 : const enum tree_code ARG_UNUSED (bitop),
670 : const enum tree_code ARG_UNUSED (rbitop))
671 : {
672 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
673 0 : if (TREE_SIDE_EFFECTS (_p0)) goto next_after_fail245;
674 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail245;
675 0 : {
676 0 : tree _r;
677 0 : _r = captures[2];
678 0 : if (TREE_SIDE_EFFECTS (captures[1]))
679 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
680 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 197, __FILE__, __LINE__, true);
681 : return _r;
682 : }
683 : next_after_fail245:;
684 : return NULL_TREE;
685 : }
686 :
687 : tree
688 0 : generic_simplify_150 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
689 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
690 : const enum tree_code ARG_UNUSED (op))
691 : {
692 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
693 0 : if (bitwise_equal_p (captures[4], captures[7])
694 : )
695 : {
696 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail252;
697 0 : {
698 0 : tree res_op0;
699 0 : {
700 0 : tree _o1[2], _r1;
701 0 : {
702 0 : tree _o2[2], _r2;
703 0 : _o2[0] = captures[5];
704 0 : {
705 0 : tree _o3[1], _r3;
706 0 : _o3[0] = captures[6];
707 0 : if (TREE_TYPE (_o3[0]) != TREE_TYPE (_o2[0]))
708 : {
709 0 : _r3 = fold_build1_loc (loc, NOP_EXPR, TREE_TYPE (_o2[0]), _o3[0]);
710 : }
711 : else
712 : _r3 = _o3[0];
713 0 : _o2[1] = _r3;
714 : }
715 0 : _r2 = fold_build2_loc (loc, BIT_AND_EXPR, TREE_TYPE (_o2[0]), _o2[0], _o2[1]);
716 0 : _o1[0] = _r2;
717 : }
718 0 : {
719 0 : tree _o2[1], _r2;
720 0 : _o2[0] = captures[4];
721 0 : if (TREE_TYPE (_o2[0]) != TREE_TYPE (_o1[0]))
722 : {
723 0 : _r2 = fold_build1_loc (loc, NOP_EXPR, TREE_TYPE (_o1[0]), _o2[0]);
724 : }
725 : else
726 : _r2 = _o2[0];
727 0 : _o1[1] = _r2;
728 : }
729 0 : _r1 = fold_build2_loc (loc, BIT_IOR_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
730 0 : res_op0 = _r1;
731 : }
732 0 : tree _r;
733 0 : _r = fold_build1_loc (loc, NOP_EXPR, type, res_op0);
734 0 : if (TREE_SIDE_EFFECTS (captures[7]))
735 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[7]), _r);
736 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 201, __FILE__, __LINE__, true);
737 0 : return _r;
738 : }
739 0 : next_after_fail252:;
740 : }
741 : return NULL_TREE;
742 : }
743 :
744 : tree
745 0 : generic_simplify_163 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
746 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures))
747 : {
748 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
749 0 : if (TREE_SIDE_EFFECTS (_p0)) goto next_after_fail287;
750 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail287;
751 0 : {
752 0 : tree _r;
753 0 : _r = captures[2];
754 0 : if (TREE_SIDE_EFFECTS (captures[1]))
755 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
756 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 208, __FILE__, __LINE__, true);
757 : return _r;
758 : }
759 : next_after_fail287:;
760 : return NULL_TREE;
761 : }
762 :
763 : tree
764 0 : generic_simplify_166 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
765 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
766 : const enum tree_code ARG_UNUSED (eqne))
767 : {
768 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
769 0 : if (eqne == EQ_EXPR
770 : )
771 : {
772 0 : if (TREE_SIDE_EFFECTS (_p0)) goto next_after_fail290;
773 0 : if (TREE_SIDE_EFFECTS (_p1)) goto next_after_fail290;
774 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail290;
775 0 : {
776 0 : tree _r;
777 0 : _r = captures[0];
778 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 230, __FILE__, __LINE__, true);
779 0 : return _r;
780 : }
781 : next_after_fail290:;
782 : }
783 : else
784 : {
785 0 : if (eqne == NE_EXPR
786 : )
787 : {
788 0 : if (TREE_SIDE_EFFECTS (_p0)) goto next_after_fail291;
789 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail291;
790 0 : {
791 0 : tree _r;
792 0 : _r = constant_boolean_node (true, type);
793 0 : if (TREE_SIDE_EFFECTS (captures[2]))
794 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[2]), _r);
795 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 231, __FILE__, __LINE__, true);
796 0 : return _r;
797 : }
798 : next_after_fail291:;
799 : }
800 : }
801 : return NULL_TREE;
802 : }
803 :
804 : tree
805 8 : generic_simplify_172 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
806 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
807 : const enum tree_code ARG_UNUSED (eqne))
808 : {
809 8 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
810 8 : if (eqne == EQ_EXPR
811 : )
812 : {
813 4 : if (TREE_SIDE_EFFECTS (_p0)) goto next_after_fail309;
814 4 : if (TREE_SIDE_EFFECTS (_p1)) goto next_after_fail309;
815 4 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail309;
816 4 : {
817 4 : tree _r;
818 4 : _r = captures[0];
819 4 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 230, __FILE__, __LINE__, true);
820 4 : return _r;
821 : }
822 : next_after_fail309:;
823 : }
824 : else
825 : {
826 4 : if (eqne == NE_EXPR
827 : )
828 : {
829 4 : if (TREE_SIDE_EFFECTS (_p1)) goto next_after_fail310;
830 4 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail310;
831 4 : {
832 4 : tree _r;
833 4 : _r = constant_boolean_node (true, type);
834 4 : if (TREE_SIDE_EFFECTS (captures[2]))
835 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[2]), _r);
836 4 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 231, __FILE__, __LINE__, true);
837 4 : return _r;
838 : }
839 : next_after_fail310:;
840 : }
841 : }
842 : return NULL_TREE;
843 : }
844 :
845 : tree
846 4 : generic_simplify_181 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
847 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
848 : const combined_fn ARG_UNUSED (COPYSIGN_ALL))
849 : {
850 4 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
851 4 : if (!tree_expr_maybe_nan_p (captures[0]) && !HONOR_SIGNED_ZEROS (type)
852 : )
853 : {
854 0 : if (TREE_SIDE_EFFECTS (_p0)) goto next_after_fail319;
855 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail319;
856 0 : {
857 0 : tree res_op0;
858 0 : res_op0 = captures[0];
859 0 : tree _r;
860 0 : _r = fold_build1_loc (loc, ABS_EXPR, type, res_op0);
861 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 237, __FILE__, __LINE__, true);
862 0 : return _r;
863 : }
864 : next_after_fail319:;
865 : }
866 : return NULL_TREE;
867 : }
868 :
869 : tree
870 6423046 : generic_simplify_184 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
871 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
872 : const enum tree_code ARG_UNUSED (op))
873 : {
874 6423046 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
875 6423046 : if (TREE_SIDE_EFFECTS (_p1)) goto next_after_fail322;
876 6423046 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail322;
877 6423046 : {
878 6423046 : tree res_op0;
879 6423046 : res_op0 = captures[0];
880 6423046 : tree _r;
881 6423046 : _r = non_lvalue_loc (loc, res_op0);
882 6423046 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 239, __FILE__, __LINE__, true);
883 : return _r;
884 : }
885 : next_after_fail322:;
886 : return NULL_TREE;
887 : }
888 :
889 : tree
890 3 : generic_simplify_187 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
891 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures))
892 : {
893 3 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
894 3 : if (TREE_SIDE_EFFECTS (_p0)) goto next_after_fail325;
895 3 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail325;
896 3 : {
897 3 : tree _r;
898 3 : _r = build_zero_cst (type);
899 3 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 242, __FILE__, __LINE__, true);
900 : return _r;
901 : }
902 : next_after_fail325:;
903 : return NULL_TREE;
904 : }
905 :
906 : tree
907 1206 : generic_simplify_192 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
908 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
909 : const enum tree_code ARG_UNUSED (cmp))
910 : {
911 1206 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
912 1206 : if (fold_before_rtl_expansion_p ()
913 : )
914 : {
915 0 : if (INTEGRAL_TYPE_P (type)
916 0 : && INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
917 : )
918 : {
919 0 : if (TREE_SIDE_EFFECTS (_p0)) goto next_after_fail332;
920 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail332;
921 0 : {
922 0 : tree res_op0;
923 0 : res_op0 = captures[0];
924 0 : tree res_op1;
925 0 : res_op1 = captures[3];
926 0 : tree res_op2;
927 0 : res_op2 = build_zero_cst (type);
928 0 : tree _r;
929 0 : _r = fold_build3_loc (loc, COND_EXPR, type, res_op0, res_op1, res_op2);
930 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 246, __FILE__, __LINE__, true);
931 0 : return _r;
932 : }
933 : next_after_fail332:;
934 : }
935 : }
936 : return NULL_TREE;
937 : }
938 :
939 : tree
940 5558 : generic_simplify_198 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
941 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
942 : const enum tree_code ARG_UNUSED (op))
943 : {
944 5558 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
945 5558 : {
946 5558 : poly_widest_int factor;
947 5558 : if (tree_nop_conversion_p (type, TREE_TYPE (captures[2]))
948 5527 : && tree_nop_conversion_p (TREE_TYPE (captures[0]), TREE_TYPE (captures[2]))
949 11085 : && multiple_p (wi::to_poly_widest (captures[3]), wi::to_widest (captures[1]), &factor)
950 : )
951 : {
952 5481 : {
953 5481 : wi::overflow_type overflow;
954 5481 : wide_int mul;
955 5481 : if (types_match (type, TREE_TYPE (captures[2]))
956 5435 : && types_match (TREE_TYPE (captures[0]), TREE_TYPE (captures[2]))
957 0 : && TREE_CODE (captures[2]) == INTEGER_CST
958 0 : && TREE_CODE (captures[3]) == INTEGER_CST
959 5481 : && (mul = wi::mul (wi::to_wide (captures[2]), wi::to_wide (captures[3]),
960 0 : TYPE_SIGN (type), &overflow),
961 0 : !overflow)
962 5481 : && (TYPE_UNSIGNED (type)
963 5481 : || known_eq (factor, 1)
964 0 : || (get_range_pos_neg (captures[0])
965 0 : | (((op == PLUS_EXPR) ^ (tree_int_cst_sgn (captures[2]) < 0))
966 0 : ? 1 : 2)) != 3)
967 : )
968 : {
969 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail338;
970 0 : {
971 0 : tree res_op0;
972 0 : {
973 0 : tree _o1[2], _r1;
974 0 : _o1[0] = captures[0];
975 0 : _o1[1] = wide_int_to_tree (type, factor);
976 0 : _r1 = fold_build2_loc (loc, MULT_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
977 0 : res_op0 = _r1;
978 : }
979 0 : tree res_op1;
980 0 : res_op1 = wide_int_to_tree (type, mul);
981 0 : tree _r;
982 0 : _r = fold_build2_loc (loc, op, type, res_op0, res_op1);
983 0 : if (TREE_SIDE_EFFECTS (captures[1]))
984 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
985 0 : if (TREE_SIDE_EFFECTS (captures[2]))
986 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[2]), _r);
987 0 : if (TREE_SIDE_EFFECTS (captures[3]))
988 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[3]), _r);
989 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 251, __FILE__, __LINE__, true);
990 0 : return _r;
991 : }
992 0 : next_after_fail338:;
993 : }
994 : else
995 : {
996 5481 : {
997 5481 : tree utype = unsigned_type_for (type);
998 5481 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail339;
999 5481 : {
1000 5481 : tree res_op0;
1001 5481 : {
1002 5481 : tree _o1[2], _r1;
1003 5481 : {
1004 5481 : tree _o2[2], _r2;
1005 5481 : {
1006 5481 : tree _o3[1], _r3;
1007 5481 : _o3[0] = captures[0];
1008 5481 : if (TREE_TYPE (_o3[0]) != utype)
1009 : {
1010 5481 : _r3 = fold_build1_loc (loc, NOP_EXPR, utype, _o3[0]);
1011 : }
1012 : else
1013 : _r3 = _o3[0];
1014 5481 : _o2[0] = _r3;
1015 : }
1016 5481 : _o2[1] = wide_int_to_tree (utype, factor);
1017 5481 : _r2 = fold_build2_loc (loc, MULT_EXPR, TREE_TYPE (_o2[0]), _o2[0], _o2[1]);
1018 5481 : _o1[0] = _r2;
1019 : }
1020 5481 : {
1021 5481 : tree _o2[2], _r2;
1022 5481 : {
1023 5481 : tree _o3[1], _r3;
1024 5481 : _o3[0] = captures[3];
1025 5481 : if (TREE_TYPE (_o3[0]) != utype)
1026 : {
1027 14 : _r3 = fold_build1_loc (loc, NOP_EXPR, utype, _o3[0]);
1028 : }
1029 : else
1030 : _r3 = _o3[0];
1031 5481 : _o2[0] = _r3;
1032 : }
1033 5481 : {
1034 5481 : tree _o3[1], _r3;
1035 5481 : _o3[0] = captures[2];
1036 5481 : if (TREE_TYPE (_o3[0]) != utype)
1037 : {
1038 46 : _r3 = fold_build1_loc (loc, NOP_EXPR, utype, _o3[0]);
1039 : }
1040 : else
1041 : _r3 = _o3[0];
1042 5481 : _o2[1] = _r3;
1043 : }
1044 5481 : _r2 = fold_build2_loc (loc, MULT_EXPR, TREE_TYPE (_o2[0]), _o2[0], _o2[1]);
1045 5481 : _o1[1] = _r2;
1046 : }
1047 5481 : _r1 = fold_build2_loc (loc, op, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
1048 5481 : res_op0 = _r1;
1049 : }
1050 5481 : tree _r;
1051 5481 : _r = fold_build1_loc (loc, NOP_EXPR, type, res_op0);
1052 5481 : if (TREE_SIDE_EFFECTS (captures[1]))
1053 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
1054 5481 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 252, __FILE__, __LINE__, true);
1055 5481 : return _r;
1056 : }
1057 0 : next_after_fail339:;
1058 : }
1059 : }
1060 0 : }
1061 : }
1062 5558 : }
1063 77 : return NULL_TREE;
1064 : }
1065 :
1066 : tree
1067 6 : generic_simplify_228 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
1068 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
1069 : const enum tree_code ARG_UNUSED (neeq))
1070 : {
1071 6 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1072 6 : {
1073 6 : poly_int64 diff; tree inner_type = TREE_TYPE (captures[1]);
1074 6 : if (ptr_difference_const (captures[0], captures[2], &diff)
1075 : )
1076 : {
1077 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail385;
1078 0 : {
1079 0 : tree res_op0;
1080 0 : {
1081 0 : tree _o1[2], _r1;
1082 0 : _o1[0] = build_int_cst_type (inner_type, diff);
1083 0 : _o1[1] = captures[1];
1084 0 : _r1 = fold_build2_loc (loc, PLUS_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
1085 0 : res_op0 = _r1;
1086 : }
1087 0 : tree res_op1;
1088 0 : res_op1 = captures[3];
1089 0 : tree _r;
1090 0 : _r = fold_build2_loc (loc, neeq, type, res_op0, res_op1);
1091 0 : if (TREE_SIDE_EFFECTS (captures[0]))
1092 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[0]), _r);
1093 0 : if (TREE_SIDE_EFFECTS (captures[2]))
1094 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[2]), _r);
1095 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 296, __FILE__, __LINE__, true);
1096 0 : return _r;
1097 : }
1098 0 : next_after_fail385:;
1099 : }
1100 : }
1101 6 : return NULL_TREE;
1102 : }
1103 :
1104 : tree
1105 0 : generic_simplify_239 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
1106 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
1107 : const enum tree_code ARG_UNUSED (cmp),
1108 : const enum tree_code ARG_UNUSED (icmp))
1109 : {
1110 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1111 0 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
1112 : )
1113 : {
1114 0 : if (TREE_SIDE_EFFECTS (_p0)) goto next_after_fail400;
1115 0 : if (TREE_SIDE_EFFECTS (_p1)) goto next_after_fail400;
1116 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail400;
1117 0 : {
1118 0 : tree res_op0;
1119 0 : res_op0 = captures[0];
1120 0 : tree res_op1;
1121 0 : res_op1 = wide_int_to_tree (TREE_TYPE (captures[0]),
1122 0 : wi::exact_log2 (wi::to_wide (captures[1])));
1123 0 : tree _r;
1124 0 : _r = fold_build2_loc (loc, icmp, type, res_op0, res_op1);
1125 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 311, __FILE__, __LINE__, true);
1126 0 : return _r;
1127 : }
1128 : next_after_fail400:;
1129 : }
1130 : return NULL_TREE;
1131 : }
1132 :
1133 : tree
1134 0 : generic_simplify_243 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
1135 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
1136 : const enum tree_code ARG_UNUSED (rotate),
1137 : const enum tree_code ARG_UNUSED (invrot),
1138 : const enum tree_code ARG_UNUSED (cmp))
1139 : {
1140 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1141 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail412;
1142 0 : {
1143 0 : tree res_op0;
1144 0 : res_op0 = captures[0];
1145 0 : tree res_op1;
1146 0 : res_op1 = captures[2];
1147 0 : tree _r;
1148 0 : _r = fold_build2_loc (loc, cmp, type, res_op0, res_op1);
1149 0 : if (TREE_SIDE_EFFECTS (captures[1]))
1150 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
1151 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 323, __FILE__, __LINE__, true);
1152 : return _r;
1153 : }
1154 0 : next_after_fail412:;
1155 0 : return NULL_TREE;
1156 : }
1157 :
1158 : tree
1159 27 : generic_simplify_248 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
1160 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
1161 : const enum tree_code ARG_UNUSED (cmp),
1162 : const combined_fn ARG_UNUSED (bswap))
1163 : {
1164 27 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1165 27 : {
1166 27 : tree ctype = TREE_TYPE (captures[1]);
1167 27 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail417;
1168 27 : {
1169 27 : tree res_op0;
1170 27 : {
1171 27 : tree _o1[1], _r1;
1172 27 : _o1[0] = captures[0];
1173 27 : if (TREE_TYPE (_o1[0]) != ctype)
1174 : {
1175 0 : _r1 = fold_build1_loc (loc, NOP_EXPR, ctype, _o1[0]);
1176 : }
1177 : else
1178 : _r1 = _o1[0];
1179 27 : res_op0 = _r1;
1180 : }
1181 27 : tree res_op1;
1182 27 : {
1183 27 : tree _o1[1], _r1;
1184 27 : _o1[0] = captures[1];
1185 27 : _r1 = maybe_build_call_expr_loc (loc, bswap, TREE_TYPE (_o1[0]), 1, _o1[0]);
1186 27 : if (!_r1)
1187 0 : goto next_after_fail417;
1188 27 : if (EXPR_P (_r1))
1189 27 : goto next_after_fail417;
1190 0 : res_op1 = _r1;
1191 : }
1192 0 : tree _r;
1193 0 : _r = fold_build2_loc (loc, cmp, type, res_op0, res_op1);
1194 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 328, __FILE__, __LINE__, true);
1195 : return _r;
1196 : }
1197 : next_after_fail417:;
1198 : }
1199 : return NULL_TREE;
1200 : }
1201 :
1202 : tree
1203 0 : generic_simplify_257 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
1204 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
1205 : const enum tree_code ARG_UNUSED (cmp))
1206 : {
1207 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1208 0 : if (single_use (captures[1]) && single_use (captures[3])
1209 : )
1210 : {
1211 0 : {
1212 0 : tree otype = TREE_TYPE (captures[0]);
1213 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail432;
1214 0 : {
1215 0 : tree res_op0;
1216 0 : {
1217 0 : tree _o1[1], _r1;
1218 0 : _o1[0] = captures[4];
1219 0 : if (TREE_TYPE (_o1[0]) != otype)
1220 : {
1221 0 : _r1 = fold_build1_loc (loc, NOP_EXPR, otype, _o1[0]);
1222 : }
1223 : else
1224 : _r1 = _o1[0];
1225 0 : res_op0 = _r1;
1226 : }
1227 0 : tree res_op1;
1228 0 : {
1229 0 : tree _o1[1], _r1;
1230 0 : _o1[0] = captures[2];
1231 0 : if (TREE_TYPE (_o1[0]) != otype)
1232 : {
1233 0 : _r1 = fold_build1_loc (loc, NOP_EXPR, otype, _o1[0]);
1234 : }
1235 : else
1236 : _r1 = _o1[0];
1237 0 : res_op1 = _r1;
1238 : }
1239 0 : tree _r;
1240 0 : _r = fold_build2_loc (loc, cmp, type, res_op0, res_op1);
1241 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 342, __FILE__, __LINE__, true);
1242 0 : return _r;
1243 : }
1244 0 : next_after_fail432:;
1245 : }
1246 : }
1247 0 : return NULL_TREE;
1248 : }
1249 :
1250 : tree
1251 22 : generic_simplify_263 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
1252 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
1253 : const combined_fn ARG_UNUSED (sq),
1254 : const enum tree_code ARG_UNUSED (cmp))
1255 : {
1256 22 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1257 22 : if (flag_unsafe_math_optimizations && ! flag_errno_math
1258 : )
1259 : {
1260 20 : if (REAL_VALUE_NEGATIVE (TREE_REAL_CST (captures[1]))
1261 : )
1262 : {
1263 2 : if (cmp == EQ_EXPR || cmp == LT_EXPR || cmp == LE_EXPR
1264 : )
1265 : {
1266 1 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail452;
1267 1 : {
1268 1 : tree _r;
1269 1 : _r = constant_boolean_node (false, type);
1270 1 : if (TREE_SIDE_EFFECTS (captures[0]))
1271 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[0]), _r);
1272 1 : if (TREE_SIDE_EFFECTS (captures[1]))
1273 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
1274 1 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 361, __FILE__, __LINE__, true);
1275 1 : return _r;
1276 : }
1277 0 : next_after_fail452:;
1278 0 : }
1279 : else
1280 : {
1281 1 : if (cmp == NE_EXPR || !HONOR_NANS (captures[0])
1282 : )
1283 : {
1284 1 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail453;
1285 1 : {
1286 1 : tree _r;
1287 1 : _r = constant_boolean_node (true, type);
1288 1 : if (TREE_SIDE_EFFECTS (captures[0]))
1289 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[0]), _r);
1290 1 : if (TREE_SIDE_EFFECTS (captures[1]))
1291 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
1292 1 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 362, __FILE__, __LINE__, true);
1293 1 : return _r;
1294 : }
1295 0 : next_after_fail453:;
1296 : }
1297 : else
1298 : {
1299 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail454;
1300 0 : {
1301 0 : tree res_op0;
1302 0 : res_op0 = captures[0];
1303 0 : tree res_op1;
1304 0 : res_op1 = build_real (TREE_TYPE (captures[0]), dconst0);
1305 0 : tree _r;
1306 0 : _r = fold_build2_loc (loc, GE_EXPR, type, res_op0, res_op1);
1307 0 : if (TREE_SIDE_EFFECTS (captures[1]))
1308 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
1309 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 363, __FILE__, __LINE__, true);
1310 0 : return _r;
1311 : }
1312 0 : next_after_fail454:;
1313 : }
1314 : }
1315 : }
1316 : else
1317 : {
1318 18 : if (real_equal (TREE_REAL_CST_PTR (captures[1]), &dconst0)
1319 : )
1320 : {
1321 0 : if (cmp == LT_EXPR
1322 : )
1323 : {
1324 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail455;
1325 0 : {
1326 0 : tree _r;
1327 0 : _r = constant_boolean_node (false, type);
1328 0 : if (TREE_SIDE_EFFECTS (captures[0]))
1329 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[0]), _r);
1330 0 : if (TREE_SIDE_EFFECTS (captures[1]))
1331 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
1332 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 364, __FILE__, __LINE__, true);
1333 0 : return _r;
1334 : }
1335 0 : next_after_fail455:;
1336 : }
1337 : else
1338 : {
1339 0 : if (cmp == GE_EXPR && !HONOR_NANS (captures[0])
1340 : )
1341 : {
1342 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail456;
1343 0 : {
1344 0 : tree _r;
1345 0 : _r = constant_boolean_node (true, type);
1346 0 : if (TREE_SIDE_EFFECTS (captures[0]))
1347 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[0]), _r);
1348 0 : if (TREE_SIDE_EFFECTS (captures[1]))
1349 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
1350 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 365, __FILE__, __LINE__, true);
1351 0 : return _r;
1352 : }
1353 0 : next_after_fail456:;
1354 : }
1355 : else
1356 : {
1357 0 : if (cmp == LE_EXPR
1358 : )
1359 : {
1360 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail457;
1361 0 : {
1362 0 : tree res_op0;
1363 0 : res_op0 = captures[0];
1364 0 : tree res_op1;
1365 0 : res_op1 = captures[1];
1366 0 : tree _r;
1367 0 : _r = fold_build2_loc (loc, EQ_EXPR, type, res_op0, res_op1);
1368 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 366, __FILE__, __LINE__, true);
1369 0 : return _r;
1370 : }
1371 0 : next_after_fail457:;
1372 : }
1373 : else
1374 : {
1375 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail458;
1376 0 : {
1377 0 : tree res_op0;
1378 0 : res_op0 = captures[0];
1379 0 : tree res_op1;
1380 0 : res_op1 = captures[1];
1381 0 : tree _r;
1382 0 : _r = fold_build2_loc (loc, cmp, type, res_op0, res_op1);
1383 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 367, __FILE__, __LINE__, true);
1384 0 : return _r;
1385 : }
1386 0 : next_after_fail458:;
1387 : }
1388 : }
1389 : }
1390 : }
1391 : else
1392 : {
1393 18 : if ((cmp == LT_EXPR
1394 : || cmp == LE_EXPR
1395 : || cmp == GT_EXPR
1396 18 : || cmp == GE_EXPR)
1397 16 : && !REAL_VALUE_ISNAN (TREE_REAL_CST (captures[1]))
1398 34 : && !HONOR_SIGN_DEPENDENT_ROUNDING (TREE_TYPE (captures[0]))
1399 : )
1400 : {
1401 16 : {
1402 16 : REAL_VALUE_TYPE c2;
1403 16 : enum tree_code ncmp = cmp;
1404 16 : const real_format *fmt
1405 16 : = REAL_MODE_FORMAT (TYPE_MODE (TREE_TYPE (captures[0])));
1406 32 : real_arithmetic (&c2, MULT_EXPR,
1407 16 : &TREE_REAL_CST (captures[1]), &TREE_REAL_CST (captures[1]));
1408 16 : real_convert (&c2, fmt, &c2);
1409 16 : if (!REAL_VALUE_ISINF (c2))
1410 : {
1411 13 : tree c3 = fold_const_call (CFN_SQRT, TREE_TYPE (captures[0]),
1412 13 : build_real (TREE_TYPE (captures[0]), c2));
1413 13 : if (c3 == NULL_TREE || TREE_CODE (c3) != REAL_CST)
1414 : ncmp = ERROR_MARK;
1415 13 : else if ((cmp == LT_EXPR || cmp == GE_EXPR)
1416 13 : && real_less (&TREE_REAL_CST (c3), &TREE_REAL_CST (captures[1])))
1417 4 : ncmp = cmp == LT_EXPR ? LE_EXPR : GT_EXPR;
1418 9 : else if ((cmp == LE_EXPR || cmp == GT_EXPR)
1419 13 : && real_less (&TREE_REAL_CST (captures[1]), &TREE_REAL_CST (c3)))
1420 1 : ncmp = cmp == LE_EXPR ? LT_EXPR : GE_EXPR;
1421 : else
1422 : {
1423 8 : REAL_VALUE_TYPE c2alt, tow;
1424 8 : if (cmp == LT_EXPR || cmp == GE_EXPR)
1425 5 : tow = dconst0;
1426 : else
1427 3 : tow = dconstinf;
1428 8 : real_nextafter (&c2alt, fmt, &c2, &tow);
1429 8 : real_convert (&c2alt, fmt, &c2alt);
1430 8 : if (REAL_VALUE_ISINF (c2alt))
1431 : ncmp = ERROR_MARK;
1432 : else
1433 : {
1434 8 : c3 = fold_const_call (CFN_SQRT, TREE_TYPE (captures[0]),
1435 8 : build_real (TREE_TYPE (captures[0]), c2alt));
1436 8 : if (c3 == NULL_TREE || TREE_CODE (c3) != REAL_CST)
1437 : ncmp = ERROR_MARK;
1438 8 : else if (real_equal (&TREE_REAL_CST (c3),
1439 8 : &TREE_REAL_CST (captures[1])))
1440 8 : c2 = c2alt;
1441 : }
1442 : }
1443 : }
1444 12 : if (cmp == GT_EXPR || cmp == GE_EXPR
1445 : )
1446 : {
1447 5 : if (REAL_VALUE_ISINF (c2)
1448 : )
1449 : {
1450 1 : if (HONOR_INFINITIES (captures[0])
1451 : )
1452 : {
1453 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail459;
1454 0 : {
1455 0 : tree res_op0;
1456 0 : res_op0 = captures[0];
1457 0 : tree res_op1;
1458 0 : res_op1 = build_real (TREE_TYPE (captures[0]), c2);
1459 0 : tree _r;
1460 0 : _r = fold_build2_loc (loc, EQ_EXPR, type, res_op0, res_op1);
1461 0 : if (TREE_SIDE_EFFECTS (captures[1]))
1462 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
1463 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 368, __FILE__, __LINE__, true);
1464 14 : return _r;
1465 : }
1466 0 : next_after_fail459:;
1467 : }
1468 : else
1469 : {
1470 1 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail460;
1471 1 : {
1472 1 : tree _r;
1473 1 : _r = constant_boolean_node (false, type);
1474 1 : if (TREE_SIDE_EFFECTS (captures[0]))
1475 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[0]), _r);
1476 1 : if (TREE_SIDE_EFFECTS (captures[1]))
1477 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
1478 1 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 369, __FILE__, __LINE__, true);
1479 1 : return _r;
1480 : }
1481 0 : next_after_fail460:;
1482 : }
1483 : }
1484 : else
1485 : {
1486 4 : if (ncmp != ERROR_MARK
1487 : )
1488 : {
1489 4 : if (ncmp == GE_EXPR
1490 : )
1491 : {
1492 1 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail461;
1493 1 : {
1494 1 : tree res_op0;
1495 1 : res_op0 = captures[0];
1496 1 : tree res_op1;
1497 1 : res_op1 = build_real (TREE_TYPE (captures[0]), c2);
1498 1 : tree _r;
1499 1 : _r = fold_build2_loc (loc, GE_EXPR, type, res_op0, res_op1);
1500 1 : if (TREE_SIDE_EFFECTS (captures[1]))
1501 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
1502 1 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 370, __FILE__, __LINE__, true);
1503 1 : return _r;
1504 : }
1505 0 : next_after_fail461:;
1506 : }
1507 : else
1508 : {
1509 3 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail462;
1510 3 : {
1511 3 : tree res_op0;
1512 3 : res_op0 = captures[0];
1513 3 : tree res_op1;
1514 3 : res_op1 = build_real (TREE_TYPE (captures[0]), c2);
1515 3 : tree _r;
1516 3 : _r = fold_build2_loc (loc, GT_EXPR, type, res_op0, res_op1);
1517 3 : if (TREE_SIDE_EFFECTS (captures[1]))
1518 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
1519 3 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 371, __FILE__, __LINE__, true);
1520 3 : return _r;
1521 : }
1522 0 : next_after_fail462:;
1523 : }
1524 : }
1525 : }
1526 : }
1527 : else
1528 : {
1529 11 : if (REAL_VALUE_ISINF (c2)
1530 : )
1531 : {
1532 2 : if (! HONOR_NANS (captures[0]) && ! HONOR_INFINITIES (captures[0])
1533 : )
1534 : {
1535 1 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail463;
1536 1 : {
1537 1 : tree _r;
1538 1 : _r = constant_boolean_node (true, type);
1539 1 : if (TREE_SIDE_EFFECTS (captures[0]))
1540 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[0]), _r);
1541 1 : if (TREE_SIDE_EFFECTS (captures[1]))
1542 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
1543 1 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 372, __FILE__, __LINE__, true);
1544 1 : return _r;
1545 : }
1546 0 : next_after_fail463:;
1547 : }
1548 : else
1549 : {
1550 1 : if (! HONOR_NANS (captures[0])
1551 : )
1552 : {
1553 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail464;
1554 0 : {
1555 0 : tree res_op0;
1556 0 : res_op0 = captures[0];
1557 0 : tree res_op1;
1558 0 : res_op1 = build_real (TREE_TYPE (captures[0]), c2);
1559 0 : tree _r;
1560 0 : _r = fold_build2_loc (loc, NE_EXPR, type, res_op0, res_op1);
1561 0 : if (TREE_SIDE_EFFECTS (captures[1]))
1562 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
1563 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 373, __FILE__, __LINE__, true);
1564 0 : return _r;
1565 : }
1566 0 : next_after_fail464:;
1567 : }
1568 : else
1569 : {
1570 1 : if (! HONOR_INFINITIES (captures[0])
1571 : )
1572 : {
1573 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail465;
1574 0 : {
1575 0 : tree res_op0;
1576 0 : res_op0 = captures[0];
1577 0 : tree res_op1;
1578 0 : res_op1 = build_real (TREE_TYPE (captures[0]), dconst0);
1579 0 : tree _r;
1580 0 : _r = fold_build2_loc (loc, GE_EXPR, type, res_op0, res_op1);
1581 0 : if (TREE_SIDE_EFFECTS (captures[1]))
1582 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
1583 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 374, __FILE__, __LINE__, true);
1584 0 : return _r;
1585 : }
1586 0 : next_after_fail465:;
1587 : }
1588 : else
1589 : {
1590 1 : if (1
1591 : )
1592 : {
1593 1 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail466;
1594 1 : {
1595 1 : if (! tree_invariant_p (captures[0])) goto next_after_fail466;
1596 0 : tree res_op0;
1597 0 : {
1598 0 : tree _o1[2], _r1;
1599 0 : _o1[0] = unshare_expr (captures[0]);
1600 0 : _o1[1] = build_real (TREE_TYPE (captures[0]), dconst0);
1601 0 : _r1 = fold_build2_loc (loc, GE_EXPR, type, _o1[0], _o1[1]);
1602 0 : res_op0 = _r1;
1603 : }
1604 0 : tree res_op1;
1605 0 : {
1606 0 : tree _o1[2], _r1;
1607 0 : _o1[0] = captures[0];
1608 0 : _o1[1] = build_real (TREE_TYPE (captures[0]), c2);
1609 0 : _r1 = fold_build2_loc (loc, NE_EXPR, type, _o1[0], _o1[1]);
1610 0 : res_op1 = _r1;
1611 : }
1612 0 : tree _r;
1613 0 : _r = fold_build2_loc (loc, TRUTH_ANDIF_EXPR, type, res_op0, res_op1);
1614 0 : if (TREE_SIDE_EFFECTS (captures[1]))
1615 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
1616 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 375, __FILE__, __LINE__, true);
1617 0 : return _r;
1618 : }
1619 2 : next_after_fail466:;
1620 : }
1621 : }
1622 : }
1623 : }
1624 : }
1625 : else
1626 : {
1627 9 : if (ncmp != ERROR_MARK && ! HONOR_NANS (captures[0])
1628 : )
1629 : {
1630 8 : if (ncmp == LT_EXPR
1631 : )
1632 : {
1633 4 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail467;
1634 4 : {
1635 4 : tree res_op0;
1636 4 : res_op0 = captures[0];
1637 4 : tree res_op1;
1638 4 : res_op1 = build_real (TREE_TYPE (captures[0]), c2);
1639 4 : tree _r;
1640 4 : _r = fold_build2_loc (loc, LT_EXPR, type, res_op0, res_op1);
1641 4 : if (TREE_SIDE_EFFECTS (captures[1]))
1642 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
1643 4 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 376, __FILE__, __LINE__, true);
1644 4 : return _r;
1645 : }
1646 0 : next_after_fail467:;
1647 : }
1648 : else
1649 : {
1650 4 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail468;
1651 4 : {
1652 4 : tree res_op0;
1653 4 : res_op0 = captures[0];
1654 4 : tree res_op1;
1655 4 : res_op1 = build_real (TREE_TYPE (captures[0]), c2);
1656 4 : tree _r;
1657 4 : _r = fold_build2_loc (loc, LE_EXPR, type, res_op0, res_op1);
1658 4 : if (TREE_SIDE_EFFECTS (captures[1]))
1659 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
1660 4 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 377, __FILE__, __LINE__, true);
1661 4 : return _r;
1662 : }
1663 0 : next_after_fail468:;
1664 : }
1665 : }
1666 : else
1667 : {
1668 1 : if (ncmp != ERROR_MARK &&
1669 : 1
1670 : )
1671 : {
1672 1 : if (ncmp == LT_EXPR
1673 : )
1674 : {
1675 1 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail469;
1676 1 : {
1677 1 : if (! tree_invariant_p (captures[0])) goto next_after_fail469;
1678 0 : tree res_op0;
1679 0 : {
1680 0 : tree _o1[2], _r1;
1681 0 : _o1[0] = unshare_expr (captures[0]);
1682 0 : _o1[1] = build_real (TREE_TYPE (captures[0]), dconst0);
1683 0 : _r1 = fold_build2_loc (loc, GE_EXPR, type, _o1[0], _o1[1]);
1684 0 : res_op0 = _r1;
1685 : }
1686 0 : tree res_op1;
1687 0 : {
1688 0 : tree _o1[2], _r1;
1689 0 : _o1[0] = captures[0];
1690 0 : _o1[1] = build_real (TREE_TYPE (captures[0]), c2);
1691 0 : _r1 = fold_build2_loc (loc, LT_EXPR, type, _o1[0], _o1[1]);
1692 0 : res_op1 = _r1;
1693 : }
1694 0 : tree _r;
1695 0 : _r = fold_build2_loc (loc, TRUTH_ANDIF_EXPR, type, res_op0, res_op1);
1696 0 : if (TREE_SIDE_EFFECTS (captures[1]))
1697 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
1698 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 378, __FILE__, __LINE__, true);
1699 0 : return _r;
1700 : }
1701 2 : next_after_fail469:;
1702 : }
1703 : else
1704 : {
1705 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail470;
1706 0 : {
1707 0 : if (! tree_invariant_p (captures[0])) goto next_after_fail470;
1708 0 : tree res_op0;
1709 0 : {
1710 0 : tree _o1[2], _r1;
1711 0 : _o1[0] = unshare_expr (captures[0]);
1712 0 : _o1[1] = build_real (TREE_TYPE (captures[0]), dconst0);
1713 0 : _r1 = fold_build2_loc (loc, GE_EXPR, type, _o1[0], _o1[1]);
1714 0 : res_op0 = _r1;
1715 : }
1716 0 : tree res_op1;
1717 0 : {
1718 0 : tree _o1[2], _r1;
1719 0 : _o1[0] = captures[0];
1720 0 : _o1[1] = build_real (TREE_TYPE (captures[0]), c2);
1721 0 : _r1 = fold_build2_loc (loc, LE_EXPR, type, _o1[0], _o1[1]);
1722 0 : res_op1 = _r1;
1723 : }
1724 0 : tree _r;
1725 0 : _r = fold_build2_loc (loc, TRUTH_ANDIF_EXPR, type, res_op0, res_op1);
1726 0 : if (TREE_SIDE_EFFECTS (captures[1]))
1727 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
1728 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 379, __FILE__, __LINE__, true);
1729 0 : return _r;
1730 : }
1731 2 : next_after_fail470:;
1732 : }
1733 : }
1734 : }
1735 : }
1736 : }
1737 : }
1738 : }
1739 : }
1740 : }
1741 : }
1742 : return NULL_TREE;
1743 : }
1744 :
1745 : tree
1746 6 : generic_simplify_337 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
1747 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
1748 : const combined_fn ARG_UNUSED (SIN),
1749 : const combined_fn ARG_UNUSED (COS),
1750 : const combined_fn ARG_UNUSED (TAN))
1751 : {
1752 6 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1753 6 : if (flag_unsafe_math_optimizations && canonicalize_math_p ()
1754 : )
1755 : {
1756 6 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail609;
1757 6 : {
1758 6 : tree res_op0;
1759 6 : res_op0 = captures[1];
1760 6 : tree _r;
1761 6 : _r = maybe_build_call_expr_loc (loc, TAN, type, 1, res_op0);
1762 6 : if (!_r)
1763 0 : goto next_after_fail609;
1764 6 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 498, __FILE__, __LINE__, true);
1765 6 : return _r;
1766 : }
1767 : next_after_fail609:;
1768 : }
1769 : return NULL_TREE;
1770 : }
1771 :
1772 : tree
1773 24 : generic_simplify_344 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
1774 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
1775 : const combined_fn ARG_UNUSED (POW))
1776 : {
1777 24 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1778 24 : if (flag_unsafe_math_optimizations && canonicalize_math_p ()
1779 : )
1780 : {
1781 6 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail616;
1782 6 : {
1783 6 : tree res_op0;
1784 6 : res_op0 = captures[0];
1785 6 : tree res_op1;
1786 6 : {
1787 6 : tree _o1[2], _r1;
1788 6 : _o1[0] = captures[2];
1789 6 : {
1790 6 : tree _o2[1], _r2;
1791 6 : _o2[0] = captures[3];
1792 6 : _r2 = fold_build1_loc (loc, NEGATE_EXPR, TREE_TYPE (_o2[0]), _o2[0]);
1793 6 : _o1[1] = _r2;
1794 : }
1795 6 : _r1 = maybe_build_call_expr_loc (loc, POW, TREE_TYPE (_o1[0]), 2, _o1[0], _o1[1]);
1796 6 : if (!_r1)
1797 0 : goto next_after_fail616;
1798 6 : res_op1 = _r1;
1799 : }
1800 6 : tree _r;
1801 6 : _r = fold_build2_loc (loc, MULT_EXPR, type, res_op0, res_op1);
1802 6 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 505, __FILE__, __LINE__, true);
1803 6 : return _r;
1804 : }
1805 : next_after_fail616:;
1806 : }
1807 : return NULL_TREE;
1808 : }
1809 :
1810 : tree
1811 0 : generic_simplify_353 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
1812 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree ARG_UNUSED (_p2), tree *ARG_UNUSED (captures),
1813 : const enum tree_code ARG_UNUSED (cmp))
1814 : {
1815 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1816 0 : if (INTEGRAL_TYPE_P (type)
1817 : )
1818 : {
1819 0 : if (TREE_SIDE_EFFECTS (captures[0])) goto next_after_fail631;
1820 0 : if (TREE_SIDE_EFFECTS (captures[1])) goto next_after_fail631;
1821 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail631;
1822 0 : {
1823 0 : tree res_op0;
1824 0 : res_op0 = captures[0];
1825 0 : tree res_op1;
1826 0 : res_op1 = captures[1];
1827 0 : tree _r;
1828 0 : _r = fold_build2_loc (loc, MAX_EXPR, type, res_op0, res_op1);
1829 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 520, __FILE__, __LINE__, true);
1830 0 : return _r;
1831 : }
1832 : next_after_fail631:;
1833 : }
1834 : return NULL_TREE;
1835 : }
1836 :
1837 : tree
1838 0 : generic_simplify_357 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
1839 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree ARG_UNUSED (_p2), tree *ARG_UNUSED (captures),
1840 : const enum tree_code ARG_UNUSED (op))
1841 : {
1842 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1843 0 : if (TREE_SIDE_EFFECTS (_p0)) goto next_after_fail635;
1844 0 : if (TREE_SIDE_EFFECTS (_p2)) goto next_after_fail635;
1845 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail635;
1846 0 : {
1847 0 : tree _r;
1848 0 : _r = captures[2];
1849 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 524, __FILE__, __LINE__, true);
1850 : return _r;
1851 : }
1852 : next_after_fail635:;
1853 : return NULL_TREE;
1854 : }
1855 :
1856 : tree
1857 51 : generic_simplify_362 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
1858 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree ARG_UNUSED (_p2), tree *ARG_UNUSED (captures),
1859 : const enum tree_code ARG_UNUSED (op))
1860 : {
1861 51 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1862 51 : if (bitwise_equal_p (captures[0], captures[2])
1863 1 : && tree_expr_nonzero_p (captures[3])
1864 52 : && expr_no_side_effects_p (captures[2])
1865 : )
1866 : {
1867 1 : if (TREE_SIDE_EFFECTS (_p0)) goto next_after_fail640;
1868 1 : if (TREE_SIDE_EFFECTS (_p1)) goto next_after_fail640;
1869 1 : if (TREE_SIDE_EFFECTS (_p2)) goto next_after_fail640;
1870 1 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail640;
1871 1 : {
1872 1 : tree _r;
1873 1 : _r = captures[1];
1874 1 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 529, __FILE__, __LINE__, true);
1875 1 : return _r;
1876 : }
1877 : next_after_fail640:;
1878 : }
1879 : return NULL_TREE;
1880 : }
1881 :
1882 : tree
1883 6 : generic_simplify_369 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
1884 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree ARG_UNUSED (_p2), tree *ARG_UNUSED (captures),
1885 : const enum tree_code ARG_UNUSED (neeq),
1886 : const combined_fn ARG_UNUSED (sign))
1887 : {
1888 6 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1889 6 : if (neeq == NE_EXPR
1890 : )
1891 : {
1892 3 : if (TREE_SIDE_EFFECTS (_p0)) goto next_after_fail647;
1893 3 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail647;
1894 3 : {
1895 3 : tree res_op0;
1896 3 : res_op0 = captures[0];
1897 3 : tree _r;
1898 3 : _r = fold_build1_loc (loc, ABS_EXPR, type, res_op0);
1899 3 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 536, __FILE__, __LINE__, true);
1900 3 : return _r;
1901 : }
1902 : next_after_fail647:;
1903 : }
1904 : else
1905 : {
1906 3 : if (TREE_SIDE_EFFECTS (_p0)) goto next_after_fail648;
1907 3 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail648;
1908 3 : {
1909 3 : tree res_op0;
1910 3 : {
1911 3 : tree _o1[1], _r1;
1912 3 : _o1[0] = captures[0];
1913 3 : _r1 = fold_build1_loc (loc, ABS_EXPR, TREE_TYPE (_o1[0]), _o1[0]);
1914 3 : res_op0 = _r1;
1915 : }
1916 3 : tree _r;
1917 3 : _r = fold_build1_loc (loc, NEGATE_EXPR, type, res_op0);
1918 3 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 537, __FILE__, __LINE__, true);
1919 3 : return _r;
1920 : }
1921 : next_after_fail648:;
1922 : }
1923 : return NULL_TREE;
1924 : }
1925 :
1926 : tree
1927 83965 : generic_simplify_382 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
1928 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
1929 : const enum tree_code ARG_UNUSED (op))
1930 : {
1931 83965 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1932 167930 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
1933 83965 : && TYPE_UNSIGNED (TREE_TYPE (captures[1]))
1934 167930 : && wi::only_sign_bit_p (wi::to_wide (captures[1]))
1935 : )
1936 : {
1937 5 : {
1938 5 : tree stype = signed_type_for (TREE_TYPE (captures[1]));
1939 5 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail665;
1940 5 : {
1941 5 : tree res_op0;
1942 5 : {
1943 5 : tree _o1[1], _r1;
1944 5 : _o1[0] = captures[0];
1945 5 : if (TREE_TYPE (_o1[0]) != stype)
1946 : {
1947 5 : _r1 = fold_build1_loc (loc, NOP_EXPR, stype, _o1[0]);
1948 : }
1949 : else
1950 : _r1 = _o1[0];
1951 5 : res_op0 = _r1;
1952 : }
1953 5 : tree res_op1;
1954 5 : {
1955 5 : tree _o1[1], _r1;
1956 5 : _o1[0] = captures[2];
1957 5 : if (TREE_TYPE (_o1[0]) != stype)
1958 : {
1959 5 : _r1 = fold_build1_loc (loc, NOP_EXPR, stype, _o1[0]);
1960 : }
1961 : else
1962 : _r1 = _o1[0];
1963 5 : res_op1 = _r1;
1964 : }
1965 5 : tree _r;
1966 5 : _r = fold_build2_loc (loc, op, type, res_op0, res_op1);
1967 5 : if (TREE_SIDE_EFFECTS (captures[1]))
1968 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
1969 5 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 552, __FILE__, __LINE__, true);
1970 5 : return _r;
1971 : }
1972 0 : next_after_fail665:;
1973 : }
1974 : }
1975 : return NULL_TREE;
1976 : }
1977 :
1978 : tree
1979 9669325 : generic_simplify_392 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
1980 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
1981 : const enum tree_code ARG_UNUSED (cmp),
1982 : const enum tree_code ARG_UNUSED (acmp))
1983 : {
1984 9669325 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1985 9669325 : {
1986 9669325 : tree cst = uniform_integer_cst_p (captures[1]);
1987 9669325 : if (tree_int_cst_sgn (cst) == 1
1988 : )
1989 : {
1990 3949104 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail676;
1991 3949104 : {
1992 3949104 : tree res_op0;
1993 3949104 : res_op0 = captures[0];
1994 3949104 : tree res_op1;
1995 3949104 : res_op1 = build_uniform_cst (TREE_TYPE (captures[1]),
1996 3949104 : wide_int_to_tree (TREE_TYPE (cst),
1997 3949104 : wi::to_wide (cst) - 1));
1998 3949104 : tree _r;
1999 3949104 : _r = fold_build2_loc (loc, acmp, type, res_op0, res_op1);
2000 3949104 : if (TREE_SIDE_EFFECTS (captures[1]))
2001 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
2002 3949104 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 563, __FILE__, __LINE__, true);
2003 3949104 : return _r;
2004 : }
2005 0 : next_after_fail676:;
2006 : }
2007 : }
2008 : return NULL_TREE;
2009 : }
2010 :
2011 : tree
2012 0 : generic_simplify_402 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
2013 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
2014 : const enum tree_code ARG_UNUSED (cmp),
2015 : const enum tree_code ARG_UNUSED (out))
2016 : {
2017 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2018 0 : if (TYPE_UNSIGNED (TREE_TYPE (captures[1]))
2019 0 : && types_match (TREE_TYPE (captures[1]), TREE_TYPE (captures[2]))
2020 : )
2021 : {
2022 0 : if (TREE_SIDE_EFFECTS (_p0)) goto next_after_fail718;
2023 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail718;
2024 0 : {
2025 0 : tree res_op0;
2026 0 : {
2027 0 : tree _o1[1], _r1;
2028 0 : _o1[0] = captures[0];
2029 0 : _r1 = fold_build1_loc (loc, IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (_o1[0])), _o1[0]);
2030 0 : res_op0 = _r1;
2031 : }
2032 0 : tree res_op1;
2033 0 : res_op1 = build_zero_cst (TREE_TYPE (captures[1]));
2034 0 : tree _r;
2035 0 : _r = fold_build2_loc (loc, out, type, res_op0, res_op1);
2036 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 588, __FILE__, __LINE__, true);
2037 0 : return _r;
2038 : }
2039 : next_after_fail718:;
2040 : }
2041 : return NULL_TREE;
2042 : }
2043 :
2044 : tree
2045 755562 : generic_simplify_408 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
2046 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
2047 : const enum tree_code ARG_UNUSED (cmp),
2048 : const enum tree_code ARG_UNUSED (icmp))
2049 : {
2050 755562 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2051 1508222 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
2052 755562 : && TYPE_UNSIGNED (TREE_TYPE (captures[0]))
2053 335632 : && TYPE_PRECISION (TREE_TYPE (captures[0])) > 1
2054 1846756 : && (wi::to_wide (captures[2])
2055 1762458 : == wi::max_value (TYPE_PRECISION (TREE_TYPE (captures[0])), SIGNED) - 1)
2056 : )
2057 : {
2058 4544 : {
2059 4544 : tree stype = signed_type_for (TREE_TYPE (captures[0]));
2060 4544 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail731;
2061 4544 : {
2062 4544 : tree res_op0;
2063 4544 : {
2064 4544 : tree _o1[1], _r1;
2065 4544 : _o1[0] = captures[0];
2066 4544 : if (TREE_TYPE (_o1[0]) != stype)
2067 : {
2068 4544 : _r1 = fold_build1_loc (loc, NOP_EXPR, stype, _o1[0]);
2069 : }
2070 : else
2071 : _r1 = _o1[0];
2072 4544 : res_op0 = _r1;
2073 : }
2074 4544 : tree res_op1;
2075 4544 : res_op1 = build_int_cst (stype, 0);
2076 4544 : tree _r;
2077 4544 : _r = fold_build2_loc (loc, icmp, type, res_op0, res_op1);
2078 4544 : if (TREE_SIDE_EFFECTS (captures[1]))
2079 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
2080 4544 : if (TREE_SIDE_EFFECTS (captures[2]))
2081 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[2]), _r);
2082 4544 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 601, __FILE__, __LINE__, true);
2083 4544 : return _r;
2084 : }
2085 0 : next_after_fail731:;
2086 : }
2087 : }
2088 : return NULL_TREE;
2089 : }
2090 :
2091 : tree
2092 0 : generic_simplify_414 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
2093 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
2094 : const enum tree_code ARG_UNUSED (cmp),
2095 : const enum tree_code ARG_UNUSED (out))
2096 : {
2097 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2098 0 : if (TYPE_UNSIGNED (TREE_TYPE (captures[2])) && !VECTOR_TYPE_P (TREE_TYPE (captures[2]))
2099 : )
2100 : {
2101 0 : {
2102 0 : tree t = TREE_TYPE (captures[2]), cpx = build_complex_type (t);
2103 0 : if (TREE_SIDE_EFFECTS (_p1)) goto next_after_fail737;
2104 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail737;
2105 0 : {
2106 0 : tree res_op0;
2107 0 : {
2108 0 : tree _o1[1], _r1;
2109 0 : {
2110 0 : tree _o2[2], _r2;
2111 0 : _o2[0] = captures[2];
2112 0 : _o2[1] = captures[1];
2113 0 : _r2 = maybe_build_call_expr_loc (loc, CFN_MUL_OVERFLOW, cpx, 2, _o2[0], _o2[1]);
2114 0 : if (!_r2)
2115 0 : goto next_after_fail737;
2116 0 : _o1[0] = _r2;
2117 : }
2118 0 : _r1 = fold_build1_loc (loc, IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (_o1[0])), _o1[0]);
2119 0 : res_op0 = _r1;
2120 : }
2121 0 : tree res_op1;
2122 0 : res_op1 = build_zero_cst (t);
2123 0 : tree _r;
2124 0 : _r = fold_build2_loc (loc, out, type, res_op0, res_op1);
2125 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 589, __FILE__, __LINE__, true);
2126 0 : return _r;
2127 : }
2128 : next_after_fail737:;
2129 : }
2130 : }
2131 : return NULL_TREE;
2132 : }
2133 :
2134 : tree
2135 387 : generic_simplify_420 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
2136 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
2137 : const enum tree_code ARG_UNUSED (shift),
2138 : const enum tree_code ARG_UNUSED (mod))
2139 : {
2140 387 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2141 387 : if (integer_pow2p (captures[3]) && tree_int_cst_sgn (captures[3]) > 0
2142 : )
2143 : {
2144 312 : if (TREE_SIDE_EFFECTS (_p1)) goto next_after_fail747;
2145 312 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail747;
2146 312 : {
2147 312 : tree res_op0;
2148 312 : res_op0 = captures[0];
2149 312 : tree res_op1;
2150 312 : {
2151 312 : tree _o1[2], _r1;
2152 312 : _o1[0] = captures[1];
2153 312 : {
2154 312 : tree _o2[2], _r2;
2155 312 : _o2[0] = captures[2];
2156 312 : _o2[1] = build_int_cst (TREE_TYPE (captures[2]),
2157 : 1);
2158 312 : _r2 = fold_build2_loc (loc, MINUS_EXPR, TREE_TYPE (_o2[0]), _o2[0], _o2[1]);
2159 312 : _o1[1] = _r2;
2160 : }
2161 312 : _r1 = fold_build2_loc (loc, BIT_AND_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
2162 312 : res_op1 = _r1;
2163 : }
2164 312 : tree _r;
2165 312 : _r = fold_build2_loc (loc, shift, type, res_op0, res_op1);
2166 312 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 613, __FILE__, __LINE__, true);
2167 312 : return _r;
2168 : }
2169 : next_after_fail747:;
2170 : }
2171 : return NULL_TREE;
2172 : }
2173 :
2174 : tree
2175 271 : generic_simplify_431 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
2176 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
2177 : const combined_fn ARG_UNUSED (bswap))
2178 : {
2179 271 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2180 271 : if (BITS_PER_UNIT == 8
2181 : && CHAR_TYPE_SIZE == 8
2182 271 : && tree_fits_uhwi_p (captures[2])
2183 : )
2184 : {
2185 271 : {
2186 271 : unsigned HOST_WIDE_INT prec = TYPE_PRECISION (TREE_TYPE (captures[0]));
2187 271 : unsigned HOST_WIDE_INT bits = tree_to_uhwi (captures[2]);
2188 271 : tree st = TYPE_PRECISION (type) > prec ? TREE_TYPE (captures[0]) : type;
2189 271 : if (TYPE_PRECISION (type) > prec
2190 0 : && !TYPE_UNSIGNED (TREE_TYPE (captures[0]))
2191 0 : && TYPE_UNSIGNED (type)
2192 271 : && bits < prec && bits + 8 >= prec
2193 : )
2194 : {
2195 0 : {
2196 0 : tree nst = build_int_cst (integer_type_node, prec - 8);
2197 0 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail762;
2198 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail762;
2199 0 : {
2200 0 : tree res_op0;
2201 0 : {
2202 0 : tree _o1[1], _r1;
2203 0 : {
2204 0 : tree _o2[2], _r2;
2205 0 : {
2206 0 : tree _o3[1], _r3;
2207 0 : _o3[0] = captures[1];
2208 0 : if (TREE_TYPE (_o3[0]) != st)
2209 : {
2210 0 : _r3 = fold_build1_loc (loc, NOP_EXPR, st, _o3[0]);
2211 : }
2212 : else
2213 : _r3 = _o3[0];
2214 0 : _o2[0] = _r3;
2215 : }
2216 0 : _o2[1] = nst;
2217 0 : _r2 = fold_build2_loc (loc, LSHIFT_EXPR, st, _o2[0], _o2[1]);
2218 0 : _o1[0] = _r2;
2219 : }
2220 0 : if (TREE_TYPE (_o1[0]) != type)
2221 : {
2222 0 : _r1 = fold_build1_loc (loc, NOP_EXPR, type, _o1[0]);
2223 : }
2224 : else
2225 : _r1 = _o1[0];
2226 0 : res_op0 = _r1;
2227 : }
2228 0 : tree res_op1;
2229 0 : res_op1 = captures[2];
2230 0 : tree _r;
2231 0 : _r = fold_build2_loc (loc, RSHIFT_EXPR, type, res_op0, res_op1);
2232 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 626, __FILE__, __LINE__, true);
2233 0 : return _r;
2234 : }
2235 : next_after_fail762:;
2236 : }
2237 : }
2238 : else
2239 : {
2240 271 : if (bits + 8 == prec
2241 : )
2242 : {
2243 46 : if (TYPE_UNSIGNED (st)
2244 : )
2245 : {
2246 36 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail763;
2247 36 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail763;
2248 36 : {
2249 36 : tree res_op0;
2250 36 : {
2251 36 : tree _o1[1], _r1;
2252 36 : _o1[0] = captures[1];
2253 36 : if (TREE_TYPE (_o1[0]) != unsigned_char_type_node)
2254 : {
2255 36 : _r1 = fold_build1_loc (loc, NOP_EXPR, unsigned_char_type_node, _o1[0]);
2256 : }
2257 : else
2258 : _r1 = _o1[0];
2259 36 : res_op0 = _r1;
2260 : }
2261 36 : tree _r;
2262 36 : _r = fold_build1_loc (loc, NOP_EXPR, type, res_op0);
2263 36 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 627, __FILE__, __LINE__, true);
2264 36 : return _r;
2265 : }
2266 : next_after_fail763:;
2267 : }
2268 : else
2269 : {
2270 10 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail764;
2271 10 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail764;
2272 10 : {
2273 10 : tree res_op0;
2274 10 : {
2275 10 : tree _o1[1], _r1;
2276 10 : _o1[0] = captures[1];
2277 10 : if (TREE_TYPE (_o1[0]) != signed_char_type_node)
2278 : {
2279 10 : _r1 = fold_build1_loc (loc, NOP_EXPR, signed_char_type_node, _o1[0]);
2280 : }
2281 : else
2282 : _r1 = _o1[0];
2283 10 : res_op0 = _r1;
2284 : }
2285 10 : tree _r;
2286 10 : _r = fold_build1_loc (loc, NOP_EXPR, type, res_op0);
2287 10 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 628, __FILE__, __LINE__, true);
2288 10 : return _r;
2289 : }
2290 : next_after_fail764:;
2291 : }
2292 : }
2293 : else
2294 : {
2295 225 : if (bits < prec && bits + 8 > prec
2296 : )
2297 : {
2298 57 : {
2299 57 : tree nst = build_int_cst (integer_type_node, bits & 7);
2300 57 : tree bt = TYPE_UNSIGNED (st) ? unsigned_char_type_node
2301 57 : : signed_char_type_node;
2302 57 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail765;
2303 57 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail765;
2304 57 : {
2305 57 : tree res_op0;
2306 57 : {
2307 57 : tree _o1[2], _r1;
2308 57 : {
2309 57 : tree _o2[1], _r2;
2310 57 : _o2[0] = captures[1];
2311 57 : if (TREE_TYPE (_o2[0]) != bt)
2312 : {
2313 57 : _r2 = fold_build1_loc (loc, NOP_EXPR, bt, _o2[0]);
2314 : }
2315 : else
2316 : _r2 = _o2[0];
2317 57 : _o1[0] = _r2;
2318 : }
2319 57 : _o1[1] = nst;
2320 57 : _r1 = fold_build2_loc (loc, RSHIFT_EXPR, bt, _o1[0], _o1[1]);
2321 57 : res_op0 = _r1;
2322 : }
2323 57 : tree _r;
2324 57 : _r = fold_build1_loc (loc, NOP_EXPR, type, res_op0);
2325 57 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 629, __FILE__, __LINE__, true);
2326 57 : return _r;
2327 : }
2328 : next_after_fail765:;
2329 : }
2330 : }
2331 : }
2332 : }
2333 : }
2334 : }
2335 : return NULL_TREE;
2336 : }
2337 :
2338 : tree
2339 0 : generic_simplify_446 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
2340 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
2341 : const combined_fn ARG_UNUSED (pow))
2342 : {
2343 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2344 0 : if (flag_unsafe_math_optimizations
2345 : )
2346 : {
2347 0 : if (! HONOR_INFINITIES (type)
2348 0 : && ! flag_trapping_math
2349 0 : && ! flag_errno_math
2350 : )
2351 : {
2352 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail794;
2353 0 : {
2354 0 : tree res_op0;
2355 0 : res_op0 = captures[2];
2356 0 : tree res_op1;
2357 0 : {
2358 0 : tree _o1[1], _r1;
2359 0 : _o1[0] = captures[3];
2360 0 : _r1 = fold_build1_loc (loc, NEGATE_EXPR, TREE_TYPE (_o1[0]), _o1[0]);
2361 0 : res_op1 = _r1;
2362 : }
2363 0 : tree _r;
2364 0 : _r = maybe_build_call_expr_loc (loc, pow, type, 2, res_op0, res_op1);
2365 0 : if (!_r)
2366 0 : goto next_after_fail794;
2367 0 : if (TREE_SIDE_EFFECTS (captures[1]))
2368 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
2369 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 646, __FILE__, __LINE__, true);
2370 0 : return _r;
2371 : }
2372 : next_after_fail794:;
2373 : }
2374 : }
2375 : return NULL_TREE;
2376 : }
2377 :
2378 : tree
2379 0 : generic_simplify_449 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
2380 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures))
2381 : {
2382 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2383 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail797;
2384 0 : {
2385 0 : tree _r;
2386 0 : _r = captures[0];
2387 0 : if (TREE_SIDE_EFFECTS (captures[1]))
2388 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
2389 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 649, __FILE__, __LINE__, true);
2390 : return _r;
2391 : }
2392 0 : next_after_fail797:;
2393 0 : return NULL_TREE;
2394 : }
2395 :
2396 : tree
2397 0 : generic_simplify_453 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
2398 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
2399 : const combined_fn ARG_UNUSED (HYPOT))
2400 : {
2401 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2402 0 : if (flag_unsafe_math_optimizations && canonicalize_math_p ()
2403 : )
2404 : {
2405 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail801;
2406 0 : {
2407 0 : tree res_op0;
2408 0 : {
2409 0 : tree _o1[1], _r1;
2410 0 : _o1[0] = captures[0];
2411 0 : _r1 = fold_build1_loc (loc, ABS_EXPR, TREE_TYPE (_o1[0]), _o1[0]);
2412 0 : res_op0 = _r1;
2413 : }
2414 0 : tree res_op1;
2415 0 : res_op1 = build_real_truncate (type, dconst_sqrt2 ());
2416 0 : tree _r;
2417 0 : _r = fold_build2_loc (loc, MULT_EXPR, type, res_op0, res_op1);
2418 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 653, __FILE__, __LINE__, true);
2419 0 : return _r;
2420 : }
2421 0 : next_after_fail801:;
2422 : }
2423 : return NULL_TREE;
2424 : }
2425 :
2426 : tree
2427 129633 : generic_simplify_459 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
2428 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures))
2429 : {
2430 129633 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2431 129633 : {
2432 129633 : bool wascmp;
2433 129633 : if (bitwise_inverted_equal_p (captures[0], captures[1], wascmp)
2434 129633 : && (!wascmp || element_precision (type) == 1)
2435 : )
2436 : {
2437 1 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail807;
2438 1 : {
2439 1 : tree res_op0;
2440 1 : res_op0 = captures[0];
2441 1 : tree res_op1;
2442 1 : res_op1 = captures[2];
2443 1 : tree _r;
2444 1 : _r = fold_build2_loc (loc, BIT_AND_EXPR, type, res_op0, res_op1);
2445 1 : if (TREE_SIDE_EFFECTS (captures[1]))
2446 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
2447 1 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 659, __FILE__, __LINE__, true);
2448 1 : return _r;
2449 : }
2450 0 : next_after_fail807:;
2451 : }
2452 : }
2453 129632 : return NULL_TREE;
2454 : }
2455 :
2456 : tree
2457 65 : generic_simplify_466 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
2458 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures))
2459 : {
2460 65 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2461 65 : if (INTEGRAL_TYPE_P (type)
2462 65 : && INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
2463 65 : && TREE_CODE (TREE_TYPE (captures[0])) != BOOLEAN_TYPE
2464 130 : && (!TYPE_UNSIGNED (TREE_TYPE (captures[0]))
2465 19 : || TYPE_PRECISION (type) <= TYPE_PRECISION (TREE_TYPE (captures[0])))
2466 : )
2467 : {
2468 65 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail814;
2469 65 : {
2470 65 : tree res_op0;
2471 65 : {
2472 65 : tree _o1[1], _r1;
2473 65 : _o1[0] = captures[0];
2474 65 : if (TREE_TYPE (_o1[0]) != type)
2475 : {
2476 20 : _r1 = fold_build1_loc (loc, NOP_EXPR, type, _o1[0]);
2477 : }
2478 : else
2479 : _r1 = _o1[0];
2480 65 : res_op0 = _r1;
2481 : }
2482 65 : tree res_op1;
2483 65 : res_op1 = captures[1];
2484 65 : tree _r;
2485 65 : _r = fold_build2_loc (loc, MULT_EXPR, type, res_op0, res_op1);
2486 65 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 665, __FILE__, __LINE__, true);
2487 65 : return _r;
2488 : }
2489 0 : next_after_fail814:;
2490 : }
2491 : return NULL_TREE;
2492 : }
2493 :
2494 : tree
2495 0 : generic_simplify_473 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
2496 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
2497 : const enum tree_code ARG_UNUSED (cmp))
2498 : {
2499 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2500 0 : if (fold_before_rtl_expansion_p ()
2501 : )
2502 : {
2503 0 : if (INTEGRAL_TYPE_P (type)
2504 0 : && INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
2505 : )
2506 : {
2507 0 : if (TREE_SIDE_EFFECTS (_p1)) goto next_after_fail821;
2508 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail821;
2509 0 : {
2510 0 : tree res_op0;
2511 0 : res_op0 = captures[0];
2512 0 : tree res_op1;
2513 0 : res_op1 = captures[3];
2514 0 : tree res_op2;
2515 0 : res_op2 = build_zero_cst (type);
2516 0 : tree _r;
2517 0 : _r = fold_build3_loc (loc, COND_EXPR, type, res_op0, res_op1, res_op2);
2518 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 671, __FILE__, __LINE__, true);
2519 0 : return _r;
2520 : }
2521 : next_after_fail821:;
2522 : }
2523 : }
2524 : return NULL_TREE;
2525 : }
2526 :
2527 : tree
2528 0 : generic_simplify_483 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
2529 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures))
2530 : {
2531 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2532 0 : if (TREE_SIDE_EFFECTS (_p0)) goto next_after_fail853;
2533 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail853;
2534 0 : {
2535 0 : tree _r;
2536 0 : _r = captures[2];
2537 0 : if (TREE_SIDE_EFFECTS (captures[1]))
2538 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
2539 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 692, __FILE__, __LINE__, true);
2540 : return _r;
2541 : }
2542 : next_after_fail853:;
2543 : return NULL_TREE;
2544 : }
2545 :
2546 : tree
2547 4 : generic_simplify_488 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
2548 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures))
2549 : {
2550 4 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2551 4 : if (TREE_SIDE_EFFECTS (_p1)) goto next_after_fail870;
2552 4 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail870;
2553 4 : {
2554 4 : tree _r;
2555 4 : _r = captures[2];
2556 4 : if (TREE_SIDE_EFFECTS (captures[1]))
2557 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
2558 4 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 692, __FILE__, __LINE__, true);
2559 : return _r;
2560 : }
2561 : next_after_fail870:;
2562 : return NULL_TREE;
2563 : }
2564 :
2565 : tree
2566 66734 : generic_simplify_492 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
2567 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
2568 : const enum tree_code ARG_UNUSED (shift))
2569 : {
2570 66734 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2571 66734 : if (tree_nop_conversion_p (TREE_TYPE (captures[0]), TREE_TYPE (captures[1]))
2572 66734 : && TYPE_PRECISION (type) <= HOST_BITS_PER_WIDE_INT
2573 66618 : && tree_fits_uhwi_p (captures[4])
2574 66569 : && tree_to_uhwi (captures[4]) > 0
2575 133302 : && tree_to_uhwi (captures[4]) < TYPE_PRECISION (type)
2576 : )
2577 : {
2578 66568 : {
2579 66568 : unsigned int shiftc = tree_to_uhwi (captures[4]);
2580 66568 : unsigned HOST_WIDE_INT mask = TREE_INT_CST_LOW (captures[5]);
2581 66568 : unsigned HOST_WIDE_INT newmask, zerobits = 0;
2582 66568 : tree shift_type = TREE_TYPE (captures[2]);
2583 66568 : unsigned int prec;
2584 66568 : if (shift == LSHIFT_EXPR)
2585 28652 : zerobits = ((HOST_WIDE_INT_1U << shiftc) - 1);
2586 37916 : else if (shift == RSHIFT_EXPR
2587 37916 : && type_has_mode_precision_p (shift_type))
2588 : {
2589 37916 : prec = TYPE_PRECISION (TREE_TYPE (captures[2]));
2590 37916 : tree arg00 = captures[3];
2591 37916 : if (captures[2] != captures[3]
2592 37916 : && TYPE_UNSIGNED (TREE_TYPE (captures[3])))
2593 : {
2594 0 : tree inner_type = TREE_TYPE (captures[3]);
2595 0 : if (type_has_mode_precision_p (inner_type)
2596 0 : && TYPE_PRECISION (inner_type) < prec)
2597 : {
2598 0 : prec = TYPE_PRECISION (inner_type);
2599 0 : if (shiftc < prec)
2600 0 : shift_type = inner_type;
2601 : }
2602 : }
2603 37916 : zerobits = HOST_WIDE_INT_M1U;
2604 37916 : if (shiftc < prec)
2605 : {
2606 37916 : zerobits >>= HOST_BITS_PER_WIDE_INT - shiftc;
2607 37916 : zerobits <<= prec - shiftc;
2608 : }
2609 37916 : if (!TYPE_UNSIGNED (TREE_TYPE (captures[2]))
2610 37916 : && prec == TYPE_PRECISION (TREE_TYPE (captures[2])))
2611 : {
2612 2896 : if ((mask & zerobits) == 0)
2613 2885 : shift_type = unsigned_type_for (TREE_TYPE (captures[2]));
2614 : else
2615 : zerobits = 0;
2616 : }
2617 : }
2618 66557 : if ((mask & zerobits) == mask
2619 : )
2620 : {
2621 3 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail876;
2622 3 : if (TREE_SIDE_EFFECTS (captures[4])) goto next_after_fail876;
2623 3 : if (TREE_SIDE_EFFECTS (captures[5])) goto next_after_fail876;
2624 3 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail876;
2625 3 : {
2626 3 : tree _r;
2627 3 : _r = build_int_cst (type, 0);
2628 3 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 695, __FILE__, __LINE__, true);
2629 3 : return _r;
2630 : }
2631 : next_after_fail876:;
2632 : }
2633 : else
2634 : {
2635 66565 : {
2636 66565 : newmask = mask | zerobits;
2637 66565 : if (newmask != mask && (newmask & (newmask + 1)) == 0
2638 : )
2639 : {
2640 : {
2641 18798 : for (prec = BITS_PER_UNIT;
2642 34708 : prec < HOST_BITS_PER_WIDE_INT; prec <<= 1)
2643 32466 : if (newmask == (HOST_WIDE_INT_1U << prec) - 1)
2644 : break;
2645 15910 : if (prec < HOST_BITS_PER_WIDE_INT
2646 2242 : || newmask == HOST_WIDE_INT_M1U
2647 : )
2648 : {
2649 13848 : {
2650 13848 : tree newmaskt = build_int_cst_type (TREE_TYPE (captures[5]), newmask);
2651 13848 : if (!tree_int_cst_equal (newmaskt, captures[5])
2652 : )
2653 : {
2654 13848 : if (shift_type != TREE_TYPE (captures[2])
2655 : )
2656 : {
2657 85 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail877;
2658 85 : if (TREE_SIDE_EFFECTS (captures[4])) goto next_after_fail877;
2659 85 : if (TREE_SIDE_EFFECTS (captures[5])) goto next_after_fail877;
2660 85 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail877;
2661 85 : {
2662 85 : tree res_op0;
2663 85 : {
2664 85 : tree _o1[1], _r1;
2665 85 : {
2666 85 : tree _o2[2], _r2;
2667 85 : {
2668 85 : tree _o3[1], _r3;
2669 85 : _o3[0] = captures[2];
2670 85 : if (TREE_TYPE (_o3[0]) != shift_type)
2671 : {
2672 85 : _r3 = fold_build1_loc (loc, NOP_EXPR, shift_type, _o3[0]);
2673 : }
2674 : else
2675 : _r3 = _o3[0];
2676 85 : _o2[0] = _r3;
2677 : }
2678 85 : _o2[1] = captures[4];
2679 85 : _r2 = fold_build2_loc (loc, shift, shift_type, _o2[0], _o2[1]);
2680 85 : _o1[0] = _r2;
2681 : }
2682 85 : if (TREE_TYPE (_o1[0]) != type)
2683 : {
2684 85 : _r1 = fold_build1_loc (loc, NOP_EXPR, type, _o1[0]);
2685 : }
2686 : else
2687 : _r1 = _o1[0];
2688 85 : res_op0 = _r1;
2689 : }
2690 85 : tree res_op1;
2691 85 : res_op1 = newmaskt;
2692 85 : tree _r;
2693 85 : _r = fold_build2_loc (loc, BIT_AND_EXPR, type, res_op0, res_op1);
2694 85 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 696, __FILE__, __LINE__, true);
2695 85 : return _r;
2696 : }
2697 : next_after_fail877:;
2698 : }
2699 : else
2700 : {
2701 13763 : if (TREE_SIDE_EFFECTS (_p0)) goto next_after_fail878;
2702 12635 : if (TREE_SIDE_EFFECTS (captures[5])) goto next_after_fail878;
2703 12635 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail878;
2704 12635 : {
2705 12635 : tree res_op0;
2706 12635 : res_op0 = captures[0];
2707 12635 : tree res_op1;
2708 12635 : res_op1 = newmaskt;
2709 12635 : tree _r;
2710 12635 : _r = fold_build2_loc (loc, BIT_AND_EXPR, type, res_op0, res_op1);
2711 12635 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 697, __FILE__, __LINE__, true);
2712 12635 : return _r;
2713 : }
2714 : next_after_fail878:;
2715 : }
2716 : }
2717 : }
2718 : }
2719 : }
2720 : }
2721 : }
2722 : }
2723 : }
2724 : }
2725 : return NULL_TREE;
2726 : }
2727 :
2728 : tree
2729 42 : generic_simplify_502 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
2730 : tree ARG_UNUSED (_p0), tree *ARG_UNUSED (captures))
2731 : {
2732 42 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2733 42 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail894;
2734 42 : {
2735 42 : tree res_op0;
2736 42 : res_op0 = captures[1];
2737 42 : tree res_op1;
2738 42 : {
2739 42 : tree _o1[1], _r1;
2740 42 : _o1[0] = captures[2];
2741 42 : _r1 = fold_build1_loc (loc, BIT_NOT_EXPR, TREE_TYPE (_o1[0]), _o1[0]);
2742 42 : res_op1 = _r1;
2743 : }
2744 42 : tree _r;
2745 42 : _r = fold_build2_loc (loc, BIT_IOR_EXPR, type, res_op0, res_op1);
2746 42 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 706, __FILE__, __LINE__, true);
2747 : return _r;
2748 : }
2749 0 : next_after_fail894:;
2750 0 : return NULL_TREE;
2751 : }
2752 :
2753 : tree
2754 31 : generic_simplify_507 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
2755 : tree ARG_UNUSED (_p0), tree *ARG_UNUSED (captures))
2756 : {
2757 31 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2758 31 : if (!TYPE_UNSIGNED (TREE_TYPE (captures[2]))
2759 54 : && (element_precision (TREE_TYPE (captures[2]))
2760 23 : <= element_precision (TREE_TYPE (captures[3]))
2761 1 : || !TYPE_UNSIGNED (TREE_TYPE (captures[3])))
2762 : )
2763 : {
2764 22 : {
2765 22 : tree shift_type = TREE_TYPE (captures[2]);
2766 22 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail899;
2767 22 : {
2768 22 : tree res_op0;
2769 22 : {
2770 22 : tree _o1[2], _r1;
2771 22 : {
2772 22 : tree _o2[1], _r2;
2773 22 : _o2[0] = captures[3];
2774 22 : if (TREE_TYPE (_o2[0]) != shift_type)
2775 : {
2776 1 : _r2 = fold_build1_loc (loc, NOP_EXPR, shift_type, _o2[0]);
2777 : }
2778 : else
2779 : _r2 = _o2[0];
2780 22 : _o1[0] = _r2;
2781 : }
2782 22 : _o1[1] = captures[4];
2783 22 : _r1 = fold_build2_loc (loc, RSHIFT_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
2784 22 : res_op0 = _r1;
2785 : }
2786 22 : tree _r;
2787 22 : _r = fold_build1_loc (loc, NOP_EXPR, type, res_op0);
2788 22 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 711, __FILE__, __LINE__, true);
2789 22 : return _r;
2790 : }
2791 0 : next_after_fail899:;
2792 : }
2793 : }
2794 : return NULL_TREE;
2795 : }
2796 :
2797 : tree
2798 3786 : generic_simplify_519 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
2799 : tree ARG_UNUSED (_p0), tree *ARG_UNUSED (captures))
2800 : {
2801 3786 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2802 3786 : if (!TYPE_SATURATING (type)
2803 : )
2804 : {
2805 3751 : if (!TYPE_OVERFLOW_SANITIZED (type)
2806 7524 : && !TYPE_OVERFLOW_SANITIZED (TREE_TYPE (captures[0]))
2807 : )
2808 : {
2809 3773 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail912;
2810 3773 : {
2811 3773 : tree res_op0;
2812 3773 : {
2813 3773 : tree _o1[1], _r1;
2814 3773 : _o1[0] = captures[0];
2815 3773 : if (TREE_TYPE (_o1[0]) != type)
2816 : {
2817 31 : _r1 = fold_build1_loc (loc, VIEW_CONVERT_EXPR, type, _o1[0]);
2818 : }
2819 : else
2820 : _r1 = _o1[0];
2821 3773 : res_op0 = _r1;
2822 : }
2823 3773 : tree _r;
2824 3773 : _r = non_lvalue_loc (loc, res_op0);
2825 3773 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 722, __FILE__, __LINE__, true);
2826 3773 : return _r;
2827 : }
2828 0 : next_after_fail912:;
2829 : }
2830 : }
2831 : return NULL_TREE;
2832 : }
2833 :
2834 : tree
2835 0 : generic_simplify_526 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
2836 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
2837 : const enum tree_code ARG_UNUSED (minmax))
2838 : {
2839 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2840 0 : if (TREE_SIDE_EFFECTS (_p1)) goto next_after_fail920;
2841 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail920;
2842 0 : {
2843 0 : tree _r;
2844 0 : _r = captures[0];
2845 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 729, __FILE__, __LINE__, true);
2846 : return _r;
2847 : }
2848 : next_after_fail920:;
2849 : return NULL_TREE;
2850 : }
2851 :
2852 : tree
2853 0 : generic_simplify_534 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
2854 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
2855 : const enum tree_code ARG_UNUSED (minmax),
2856 : const enum tree_code ARG_UNUSED (cmp))
2857 : {
2858 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2859 0 : {
2860 0 : poly_int64 off0, off1;
2861 0 : tree base0, base1;
2862 0 : int equal = address_compare (cmp, TREE_TYPE (captures[0]), captures[1], captures[3], base0, base1,
2863 : off0, off1,
2864 : 1
2865 : );
2866 0 : if (equal == 1
2867 : )
2868 : {
2869 0 : if (minmax == MIN_EXPR
2870 : )
2871 : {
2872 0 : if (known_le (off0, off1)
2873 : )
2874 : {
2875 0 : if (TREE_SIDE_EFFECTS (_p0)) goto next_after_fail933;
2876 0 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail933;
2877 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail933;
2878 0 : {
2879 0 : tree _r;
2880 0 : _r = captures[0];
2881 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 738, __FILE__, __LINE__, true);
2882 0 : return _r;
2883 : }
2884 0 : next_after_fail933:;
2885 : }
2886 : else
2887 : {
2888 0 : if (known_gt (off0, off1)
2889 : )
2890 : {
2891 0 : if (TREE_SIDE_EFFECTS (captures[1])) goto next_after_fail934;
2892 0 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail934;
2893 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail934;
2894 0 : {
2895 0 : tree _r;
2896 0 : _r = captures[2];
2897 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 739, __FILE__, __LINE__, true);
2898 0 : return _r;
2899 : }
2900 0 : next_after_fail934:;
2901 : }
2902 : }
2903 : }
2904 : else
2905 : {
2906 0 : if (known_ge (off0, off1)
2907 : )
2908 : {
2909 0 : if (TREE_SIDE_EFFECTS (_p0)) goto next_after_fail935;
2910 0 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail935;
2911 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail935;
2912 0 : {
2913 0 : tree _r;
2914 0 : _r = captures[0];
2915 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 740, __FILE__, __LINE__, true);
2916 0 : return _r;
2917 : }
2918 0 : next_after_fail935:;
2919 : }
2920 : else
2921 : {
2922 0 : if (known_lt (off0, off1)
2923 : )
2924 : {
2925 0 : if (TREE_SIDE_EFFECTS (captures[1])) goto next_after_fail936;
2926 0 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail936;
2927 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail936;
2928 0 : {
2929 0 : tree _r;
2930 0 : _r = captures[2];
2931 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 741, __FILE__, __LINE__, true);
2932 0 : return _r;
2933 : }
2934 0 : next_after_fail936:;
2935 : }
2936 : }
2937 : }
2938 : }
2939 : }
2940 0 : return NULL_TREE;
2941 : }
2942 :
2943 : tree
2944 0 : generic_simplify_555 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
2945 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree ARG_UNUSED (_p2), tree *ARG_UNUSED (captures),
2946 : const combined_fn ARG_UNUSED (cond_len_op))
2947 : {
2948 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2949 0 : {
2950 0 : tree op_type = TREE_TYPE (captures[5]);
2951 0 : if (inverse_conditions_p (captures[0], captures[2])
2952 0 : && element_precision (type) == element_precision (op_type)
2953 : )
2954 : {
2955 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail963;
2956 0 : {
2957 0 : tree res_op0;
2958 0 : {
2959 0 : tree _o1[6], _r1;
2960 0 : _o1[0] = captures[2];
2961 0 : _o1[1] = captures[3];
2962 0 : _o1[2] = captures[4];
2963 0 : {
2964 0 : tree _o2[1], _r2;
2965 0 : _o2[0] = captures[1];
2966 0 : if (TREE_TYPE (_o2[0]) != op_type)
2967 : {
2968 0 : _r2 = fold_build1_loc (loc, VIEW_CONVERT_EXPR, op_type, _o2[0]);
2969 : }
2970 : else
2971 : _r2 = _o2[0];
2972 0 : _o1[3] = _r2;
2973 : }
2974 0 : _o1[4] = captures[6];
2975 0 : _o1[5] = captures[7];
2976 0 : _r1 = maybe_build_call_expr_loc (loc, cond_len_op, TREE_TYPE (_o1[1]), 6, _o1[0], _o1[1], _o1[2], _o1[3], _o1[4], _o1[5]);
2977 0 : if (!_r1)
2978 0 : goto next_after_fail963;
2979 0 : res_op0 = _r1;
2980 : }
2981 0 : tree _r;
2982 0 : _r = fold_build1_loc (loc, VIEW_CONVERT_EXPR, type, res_op0);
2983 0 : if (TREE_SIDE_EFFECTS (captures[0]))
2984 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[0]), _r);
2985 0 : if (TREE_SIDE_EFFECTS (captures[5]))
2986 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[5]), _r);
2987 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 755, __FILE__, __LINE__, true);
2988 0 : return _r;
2989 : }
2990 : next_after_fail963:;
2991 : }
2992 : }
2993 : return NULL_TREE;
2994 : }
2995 :
2996 : tree
2997 0 : generic_simplify_568 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
2998 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree *ARG_UNUSED (captures),
2999 : const enum tree_code ARG_UNUSED (cmp))
3000 : {
3001 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3002 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail979;
3003 0 : {
3004 0 : tree res_op0;
3005 0 : res_op0 = unshare_expr (captures[0]);
3006 0 : tree res_op1;
3007 0 : res_op1 = captures[0];
3008 0 : tree _r;
3009 0 : _r = fold_build2_loc (loc, UNORDERED_EXPR, type, res_op0, res_op1);
3010 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 771, __FILE__, __LINE__, true);
3011 : return _r;
3012 : }
3013 0 : next_after_fail979:;
3014 0 : return NULL_TREE;
3015 : }
3016 :
3017 : tree
3018 0 : generic_simplify_574 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
3019 : tree ARG_UNUSED (_p0), tree *ARG_UNUSED (captures),
3020 : const combined_fn ARG_UNUSED (logs),
3021 : const combined_fn ARG_UNUSED (pows))
3022 : {
3023 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3024 0 : if (flag_unsafe_math_optimizations
3025 : )
3026 : {
3027 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail985;
3028 0 : {
3029 0 : tree res_op0;
3030 0 : res_op0 = captures[1];
3031 0 : tree res_op1;
3032 0 : {
3033 0 : tree _o1[1], _r1;
3034 0 : _o1[0] = captures[0];
3035 0 : _r1 = maybe_build_call_expr_loc (loc, logs, TREE_TYPE (_o1[0]), 1, _o1[0]);
3036 0 : if (!_r1)
3037 0 : goto next_after_fail985;
3038 0 : res_op1 = _r1;
3039 : }
3040 0 : tree _r;
3041 0 : _r = fold_build2_loc (loc, MULT_EXPR, type, res_op0, res_op1);
3042 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 777, __FILE__, __LINE__, true);
3043 0 : return _r;
3044 : }
3045 : next_after_fail985:;
3046 : }
3047 : return NULL_TREE;
3048 : }
3049 :
3050 : tree
3051 0 : generic_simplify_582 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
3052 : tree ARG_UNUSED (_p0), tree *ARG_UNUSED (captures),
3053 : const combined_fn ARG_UNUSED (floors),
3054 : const combined_fn ARG_UNUSED (truncs))
3055 : {
3056 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3057 0 : if (canonicalize_math_p ()
3058 : )
3059 : {
3060 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail993;
3061 0 : {
3062 0 : tree res_op0;
3063 0 : res_op0 = captures[0];
3064 0 : tree _r;
3065 0 : _r = maybe_build_call_expr_loc (loc, truncs, type, 1, res_op0);
3066 0 : if (!_r)
3067 0 : goto next_after_fail993;
3068 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 785, __FILE__, __LINE__, true);
3069 0 : return _r;
3070 : }
3071 : next_after_fail993:;
3072 : }
3073 : return NULL_TREE;
3074 : }
3075 :
3076 : tree
3077 0 : generic_simplify_589 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
3078 : tree ARG_UNUSED (_p0), tree *ARG_UNUSED (captures),
3079 : const combined_fn ARG_UNUSED (ifn),
3080 : const combined_fn ARG_UNUSED (lfn),
3081 : const combined_fn ARG_UNUSED (llfn))
3082 : {
3083 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3084 0 : if (canonicalize_math_p ()
3085 : )
3086 : {
3087 0 : if (TYPE_PRECISION (integer_type_node)
3088 0 : == TYPE_PRECISION (long_integer_type_node)
3089 : )
3090 : {
3091 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1000;
3092 0 : {
3093 0 : tree res_op0;
3094 0 : res_op0 = captures[0];
3095 0 : tree _r;
3096 0 : _r = maybe_build_call_expr_loc (loc, lfn, type, 1, res_op0);
3097 0 : if (!_r)
3098 0 : goto next_after_fail1000;
3099 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 792, __FILE__, __LINE__, true);
3100 0 : return _r;
3101 : }
3102 : next_after_fail1000:;
3103 : }
3104 : }
3105 : return NULL_TREE;
3106 : }
3107 :
3108 : tree
3109 0 : generic_simplify_600 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
3110 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree ARG_UNUSED (_p2), tree *ARG_UNUSED (captures))
3111 : {
3112 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3113 0 : if (canonicalize_math_after_vectorization_p ()
3114 : )
3115 : {
3116 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1011;
3117 : {
3118 : tree res_op0;
3119 : res_op0 = captures[0];
3120 : tree res_op1;
3121 : res_op1 = captures[1];
3122 : tree res_op2;
3123 : res_op2 = captures[2];
3124 : tree _r;
3125 : _r = maybe_build_call_expr_loc (loc, CFN_FMA, type, 3, res_op0, res_op1, res_op2);
3126 : if (!_r)
3127 : goto next_after_fail1011;
3128 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 803, __FILE__, __LINE__, true);
3129 : return _r;
3130 : }
3131 0 : next_after_fail1011:;
3132 : }
3133 0 : return NULL_TREE;
3134 : }
3135 :
3136 : tree
3137 0 : generic_simplify_609 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
3138 : tree ARG_UNUSED (_p0), tree ARG_UNUSED (_p1), tree ARG_UNUSED (_p2), tree ARG_UNUSED (_p3), tree ARG_UNUSED (_p4), tree *ARG_UNUSED (captures))
3139 : {
3140 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3141 0 : if (canonicalize_math_after_vectorization_p ()
3142 : )
3143 : {
3144 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1020;
3145 : {
3146 : tree res_op0;
3147 : res_op0 = captures[0];
3148 : tree res_op1;
3149 : res_op1 = captures[1];
3150 : tree res_op2;
3151 : res_op2 = captures[2];
3152 : tree res_op3;
3153 : res_op3 = captures[3];
3154 : tree res_op4;
3155 : res_op4 = captures[4];
3156 : tree _r;
3157 : _r = maybe_build_call_expr_loc (loc, CFN_COND_FMS, type, 5, res_op0, res_op1, res_op2, res_op3, res_op4);
3158 : if (!_r)
3159 : goto next_after_fail1020;
3160 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 812, __FILE__, __LINE__, true);
3161 : return _r;
3162 : }
3163 0 : next_after_fail1020:;
3164 : }
3165 0 : return NULL_TREE;
3166 : }
3167 :
3168 : tree
3169 0 : generic_simplify_618 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
3170 : tree ARG_UNUSED (_p0), tree *ARG_UNUSED (captures),
3171 : const combined_fn ARG_UNUSED (POPCOUNT))
3172 : {
3173 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3174 0 : {
3175 0 : tree type0 = TREE_TYPE (captures[1]);
3176 0 : tree type2 = TREE_TYPE (captures[0]);
3177 0 : if (INTEGRAL_TYPE_P (type0)
3178 0 : && TYPE_PRECISION (type2) <= TYPE_PRECISION (type0)
3179 : )
3180 : {
3181 0 : if (TREE_SIDE_EFFECTS (_p0)) goto next_after_fail1029;
3182 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1029;
3183 0 : {
3184 0 : tree res_op0;
3185 0 : {
3186 0 : tree _o1[2], _r1;
3187 0 : {
3188 0 : tree _o2[1], _r2;
3189 0 : _o2[0] = captures[2];
3190 0 : if (TREE_TYPE (_o2[0]) != type2)
3191 : {
3192 0 : _r2 = fold_build1_loc (loc, NOP_EXPR, type2, _o2[0]);
3193 : }
3194 : else
3195 : _r2 = _o2[0];
3196 0 : _o1[0] = _r2;
3197 : }
3198 0 : _o1[1] = build_zero_cst (type2);
3199 0 : _r1 = fold_build2_loc (loc, NE_EXPR, boolean_type_node, _o1[0], _o1[1]);
3200 0 : res_op0 = _r1;
3201 : }
3202 0 : tree _r;
3203 0 : _r = fold_build1_loc (loc, NOP_EXPR, type, res_op0);
3204 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 818, __FILE__, __LINE__, true);
3205 0 : return _r;
3206 : }
3207 : next_after_fail1029:;
3208 : }
3209 : }
3210 : return NULL_TREE;
3211 : }
3212 :
3213 : tree
3214 0 : generic_simplify_627 (location_t ARG_UNUSED (loc), const tree ARG_UNUSED (type),
3215 : tree ARG_UNUSED (_p0), tree *ARG_UNUSED (captures),
3216 : const combined_fn ARG_UNUSED (reduc))
3217 : {
3218 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3219 0 : {
3220 0 : int i = single_nonzero_element (captures[1]);
3221 0 : if (i >= 0
3222 : )
3223 : {
3224 0 : {
3225 0 : tree elt = vector_cst_elt (captures[1], i);
3226 0 : tree elt_type = TREE_TYPE (elt);
3227 0 : unsigned int elt_bits = tree_to_uhwi (TYPE_SIZE (elt_type));
3228 0 : tree size = bitsize_int (elt_bits);
3229 0 : tree pos = bitsize_int (elt_bits * i);
3230 0 : if (compare_tree_int (TYPE_SIZE (type), elt_bits) == 0
3231 : )
3232 : {
3233 0 : if (TREE_SIDE_EFFECTS (captures[1])) goto next_after_fail1039;
3234 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1039;
3235 0 : {
3236 0 : tree res_op0;
3237 0 : {
3238 0 : tree _o1[2], _r1;
3239 0 : {
3240 0 : tree _o2[3], _r2;
3241 0 : _o2[0] = captures[0];
3242 0 : _o2[1] = size;
3243 0 : _o2[2] = pos;
3244 0 : _r2 = fold_build3_loc (loc, BIT_FIELD_REF, elt_type, _o2[0], _o2[1], _o2[2]);
3245 0 : _o1[0] = _r2;
3246 : }
3247 0 : _o1[1] = elt;
3248 0 : _r1 = fold_build2_loc (loc, BIT_AND_EXPR, elt_type, _o1[0], _o1[1]);
3249 0 : res_op0 = _r1;
3250 : }
3251 0 : tree _r;
3252 0 : _r = fold_build1_loc (loc, VIEW_CONVERT_EXPR, type, res_op0);
3253 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 824, __FILE__, __LINE__, true);
3254 0 : return _r;
3255 : }
3256 : next_after_fail1039:;
3257 : }
3258 : }
3259 : }
3260 : }
3261 : return NULL_TREE;
3262 : }
3263 :
3264 : tree
3265 516002 : generic_simplify_FIX_TRUNC_EXPR (location_t ARG_UNUSED (loc), enum tree_code ARG_UNUSED (code), const tree ARG_UNUSED (type), tree _p0)
3266 : {
3267 516002 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3268 516002 : {
3269 516002 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
3270 1032004 : if ((
3271 :
3272 : && useless_type_conversion_p (type, TREE_TYPE (captures[0])))
3273 : || (
3274 : 1
3275 516002 : && type == TREE_TYPE (captures[0]))
3276 : )
3277 : {
3278 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1122;
3279 0 : {
3280 0 : tree _r;
3281 0 : _r = captures[0];
3282 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 839, __FILE__, __LINE__, true);
3283 0 : return _r;
3284 : }
3285 0 : next_after_fail1122:;
3286 : }
3287 : }
3288 516002 : switch (TREE_CODE (_p0))
3289 : {
3290 14982 : CASE_CONVERT:
3291 14982 : {
3292 14982 : tree _q20 = TREE_OPERAND (_p0, 0);
3293 14982 : {
3294 14982 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q20 };
3295 14982 : {
3296 14982 : tree inside_type = TREE_TYPE (captures[1]);
3297 14982 : tree inter_type = TREE_TYPE (captures[0]);
3298 14982 : int inside_int = INTEGRAL_TYPE_P (inside_type);
3299 14982 : int inside_ptr = POINTER_TYPE_P (inside_type);
3300 14982 : int inside_float = FLOAT_TYPE_P (inside_type);
3301 14982 : int inside_vec = VECTOR_TYPE_P (inside_type);
3302 14982 : unsigned int inside_prec = element_precision (inside_type);
3303 14982 : int inside_unsignedp = TYPE_UNSIGNED (inside_type);
3304 14982 : int inter_int = INTEGRAL_TYPE_P (inter_type);
3305 14982 : int inter_ptr = POINTER_TYPE_P (inter_type);
3306 14982 : int inter_float = FLOAT_TYPE_P (inter_type);
3307 14982 : int inter_vec = VECTOR_TYPE_P (inter_type);
3308 14982 : unsigned int inter_prec = element_precision (inter_type);
3309 14982 : int inter_unsignedp = TYPE_UNSIGNED (inter_type);
3310 14982 : int final_int = INTEGRAL_TYPE_P (type);
3311 14982 : int final_ptr = POINTER_TYPE_P (type);
3312 14982 : int final_float = FLOAT_TYPE_P (type);
3313 14982 : int final_vec = VECTOR_TYPE_P (type);
3314 14982 : unsigned int final_prec = element_precision (type);
3315 14982 : int final_unsignedp = TYPE_UNSIGNED (type);
3316 14982 : if (((
3317 :
3318 : && useless_type_conversion_p (type, inside_type))
3319 : || (
3320 : 1
3321 14982 : && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (inside_type)))
3322 0 : && (((inter_int || inter_ptr) && final_int)
3323 0 : || (inter_float && final_float))
3324 14982 : && inter_prec >= final_prec
3325 : )
3326 : {
3327 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1123;
3328 0 : {
3329 0 : tree res_op0;
3330 0 : res_op0 = captures[1];
3331 0 : tree _r;
3332 0 : _r = fold_build1_loc (loc, FIX_TRUNC_EXPR, type, res_op0);
3333 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 840, __FILE__, __LINE__, true);
3334 0 : return _r;
3335 : }
3336 0 : next_after_fail1123:;
3337 : }
3338 : else
3339 : {
3340 14982 : if (((inter_int && inside_int) || (inter_float && inside_float))
3341 14982 : && (final_int || final_float)
3342 14982 : && inter_prec >= inside_prec
3343 14764 : && (inter_float || inter_unsignedp == inside_unsignedp)
3344 : )
3345 : {
3346 14764 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1124;
3347 14764 : {
3348 14764 : tree res_op0;
3349 14764 : res_op0 = captures[1];
3350 14764 : tree _r;
3351 14764 : _r = fold_build1_loc (loc, FIX_TRUNC_EXPR, type, res_op0);
3352 14764 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 841, __FILE__, __LINE__, true);
3353 14764 : return _r;
3354 : }
3355 0 : next_after_fail1124:;
3356 0 : }
3357 : else
3358 : {
3359 218 : if (inside_int && inter_int && final_int
3360 0 : && ((inside_prec < inter_prec && inter_prec < final_prec
3361 0 : && inside_unsignedp && !inter_unsignedp)
3362 0 : || final_prec == inter_prec
3363 0 : || (inside_prec < inter_prec && inter_prec > final_prec
3364 0 : && !inside_unsignedp && inter_unsignedp))
3365 : )
3366 : {
3367 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1125;
3368 0 : {
3369 0 : tree res_op0;
3370 0 : res_op0 = captures[1];
3371 0 : tree _r;
3372 0 : _r = fold_build1_loc (loc, FIX_TRUNC_EXPR, type, res_op0);
3373 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 842, __FILE__, __LINE__, true);
3374 0 : return _r;
3375 : }
3376 0 : next_after_fail1125:;
3377 0 : }
3378 : else
3379 : {
3380 218 : if (! inside_float && ! inter_float && ! final_float
3381 : && ! inside_vec && ! inter_vec && ! final_vec
3382 0 : && (inter_prec >= inside_prec || inter_prec >= final_prec)
3383 0 : && ! (inside_int && inter_int
3384 0 : && inter_unsignedp != inside_unsignedp
3385 0 : && inter_prec < final_prec)
3386 0 : && ((inter_unsignedp && inter_prec > inside_prec)
3387 0 : == (final_unsignedp && final_prec > inter_prec))
3388 0 : && ! (inside_ptr && inter_prec != final_prec)
3389 0 : && ! (final_ptr && inside_prec != inter_prec)
3390 : )
3391 : {
3392 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1126;
3393 0 : {
3394 0 : tree res_op0;
3395 0 : res_op0 = captures[1];
3396 0 : tree _r;
3397 0 : _r = fold_build1_loc (loc, FIX_TRUNC_EXPR, type, res_op0);
3398 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 843, __FILE__, __LINE__, true);
3399 0 : return _r;
3400 : }
3401 0 : next_after_fail1126:;
3402 0 : }
3403 : else
3404 : {
3405 218 : if (inside_int && inter_int && final_int
3406 0 : && final_prec <= inside_prec
3407 0 : && inter_prec >= inside_prec
3408 : )
3409 : {
3410 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1127;
3411 0 : {
3412 0 : tree res_op0;
3413 0 : res_op0 = captures[1];
3414 0 : tree _r;
3415 0 : _r = fold_build1_loc (loc, NOP_EXPR, type, res_op0);
3416 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 844, __FILE__, __LINE__, true);
3417 0 : return _r;
3418 : }
3419 0 : next_after_fail1127:;
3420 0 : }
3421 : else
3422 : {
3423 : if (0
3424 : && final_int && inter_int && inside_int
3425 : && final_prec >= inside_prec
3426 : && inside_prec > inter_prec
3427 : && inter_unsignedp
3428 : )
3429 : {
3430 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1128;
3431 : {
3432 : tree res_op0;
3433 : {
3434 : tree _o1[2], _r1;
3435 : _o1[0] = captures[1];
3436 : _o1[1] = wide_int_to_tree
3437 : (inside_type,
3438 : wi::mask (inter_prec, false,
3439 : TYPE_PRECISION (inside_type)));
3440 : _r1 = fold_build2_loc (loc, BIT_AND_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
3441 : res_op0 = _r1;
3442 : }
3443 : tree _r;
3444 : _r = fold_build1_loc (loc, NOP_EXPR, type, res_op0);
3445 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 845, __FILE__, __LINE__, true);
3446 : return _r;
3447 : }
3448 : next_after_fail1128:;
3449 : }
3450 : else
3451 : {
3452 : if (0
3453 : && inside_int && inter_float && final_int &&
3454 : (unsigned) significand_size (TYPE_MODE (inter_type))
3455 : >= inside_prec - !inside_unsignedp
3456 : )
3457 : {
3458 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1129;
3459 : {
3460 : tree res_op0;
3461 : res_op0 = captures[1];
3462 : tree _r;
3463 : _r = fold_build1_loc (loc, NOP_EXPR, type, res_op0);
3464 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 846, __FILE__, __LINE__, true);
3465 : return _r;
3466 : }
3467 : next_after_fail1129:;
3468 : }
3469 : }
3470 : }
3471 : }
3472 : }
3473 : }
3474 : }
3475 : }
3476 : }
3477 218 : break;
3478 : }
3479 609 : case FLOAT_EXPR:
3480 609 : {
3481 609 : tree _q20 = TREE_OPERAND (_p0, 0);
3482 609 : {
3483 609 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q20 };
3484 609 : {
3485 609 : tree inside_type = TREE_TYPE (captures[1]);
3486 609 : tree inter_type = TREE_TYPE (captures[0]);
3487 609 : int inside_int = INTEGRAL_TYPE_P (inside_type);
3488 609 : int inside_ptr = POINTER_TYPE_P (inside_type);
3489 609 : int inside_float = FLOAT_TYPE_P (inside_type);
3490 609 : int inside_vec = VECTOR_TYPE_P (inside_type);
3491 609 : unsigned int inside_prec = element_precision (inside_type);
3492 609 : int inside_unsignedp = TYPE_UNSIGNED (inside_type);
3493 609 : int inter_int = INTEGRAL_TYPE_P (inter_type);
3494 609 : int inter_ptr = POINTER_TYPE_P (inter_type);
3495 609 : int inter_float = FLOAT_TYPE_P (inter_type);
3496 609 : int inter_vec = VECTOR_TYPE_P (inter_type);
3497 609 : unsigned int inter_prec = element_precision (inter_type);
3498 609 : int inter_unsignedp = TYPE_UNSIGNED (inter_type);
3499 609 : int final_int = INTEGRAL_TYPE_P (type);
3500 609 : int final_ptr = POINTER_TYPE_P (type);
3501 609 : int final_float = FLOAT_TYPE_P (type);
3502 609 : int final_vec = VECTOR_TYPE_P (type);
3503 609 : unsigned int final_prec = element_precision (type);
3504 609 : int final_unsignedp = TYPE_UNSIGNED (type);
3505 609 : if (((
3506 :
3507 : && useless_type_conversion_p (type, inside_type))
3508 : || (
3509 : 1
3510 609 : && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (inside_type)))
3511 60 : && (((inter_int || inter_ptr) && final_int)
3512 60 : || (inter_float && final_float))
3513 609 : && inter_prec >= final_prec
3514 : )
3515 : {
3516 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1130;
3517 0 : {
3518 0 : tree res_op0;
3519 0 : res_op0 = captures[1];
3520 0 : tree _r;
3521 0 : _r = fold_build1_loc (loc, FIX_TRUNC_EXPR, type, res_op0);
3522 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 840, __FILE__, __LINE__, true);
3523 0 : return _r;
3524 : }
3525 0 : next_after_fail1130:;
3526 : }
3527 : else
3528 : {
3529 609 : if (((inter_int && inside_int) || (inter_float && inside_float))
3530 0 : && (final_int || final_float)
3531 0 : && inter_prec >= inside_prec
3532 0 : && (inter_float || inter_unsignedp == inside_unsignedp)
3533 : )
3534 : {
3535 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1131;
3536 0 : {
3537 0 : tree res_op0;
3538 0 : res_op0 = captures[1];
3539 0 : tree _r;
3540 0 : _r = fold_build1_loc (loc, FIX_TRUNC_EXPR, type, res_op0);
3541 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 841, __FILE__, __LINE__, true);
3542 0 : return _r;
3543 : }
3544 0 : next_after_fail1131:;
3545 0 : }
3546 : else
3547 : {
3548 609 : if (inside_int && inter_int && final_int
3549 0 : && ((inside_prec < inter_prec && inter_prec < final_prec
3550 0 : && inside_unsignedp && !inter_unsignedp)
3551 0 : || final_prec == inter_prec
3552 0 : || (inside_prec < inter_prec && inter_prec > final_prec
3553 0 : && !inside_unsignedp && inter_unsignedp))
3554 : )
3555 : {
3556 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1132;
3557 0 : {
3558 0 : tree res_op0;
3559 0 : res_op0 = captures[1];
3560 0 : tree _r;
3561 0 : _r = fold_build1_loc (loc, FIX_TRUNC_EXPR, type, res_op0);
3562 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 842, __FILE__, __LINE__, true);
3563 0 : return _r;
3564 : }
3565 0 : next_after_fail1132:;
3566 0 : }
3567 : else
3568 : {
3569 609 : if (! inside_float && ! inter_float && ! final_float
3570 : && ! inside_vec && ! inter_vec && ! final_vec
3571 0 : && (inter_prec >= inside_prec || inter_prec >= final_prec)
3572 0 : && ! (inside_int && inter_int
3573 0 : && inter_unsignedp != inside_unsignedp
3574 0 : && inter_prec < final_prec)
3575 0 : && ((inter_unsignedp && inter_prec > inside_prec)
3576 0 : == (final_unsignedp && final_prec > inter_prec))
3577 0 : && ! (inside_ptr && inter_prec != final_prec)
3578 0 : && ! (final_ptr && inside_prec != inter_prec)
3579 : )
3580 : {
3581 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1133;
3582 0 : {
3583 0 : tree res_op0;
3584 0 : res_op0 = captures[1];
3585 0 : tree _r;
3586 0 : _r = fold_build1_loc (loc, FIX_TRUNC_EXPR, type, res_op0);
3587 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 843, __FILE__, __LINE__, true);
3588 0 : return _r;
3589 : }
3590 0 : next_after_fail1133:;
3591 0 : }
3592 : else
3593 : {
3594 609 : if (inside_int && inter_int && final_int
3595 0 : && final_prec <= inside_prec
3596 0 : && inter_prec >= inside_prec
3597 : )
3598 : {
3599 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1134;
3600 0 : {
3601 0 : tree res_op0;
3602 0 : res_op0 = captures[1];
3603 0 : tree _r;
3604 0 : _r = fold_build1_loc (loc, NOP_EXPR, type, res_op0);
3605 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 844, __FILE__, __LINE__, true);
3606 0 : return _r;
3607 : }
3608 0 : next_after_fail1134:;
3609 0 : }
3610 : else
3611 : {
3612 : if (0
3613 : && final_int && inter_int && inside_int
3614 : && final_prec >= inside_prec
3615 : && inside_prec > inter_prec
3616 : && inter_unsignedp
3617 : )
3618 : {
3619 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1135;
3620 : {
3621 : tree res_op0;
3622 : {
3623 : tree _o1[2], _r1;
3624 : _o1[0] = captures[1];
3625 : _o1[1] = wide_int_to_tree
3626 : (inside_type,
3627 : wi::mask (inter_prec, false,
3628 : TYPE_PRECISION (inside_type)));
3629 : _r1 = fold_build2_loc (loc, BIT_AND_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
3630 : res_op0 = _r1;
3631 : }
3632 : tree _r;
3633 : _r = fold_build1_loc (loc, NOP_EXPR, type, res_op0);
3634 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 845, __FILE__, __LINE__, true);
3635 : return _r;
3636 : }
3637 : next_after_fail1135:;
3638 : }
3639 : else
3640 : {
3641 : if (0
3642 : && inside_int && inter_float && final_int &&
3643 : (unsigned) significand_size (TYPE_MODE (inter_type))
3644 : >= inside_prec - !inside_unsignedp
3645 : )
3646 : {
3647 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1136;
3648 : {
3649 : tree res_op0;
3650 : res_op0 = captures[1];
3651 : tree _r;
3652 : _r = fold_build1_loc (loc, NOP_EXPR, type, res_op0);
3653 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 846, __FILE__, __LINE__, true);
3654 : return _r;
3655 : }
3656 : next_after_fail1136:;
3657 : }
3658 : }
3659 : }
3660 : }
3661 : }
3662 : }
3663 : }
3664 : }
3665 : }
3666 609 : break;
3667 : }
3668 : default:;
3669 : }
3670 : return NULL_TREE;
3671 : }
3672 :
3673 : tree
3674 33446228 : generic_simplify_MINUS_EXPR (location_t ARG_UNUSED (loc), enum tree_code ARG_UNUSED (code), const tree ARG_UNUSED (type), tree _p0, tree _p1)
3675 : {
3676 33446228 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3677 33446228 : if (integer_zerop (_p1))
3678 : {
3679 1999249 : {
3680 1999249 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
3681 1999249 : if (TREE_SIDE_EFFECTS (_p1)) goto next_after_fail1275;
3682 1999249 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1275;
3683 1999249 : {
3684 1999249 : tree res_op0;
3685 1999249 : res_op0 = captures[0];
3686 1999249 : tree _r;
3687 1999249 : _r = non_lvalue_loc (loc, res_op0);
3688 1999249 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 891, __FILE__, __LINE__, true);
3689 1999249 : return _r;
3690 : }
3691 : next_after_fail1275:;
3692 : }
3693 : }
3694 31446979 : if (real_zerop (_p1))
3695 : {
3696 1140 : {
3697 1140 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
3698 1140 : if (fold_real_zero_addition_p (type, captures[0], captures[1], 1)
3699 : )
3700 : {
3701 752 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1276;
3702 752 : {
3703 752 : tree res_op0;
3704 752 : res_op0 = captures[0];
3705 752 : tree _r;
3706 752 : _r = non_lvalue_loc (loc, res_op0);
3707 752 : if (TREE_SIDE_EFFECTS (captures[1]))
3708 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
3709 752 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 916, __FILE__, __LINE__, true);
3710 752 : return _r;
3711 : }
3712 0 : next_after_fail1276:;
3713 : }
3714 : }
3715 : }
3716 31446227 : switch (TREE_CODE (_p0))
3717 : {
3718 2344266 : case PLUS_EXPR:
3719 2344266 : {
3720 2344266 : tree _q20 = TREE_OPERAND (_p0, 0);
3721 2344266 : tree _q21 = TREE_OPERAND (_p0, 1);
3722 2344266 : switch (TREE_CODE (_q21))
3723 : {
3724 154355 : case REAL_CST:
3725 154355 : {
3726 154355 : switch (TREE_CODE (_p1))
3727 : {
3728 11 : case REAL_CST:
3729 11 : {
3730 11 : {
3731 11 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _p1 };
3732 11 : tree res = generic_simplify_55 (loc, type, _p0, _p1, captures, MINUS_EXPR, PLUS_EXPR);
3733 11 : if (res) return res;
3734 : }
3735 8 : break;
3736 : }
3737 : default:;
3738 : }
3739 : break;
3740 : }
3741 : default:;
3742 : }
3743 : break;
3744 : }
3745 1249343 : case MINUS_EXPR:
3746 1249343 : {
3747 1249343 : tree _q20 = TREE_OPERAND (_p0, 0);
3748 1249343 : tree _q21 = TREE_OPERAND (_p0, 1);
3749 1249343 : switch (TREE_CODE (_q21))
3750 : {
3751 97024 : case REAL_CST:
3752 97024 : {
3753 97024 : switch (TREE_CODE (_p1))
3754 : {
3755 40 : case REAL_CST:
3756 40 : {
3757 40 : {
3758 40 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _p1 };
3759 40 : tree res = generic_simplify_55 (loc, type, _p0, _p1, captures, MINUS_EXPR, MINUS_EXPR);
3760 40 : if (res) return res;
3761 : }
3762 38 : break;
3763 : }
3764 : default:;
3765 : }
3766 : break;
3767 : }
3768 : default:;
3769 : }
3770 : break;
3771 : }
3772 31446222 : default:;
3773 : }
3774 31446222 : if ((_p1 == _p0 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _p0, 0) && types_match (_p1, _p0)))
3775 : {
3776 204119 : {
3777 204119 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
3778 203361 : if (!FLOAT_TYPE_P (type)
3779 204182 : || (!tree_expr_maybe_nan_p (captures[0])
3780 107 : && !tree_expr_maybe_infinite_p (captures[0])
3781 15 : && (!HONOR_SIGN_DEPENDENT_ROUNDING (type)
3782 1 : || !HONOR_SIGNED_ZEROS (type)))
3783 : )
3784 : {
3785 203312 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1277;
3786 203312 : {
3787 203312 : tree _r;
3788 203312 : _r = build_zero_cst (type);
3789 203312 : if (TREE_SIDE_EFFECTS (captures[0]))
3790 36 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[0]), _r);
3791 203312 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 917, __FILE__, __LINE__, true);
3792 203312 : return _r;
3793 : }
3794 0 : next_after_fail1277:;
3795 : }
3796 : }
3797 : }
3798 31242910 : switch (TREE_CODE (_p0))
3799 : {
3800 8677277 : CASE_CONVERT:
3801 8677277 : {
3802 8677277 : tree _q20 = TREE_OPERAND (_p0, 0);
3803 8677277 : switch (TREE_CODE (_p1))
3804 : {
3805 4330402 : CASE_CONVERT:
3806 4330402 : {
3807 4330402 : tree _q40 = TREE_OPERAND (_p1, 0);
3808 4330402 : switch (TREE_CODE (_q40))
3809 : {
3810 110510 : case MULT_EXPR:
3811 110510 : {
3812 110510 : tree _q50 = TREE_OPERAND (_q40, 0);
3813 110510 : tree _q51 = TREE_OPERAND (_q40, 1);
3814 110510 : switch (TREE_CODE (_q50))
3815 : {
3816 21 : case TRUNC_DIV_EXPR:
3817 21 : {
3818 21 : tree _q60 = TREE_OPERAND (_q50, 0);
3819 21 : tree _q61 = TREE_OPERAND (_q50, 1);
3820 21 : if ((_q60 == _q20 && ! TREE_SIDE_EFFECTS (_q60)) || operand_equal_p (_q60, _q20, 0))
3821 : {
3822 21 : if ((_q51 == _q61 && ! TREE_SIDE_EFFECTS (_q51)) || operand_equal_p (_q51, _q61, 0))
3823 : {
3824 21 : {
3825 21 : tree captures[4] ATTRIBUTE_UNUSED = { _q60, _q61, _q20, _q61 };
3826 21 : tree res = generic_simplify_86 (loc, type, _p0, _p1, captures);
3827 21 : if (res) return res;
3828 : }
3829 : }
3830 : }
3831 : break;
3832 : }
3833 110489 : default:;
3834 : }
3835 110489 : switch (TREE_CODE (_q51))
3836 : {
3837 0 : case TRUNC_DIV_EXPR:
3838 0 : {
3839 0 : tree _q70 = TREE_OPERAND (_q51, 0);
3840 0 : tree _q71 = TREE_OPERAND (_q51, 1);
3841 0 : if ((_q70 == _q20 && ! TREE_SIDE_EFFECTS (_q70)) || operand_equal_p (_q70, _q20, 0))
3842 : {
3843 0 : if ((_q71 == _q50 && ! TREE_SIDE_EFFECTS (_q71)) || operand_equal_p (_q71, _q50, 0))
3844 : {
3845 0 : {
3846 0 : tree captures[4] ATTRIBUTE_UNUSED = { _q70, _q71, _q20, _q50 };
3847 0 : tree res = generic_simplify_86 (loc, type, _p0, _p1, captures);
3848 0 : if (res) return res;
3849 : }
3850 : }
3851 : }
3852 : break;
3853 : }
3854 : default:;
3855 : }
3856 : break;
3857 : }
3858 : default:;
3859 : }
3860 : break;
3861 : }
3862 149764 : case MULT_EXPR:
3863 149764 : {
3864 149764 : tree _q40 = TREE_OPERAND (_p1, 0);
3865 149764 : tree _q41 = TREE_OPERAND (_p1, 1);
3866 149764 : switch (TREE_CODE (_q40))
3867 : {
3868 1837 : case TRUNC_DIV_EXPR:
3869 1837 : {
3870 1837 : tree _q50 = TREE_OPERAND (_q40, 0);
3871 1837 : tree _q51 = TREE_OPERAND (_q40, 1);
3872 1837 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || operand_equal_p (_q50, _q20, 0))
3873 : {
3874 10 : if ((_q41 == _q51 && ! TREE_SIDE_EFFECTS (_q41)) || operand_equal_p (_q41, _q51, 0))
3875 : {
3876 10 : {
3877 10 : tree captures[4] ATTRIBUTE_UNUSED = { _q50, _q51, _q20, _q51 };
3878 10 : tree res = generic_simplify_86 (loc, type, _p0, _p1, captures);
3879 10 : if (res) return res;
3880 : }
3881 : }
3882 : }
3883 : break;
3884 : }
3885 149754 : default:;
3886 : }
3887 149754 : switch (TREE_CODE (_q41))
3888 : {
3889 0 : case TRUNC_DIV_EXPR:
3890 0 : {
3891 0 : tree _q60 = TREE_OPERAND (_q41, 0);
3892 0 : tree _q61 = TREE_OPERAND (_q41, 1);
3893 0 : if ((_q60 == _q20 && ! TREE_SIDE_EFFECTS (_q60)) || operand_equal_p (_q60, _q20, 0))
3894 : {
3895 0 : if ((_q61 == _q40 && ! TREE_SIDE_EFFECTS (_q61)) || operand_equal_p (_q61, _q40, 0))
3896 : {
3897 0 : {
3898 0 : tree captures[4] ATTRIBUTE_UNUSED = { _q60, _q61, _q20, _q40 };
3899 0 : tree res = generic_simplify_86 (loc, type, _p0, _p1, captures);
3900 0 : if (res) return res;
3901 : }
3902 : }
3903 : }
3904 : break;
3905 : }
3906 : default:;
3907 : }
3908 : break;
3909 : }
3910 : default:;
3911 : }
3912 : break;
3913 : }
3914 31242879 : default:;
3915 : }
3916 31242879 : switch (TREE_CODE (_p1))
3917 : {
3918 7690940 : CASE_CONVERT:
3919 7690940 : {
3920 7690940 : tree _q30 = TREE_OPERAND (_p1, 0);
3921 7690940 : switch (TREE_CODE (_q30))
3922 : {
3923 137726 : case MULT_EXPR:
3924 137726 : {
3925 137726 : tree _q40 = TREE_OPERAND (_q30, 0);
3926 137726 : tree _q41 = TREE_OPERAND (_q30, 1);
3927 137726 : switch (TREE_CODE (_q40))
3928 : {
3929 12 : case TRUNC_DIV_EXPR:
3930 12 : {
3931 12 : tree _q50 = TREE_OPERAND (_q40, 0);
3932 12 : tree _q51 = TREE_OPERAND (_q40, 1);
3933 12 : if ((_q50 == _p0 && ! TREE_SIDE_EFFECTS (_q50)) || operand_equal_p (_q50, _p0, 0))
3934 : {
3935 2 : if ((_q41 == _q51 && ! TREE_SIDE_EFFECTS (_q41)) || operand_equal_p (_q41, _q51, 0))
3936 : {
3937 2 : {
3938 2 : tree captures[4] ATTRIBUTE_UNUSED = { _q50, _q51, _p0, _q51 };
3939 2 : tree res = generic_simplify_86 (loc, type, _p0, _p1, captures);
3940 2 : if (res) return res;
3941 : }
3942 : }
3943 : }
3944 : break;
3945 : }
3946 137724 : default:;
3947 : }
3948 137724 : switch (TREE_CODE (_q41))
3949 : {
3950 0 : case TRUNC_DIV_EXPR:
3951 0 : {
3952 0 : tree _q60 = TREE_OPERAND (_q41, 0);
3953 0 : tree _q61 = TREE_OPERAND (_q41, 1);
3954 0 : if ((_q60 == _p0 && ! TREE_SIDE_EFFECTS (_q60)) || operand_equal_p (_q60, _p0, 0))
3955 : {
3956 0 : if ((_q61 == _q40 && ! TREE_SIDE_EFFECTS (_q61)) || operand_equal_p (_q61, _q40, 0))
3957 : {
3958 0 : {
3959 0 : tree captures[4] ATTRIBUTE_UNUSED = { _q60, _q61, _p0, _q40 };
3960 0 : tree res = generic_simplify_86 (loc, type, _p0, _p1, captures);
3961 0 : if (res) return res;
3962 : }
3963 : }
3964 : }
3965 : break;
3966 : }
3967 : default:;
3968 : }
3969 : break;
3970 : }
3971 : default:;
3972 : }
3973 : break;
3974 : }
3975 2084938 : case MULT_EXPR:
3976 2084938 : {
3977 2084938 : tree _q30 = TREE_OPERAND (_p1, 0);
3978 2084938 : tree _q31 = TREE_OPERAND (_p1, 1);
3979 2084938 : switch (TREE_CODE (_q30))
3980 : {
3981 2360 : case TRUNC_DIV_EXPR:
3982 2360 : {
3983 2360 : tree _q40 = TREE_OPERAND (_q30, 0);
3984 2360 : tree _q41 = TREE_OPERAND (_q30, 1);
3985 2360 : if ((_q40 == _p0 && ! TREE_SIDE_EFFECTS (_q40)) || operand_equal_p (_q40, _p0, 0))
3986 : {
3987 52 : if ((_q31 == _q41 && ! TREE_SIDE_EFFECTS (_q31)) || operand_equal_p (_q31, _q41, 0))
3988 : {
3989 52 : {
3990 52 : tree captures[4] ATTRIBUTE_UNUSED = { _q40, _q41, _p0, _q41 };
3991 52 : tree res = generic_simplify_86 (loc, type, _p0, _p1, captures);
3992 52 : if (res) return res;
3993 : }
3994 : }
3995 : }
3996 : break;
3997 : }
3998 2084886 : default:;
3999 : }
4000 2084886 : switch (TREE_CODE (_q31))
4001 : {
4002 0 : case TRUNC_DIV_EXPR:
4003 0 : {
4004 0 : tree _q50 = TREE_OPERAND (_q31, 0);
4005 0 : tree _q51 = TREE_OPERAND (_q31, 1);
4006 0 : if ((_q50 == _p0 && ! TREE_SIDE_EFFECTS (_q50)) || operand_equal_p (_q50, _p0, 0))
4007 : {
4008 0 : if ((_q51 == _q30 && ! TREE_SIDE_EFFECTS (_q51)) || operand_equal_p (_q51, _q30, 0))
4009 : {
4010 0 : {
4011 0 : tree captures[4] ATTRIBUTE_UNUSED = { _q50, _q51, _p0, _q30 };
4012 0 : tree res = generic_simplify_86 (loc, type, _p0, _p1, captures);
4013 0 : if (res) return res;
4014 : }
4015 : }
4016 : }
4017 : break;
4018 : }
4019 : default:;
4020 : }
4021 : break;
4022 : }
4023 31242825 : default:;
4024 : }
4025 31242825 : switch (TREE_CODE (_p0))
4026 : {
4027 1914910 : case MULT_EXPR:
4028 1914910 : {
4029 1914910 : tree _q20 = TREE_OPERAND (_p0, 0);
4030 1914910 : tree _q21 = TREE_OPERAND (_p0, 1);
4031 1914910 : switch (TREE_CODE (_q21))
4032 : {
4033 595 : case PLUS_EXPR:
4034 595 : {
4035 595 : tree _q40 = TREE_OPERAND (_q21, 0);
4036 595 : tree _q41 = TREE_OPERAND (_q21, 1);
4037 595 : switch (TREE_CODE (_q40))
4038 : {
4039 0 : case TRUNC_DIV_EXPR:
4040 0 : {
4041 0 : tree _q50 = TREE_OPERAND (_q40, 0);
4042 0 : tree _q51 = TREE_OPERAND (_q40, 1);
4043 0 : if ((_q51 == _q20 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q20, 0) && types_match (_q51, _q20)))
4044 : {
4045 0 : if (integer_onep (_q41))
4046 : {
4047 0 : if ((_p1 == _q50 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q50, 0) && types_match (_p1, _q50)))
4048 : {
4049 0 : {
4050 0 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q40, _q50 };
4051 0 : tree res = generic_simplify_87 (loc, type, _p0, _p1, captures);
4052 0 : if (res) return res;
4053 : }
4054 : }
4055 : }
4056 : }
4057 : break;
4058 : }
4059 : default:;
4060 : }
4061 : break;
4062 : }
4063 1914910 : default:;
4064 : }
4065 1914910 : switch (TREE_CODE (_q20))
4066 : {
4067 107298 : case PLUS_EXPR:
4068 107298 : {
4069 107298 : tree _q30 = TREE_OPERAND (_q20, 0);
4070 107298 : tree _q31 = TREE_OPERAND (_q20, 1);
4071 107298 : switch (TREE_CODE (_q30))
4072 : {
4073 1 : case TRUNC_DIV_EXPR:
4074 1 : {
4075 1 : tree _q40 = TREE_OPERAND (_q30, 0);
4076 1 : tree _q41 = TREE_OPERAND (_q30, 1);
4077 1 : if (integer_onep (_q31))
4078 : {
4079 1 : if ((_q21 == _q41 && ! TREE_SIDE_EFFECTS (_q21)) || (operand_equal_p (_q21, _q41, 0) && types_match (_q21, _q41)))
4080 : {
4081 1 : if ((_p1 == _q40 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q40, 0) && types_match (_p1, _q40)))
4082 : {
4083 1 : {
4084 1 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q41, _q20, _q30, _q40 };
4085 1 : tree res = generic_simplify_87 (loc, type, _p0, _p1, captures);
4086 1 : if (res) return res;
4087 : }
4088 : }
4089 : }
4090 : }
4091 : break;
4092 : }
4093 : default:;
4094 : }
4095 : break;
4096 : }
4097 : default:;
4098 : }
4099 : break;
4100 : }
4101 1266 : case LSHIFT_EXPR:
4102 1266 : {
4103 1266 : tree _q20 = TREE_OPERAND (_p0, 0);
4104 1266 : tree _q21 = TREE_OPERAND (_p0, 1);
4105 1266 : switch (TREE_CODE (_p1))
4106 : {
4107 0 : case LSHIFT_EXPR:
4108 0 : {
4109 0 : tree _q50 = TREE_OPERAND (_p1, 0);
4110 0 : tree _q51 = TREE_OPERAND (_p1, 1);
4111 0 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
4112 : {
4113 0 : {
4114 0 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _p1, _q50 };
4115 0 : tree res = generic_simplify_57 (loc, type, _p0, _p1, captures, MINUS_EXPR);
4116 0 : if (res) return res;
4117 : }
4118 : }
4119 : break;
4120 : }
4121 : default:;
4122 : }
4123 : break;
4124 : }
4125 1191 : case BIT_AND_EXPR:
4126 1191 : {
4127 1191 : tree _q20 = TREE_OPERAND (_p0, 0);
4128 1191 : tree _q21 = TREE_OPERAND (_p0, 1);
4129 1191 : switch (TREE_CODE (_q21))
4130 : {
4131 0 : case BIT_NOT_EXPR:
4132 0 : {
4133 0 : tree _q40 = TREE_OPERAND (_q21, 0);
4134 0 : switch (TREE_CODE (_p1))
4135 : {
4136 0 : case BIT_AND_EXPR:
4137 0 : {
4138 0 : tree _q60 = TREE_OPERAND (_p1, 0);
4139 0 : tree _q61 = TREE_OPERAND (_p1, 1);
4140 0 : if ((_q60 == _q20 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _q20, 0) && types_match (_q60, _q20)))
4141 : {
4142 0 : if ((_q61 == _q40 && ! TREE_SIDE_EFFECTS (_q61)) || (operand_equal_p (_q61, _q40, 0) && types_match (_q61, _q40)))
4143 : {
4144 0 : {
4145 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q40, _p1 };
4146 0 : tree res = generic_simplify_88 (loc, type, _p0, _p1, captures);
4147 0 : if (res) return res;
4148 : }
4149 : }
4150 : }
4151 0 : if ((_q60 == _q40 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _q40, 0) && types_match (_q60, _q40)))
4152 : {
4153 0 : if ((_q61 == _q20 && ! TREE_SIDE_EFFECTS (_q61)) || (operand_equal_p (_q61, _q20, 0) && types_match (_q61, _q20)))
4154 : {
4155 0 : {
4156 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q40, _p1 };
4157 0 : tree res = generic_simplify_88 (loc, type, _p0, _p1, captures);
4158 0 : if (res) return res;
4159 : }
4160 : }
4161 : }
4162 : break;
4163 : }
4164 : default:;
4165 : }
4166 : break;
4167 : }
4168 1191 : default:;
4169 : }
4170 1191 : switch (TREE_CODE (_q20))
4171 : {
4172 27 : case BIT_NOT_EXPR:
4173 27 : {
4174 27 : tree _q30 = TREE_OPERAND (_q20, 0);
4175 27 : switch (TREE_CODE (_p1))
4176 : {
4177 21 : case BIT_AND_EXPR:
4178 21 : {
4179 21 : tree _q60 = TREE_OPERAND (_p1, 0);
4180 21 : tree _q61 = TREE_OPERAND (_p1, 1);
4181 21 : if ((_q60 == _q21 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _q21, 0) && types_match (_q60, _q21)))
4182 : {
4183 0 : if ((_q61 == _q30 && ! TREE_SIDE_EFFECTS (_q61)) || (operand_equal_p (_q61, _q30, 0) && types_match (_q61, _q30)))
4184 : {
4185 0 : {
4186 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q21, _q30, _p1 };
4187 0 : tree res = generic_simplify_88 (loc, type, _p0, _p1, captures);
4188 0 : if (res) return res;
4189 : }
4190 : }
4191 : }
4192 21 : if ((_q60 == _q30 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _q30, 0) && types_match (_q60, _q30)))
4193 : {
4194 21 : if ((_q61 == _q21 && ! TREE_SIDE_EFFECTS (_q61)) || (operand_equal_p (_q61, _q21, 0) && types_match (_q61, _q21)))
4195 : {
4196 21 : {
4197 21 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q21, _q30, _p1 };
4198 21 : tree res = generic_simplify_88 (loc, type, _p0, _p1, captures);
4199 21 : if (res) return res;
4200 : }
4201 : }
4202 : }
4203 : break;
4204 : }
4205 : default:;
4206 : }
4207 : break;
4208 : }
4209 1170 : default:;
4210 : }
4211 1170 : switch (TREE_CODE (_q21))
4212 : {
4213 1130 : case INTEGER_CST:
4214 1130 : {
4215 1130 : switch (TREE_CODE (_p1))
4216 : {
4217 28 : case BIT_AND_EXPR:
4218 28 : {
4219 28 : tree _q50 = TREE_OPERAND (_p1, 0);
4220 28 : tree _q51 = TREE_OPERAND (_p1, 1);
4221 28 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
4222 : {
4223 6 : switch (TREE_CODE (_q51))
4224 : {
4225 6 : case INTEGER_CST:
4226 6 : {
4227 6 : {
4228 6 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _p1, _q51 };
4229 6 : if (~wi::to_wide (captures[2]) == wi::to_wide (captures[4])
4230 : )
4231 : {
4232 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1278;
4233 0 : {
4234 0 : if (! tree_invariant_p (captures[4])) goto next_after_fail1278;
4235 0 : tree res_op0;
4236 0 : {
4237 0 : tree _o1[2], _r1;
4238 0 : _o1[0] = captures[1];
4239 0 : _o1[1] = unshare_expr (captures[4]);
4240 0 : _r1 = fold_build2_loc (loc, BIT_XOR_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
4241 0 : res_op0 = _r1;
4242 : }
4243 0 : tree res_op1;
4244 0 : res_op1 = captures[4];
4245 0 : tree _r;
4246 0 : _r = fold_build2_loc (loc, MINUS_EXPR, type, res_op0, res_op1);
4247 0 : if (TREE_SIDE_EFFECTS (captures[2]))
4248 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[2]), _r);
4249 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 918, __FILE__, __LINE__, true);
4250 0 : return _r;
4251 : }
4252 6 : next_after_fail1278:;
4253 : }
4254 : }
4255 6 : break;
4256 : }
4257 : default:;
4258 : }
4259 : }
4260 : break;
4261 : }
4262 : default:;
4263 : }
4264 : break;
4265 : }
4266 1170 : default:;
4267 : }
4268 1170 : switch (TREE_CODE (_p1))
4269 : {
4270 31 : case BIT_AND_EXPR:
4271 31 : {
4272 31 : tree _q50 = TREE_OPERAND (_p1, 0);
4273 31 : tree _q51 = TREE_OPERAND (_p1, 1);
4274 31 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
4275 : {
4276 6 : switch (TREE_CODE (_q51))
4277 : {
4278 0 : case BIT_NOT_EXPR:
4279 0 : {
4280 0 : tree _q70 = TREE_OPERAND (_q51, 0);
4281 0 : if ((_q70 == _q21 && ! TREE_SIDE_EFFECTS (_q70)) || (operand_equal_p (_q70, _q21, 0) && types_match (_q70, _q21)))
4282 : {
4283 0 : {
4284 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _p1 };
4285 0 : tree res = generic_simplify_89 (loc, type, _p0, _p1, captures);
4286 0 : if (res) return res;
4287 : }
4288 : }
4289 : break;
4290 : }
4291 : default:;
4292 : }
4293 : }
4294 31 : switch (TREE_CODE (_q50))
4295 : {
4296 0 : case BIT_NOT_EXPR:
4297 0 : {
4298 0 : tree _q60 = TREE_OPERAND (_q50, 0);
4299 0 : if ((_q60 == _q21 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _q21, 0) && types_match (_q60, _q21)))
4300 : {
4301 0 : if ((_q51 == _q20 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q20, 0) && types_match (_q51, _q20)))
4302 : {
4303 0 : {
4304 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _p1 };
4305 0 : tree res = generic_simplify_89 (loc, type, _p0, _p1, captures);
4306 0 : if (res) return res;
4307 : }
4308 : }
4309 : }
4310 0 : if ((_q60 == _q20 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _q20, 0) && types_match (_q60, _q20)))
4311 : {
4312 0 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
4313 : {
4314 0 : {
4315 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q21, _q20, _p1 };
4316 0 : tree res = generic_simplify_89 (loc, type, _p0, _p1, captures);
4317 0 : if (res) return res;
4318 : }
4319 : }
4320 : }
4321 : break;
4322 : }
4323 31 : default:;
4324 : }
4325 31 : if ((_q50 == _q21 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q21, 0) && types_match (_q50, _q21)))
4326 : {
4327 0 : switch (TREE_CODE (_q51))
4328 : {
4329 0 : case BIT_NOT_EXPR:
4330 0 : {
4331 0 : tree _q70 = TREE_OPERAND (_q51, 0);
4332 0 : if ((_q70 == _q20 && ! TREE_SIDE_EFFECTS (_q70)) || (operand_equal_p (_q70, _q20, 0) && types_match (_q70, _q20)))
4333 : {
4334 0 : {
4335 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q21, _q20, _p1 };
4336 0 : tree res = generic_simplify_89 (loc, type, _p0, _p1, captures);
4337 0 : if (res) return res;
4338 : }
4339 : }
4340 : break;
4341 : }
4342 : default:;
4343 : }
4344 : }
4345 : break;
4346 : }
4347 2 : case PLUS_EXPR:
4348 2 : {
4349 2 : tree _q50 = TREE_OPERAND (_p1, 0);
4350 2 : tree _q51 = TREE_OPERAND (_p1, 1);
4351 2 : switch (TREE_CODE (_q50))
4352 : {
4353 2 : case BIT_IOR_EXPR:
4354 2 : {
4355 2 : tree _q60 = TREE_OPERAND (_q50, 0);
4356 2 : tree _q61 = TREE_OPERAND (_q50, 1);
4357 2 : if ((_q60 == _q20 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _q20, 0) && types_match (_q60, _q20)))
4358 : {
4359 2 : if ((_q61 == _q21 && ! TREE_SIDE_EFFECTS (_q61)) || (operand_equal_p (_q61, _q21, 0) && types_match (_q61, _q21)))
4360 : {
4361 2 : if (integer_onep (_q51))
4362 : {
4363 2 : {
4364 2 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
4365 2 : tree res = generic_simplify_90 (loc, type, _p0, _p1, captures);
4366 2 : if (res) return res;
4367 : }
4368 : }
4369 : }
4370 : }
4371 0 : if ((_q60 == _q21 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _q21, 0) && types_match (_q60, _q21)))
4372 : {
4373 0 : if ((_q61 == _q20 && ! TREE_SIDE_EFFECTS (_q61)) || (operand_equal_p (_q61, _q20, 0) && types_match (_q61, _q20)))
4374 : {
4375 0 : if (integer_onep (_q51))
4376 : {
4377 0 : {
4378 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
4379 0 : tree res = generic_simplify_90 (loc, type, _p0, _p1, captures);
4380 0 : if (res) return res;
4381 : }
4382 : }
4383 : }
4384 : }
4385 : break;
4386 : }
4387 0 : default:;
4388 : }
4389 0 : {
4390 0 : tree _q50_pops[1];
4391 0 : if (tree_nop_convert (_q50, _q50_pops))
4392 : {
4393 0 : tree _q60 = _q50_pops[0];
4394 0 : switch (TREE_CODE (_q60))
4395 : {
4396 0 : case BIT_IOR_EXPR:
4397 0 : {
4398 0 : tree _q70 = TREE_OPERAND (_q60, 0);
4399 0 : tree _q71 = TREE_OPERAND (_q60, 1);
4400 0 : if ((_q70 == _q20 && ! TREE_SIDE_EFFECTS (_q70)) || (operand_equal_p (_q70, _q20, 0) && types_match (_q70, _q20)))
4401 : {
4402 0 : if ((_q71 == _q21 && ! TREE_SIDE_EFFECTS (_q71)) || (operand_equal_p (_q71, _q21, 0) && types_match (_q71, _q21)))
4403 : {
4404 0 : if (integer_onep (_q51))
4405 : {
4406 0 : {
4407 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
4408 0 : tree res = generic_simplify_90 (loc, type, _p0, _p1, captures);
4409 0 : if (res) return res;
4410 : }
4411 : }
4412 : }
4413 : }
4414 0 : if ((_q70 == _q21 && ! TREE_SIDE_EFFECTS (_q70)) || (operand_equal_p (_q70, _q21, 0) && types_match (_q70, _q21)))
4415 : {
4416 0 : if ((_q71 == _q20 && ! TREE_SIDE_EFFECTS (_q71)) || (operand_equal_p (_q71, _q20, 0) && types_match (_q71, _q20)))
4417 : {
4418 0 : if (integer_onep (_q51))
4419 : {
4420 0 : {
4421 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
4422 0 : tree res = generic_simplify_90 (loc, type, _p0, _p1, captures);
4423 0 : if (res) return res;
4424 : }
4425 : }
4426 : }
4427 : }
4428 : break;
4429 : }
4430 : default:;
4431 : }
4432 : }
4433 : }
4434 0 : break;
4435 : }
4436 1168 : default:;
4437 : }
4438 1168 : {
4439 1168 : tree _p1_pops[1];
4440 1168 : if (tree_nop_convert (_p1, _p1_pops))
4441 : {
4442 7 : tree _q50 = _p1_pops[0];
4443 7 : switch (TREE_CODE (_q50))
4444 : {
4445 0 : case PLUS_EXPR:
4446 0 : {
4447 0 : tree _q60 = TREE_OPERAND (_q50, 0);
4448 0 : tree _q61 = TREE_OPERAND (_q50, 1);
4449 0 : switch (TREE_CODE (_q60))
4450 : {
4451 0 : case BIT_IOR_EXPR:
4452 0 : {
4453 0 : tree _q70 = TREE_OPERAND (_q60, 0);
4454 0 : tree _q71 = TREE_OPERAND (_q60, 1);
4455 0 : if ((_q70 == _q20 && ! TREE_SIDE_EFFECTS (_q70)) || (operand_equal_p (_q70, _q20, 0) && types_match (_q70, _q20)))
4456 : {
4457 0 : if ((_q71 == _q21 && ! TREE_SIDE_EFFECTS (_q71)) || (operand_equal_p (_q71, _q21, 0) && types_match (_q71, _q21)))
4458 : {
4459 0 : if (integer_onep (_q61))
4460 : {
4461 0 : {
4462 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q50 };
4463 0 : tree res = generic_simplify_90 (loc, type, _p0, _p1, captures);
4464 0 : if (res) return res;
4465 : }
4466 : }
4467 : }
4468 : }
4469 0 : if ((_q70 == _q21 && ! TREE_SIDE_EFFECTS (_q70)) || (operand_equal_p (_q70, _q21, 0) && types_match (_q70, _q21)))
4470 : {
4471 0 : if ((_q71 == _q20 && ! TREE_SIDE_EFFECTS (_q71)) || (operand_equal_p (_q71, _q20, 0) && types_match (_q71, _q20)))
4472 : {
4473 0 : if (integer_onep (_q61))
4474 : {
4475 0 : {
4476 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q50 };
4477 0 : tree res = generic_simplify_90 (loc, type, _p0, _p1, captures);
4478 0 : if (res) return res;
4479 : }
4480 : }
4481 : }
4482 : }
4483 : break;
4484 : }
4485 0 : default:;
4486 : }
4487 0 : {
4488 0 : tree _q60_pops[1];
4489 0 : if (tree_nop_convert (_q60, _q60_pops))
4490 : {
4491 0 : tree _q70 = _q60_pops[0];
4492 0 : switch (TREE_CODE (_q70))
4493 : {
4494 0 : case BIT_IOR_EXPR:
4495 0 : {
4496 0 : tree _q80 = TREE_OPERAND (_q70, 0);
4497 0 : tree _q81 = TREE_OPERAND (_q70, 1);
4498 0 : if ((_q80 == _q20 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q20, 0) && types_match (_q80, _q20)))
4499 : {
4500 0 : if ((_q81 == _q21 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q21, 0) && types_match (_q81, _q21)))
4501 : {
4502 0 : if (integer_onep (_q61))
4503 : {
4504 0 : {
4505 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q50 };
4506 0 : tree res = generic_simplify_90 (loc, type, _p0, _p1, captures);
4507 0 : if (res) return res;
4508 : }
4509 : }
4510 : }
4511 : }
4512 0 : if ((_q80 == _q21 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q21, 0) && types_match (_q80, _q21)))
4513 : {
4514 0 : if ((_q81 == _q20 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q20, 0) && types_match (_q81, _q20)))
4515 : {
4516 0 : if (integer_onep (_q61))
4517 : {
4518 0 : {
4519 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q50 };
4520 0 : tree res = generic_simplify_90 (loc, type, _p0, _p1, captures);
4521 0 : if (res) return res;
4522 : }
4523 : }
4524 : }
4525 : }
4526 : break;
4527 : }
4528 : default:;
4529 : }
4530 : }
4531 : }
4532 0 : break;
4533 : }
4534 : default:;
4535 : }
4536 : }
4537 : }
4538 1168 : break;
4539 : }
4540 3257 : case BIT_NOT_EXPR:
4541 3257 : {
4542 3257 : tree _q20 = TREE_OPERAND (_p0, 0);
4543 3257 : switch (TREE_CODE (_p1))
4544 : {
4545 22 : case BIT_NOT_EXPR:
4546 22 : {
4547 22 : tree _q40 = TREE_OPERAND (_p1, 0);
4548 22 : {
4549 22 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q40 };
4550 22 : if (!TYPE_OVERFLOW_SANITIZED (type)
4551 : )
4552 : {
4553 9 : {
4554 9 : tree utype = unsigned_type_for (type);
4555 9 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1279;
4556 9 : {
4557 9 : tree res_op0;
4558 9 : {
4559 9 : tree _o1[2], _r1;
4560 9 : {
4561 9 : tree _o2[1], _r2;
4562 9 : _o2[0] = captures[1];
4563 9 : if (TREE_TYPE (_o2[0]) != utype)
4564 : {
4565 9 : _r2 = fold_build1_loc (loc, NOP_EXPR, utype, _o2[0]);
4566 : }
4567 : else
4568 : _r2 = _o2[0];
4569 9 : _o1[0] = _r2;
4570 : }
4571 9 : {
4572 9 : tree _o2[1], _r2;
4573 9 : _o2[0] = captures[0];
4574 9 : if (TREE_TYPE (_o2[0]) != utype)
4575 : {
4576 9 : _r2 = fold_build1_loc (loc, NOP_EXPR, utype, _o2[0]);
4577 : }
4578 : else
4579 : _r2 = _o2[0];
4580 9 : _o1[1] = _r2;
4581 : }
4582 9 : _r1 = fold_build2_loc (loc, MINUS_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
4583 9 : res_op0 = _r1;
4584 : }
4585 9 : tree _r;
4586 9 : _r = fold_build1_loc (loc, NOP_EXPR, type, res_op0);
4587 9 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 919, __FILE__, __LINE__, true);
4588 9 : return _r;
4589 : }
4590 0 : next_after_fail1279:;
4591 : }
4592 : }
4593 : }
4594 13 : break;
4595 : }
4596 : default:;
4597 : }
4598 : break;
4599 : }
4600 2342627 : case PLUS_EXPR:
4601 2342627 : {
4602 2342627 : tree _q20 = TREE_OPERAND (_p0, 0);
4603 2342627 : tree _q21 = TREE_OPERAND (_p0, 1);
4604 2342627 : switch (TREE_CODE (_p1))
4605 : {
4606 14 : case BIT_IOR_EXPR:
4607 14 : {
4608 14 : tree _q50 = TREE_OPERAND (_p1, 0);
4609 14 : tree _q51 = TREE_OPERAND (_p1, 1);
4610 14 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
4611 : {
4612 13 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
4613 : {
4614 13 : {
4615 13 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
4616 13 : if (!TYPE_OVERFLOW_SANITIZED (type) && !TYPE_OVERFLOW_TRAPS (type)
4617 13 : && !TYPE_SATURATING (type)
4618 : )
4619 : {
4620 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1280;
4621 0 : {
4622 0 : tree res_op0;
4623 0 : res_op0 = captures[0];
4624 0 : tree res_op1;
4625 0 : res_op1 = captures[1];
4626 0 : tree _r;
4627 0 : _r = fold_build2_loc (loc, BIT_AND_EXPR, type, res_op0, res_op1);
4628 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 920, __FILE__, __LINE__, true);
4629 0 : return _r;
4630 : }
4631 0 : next_after_fail1280:;
4632 : }
4633 : }
4634 : }
4635 : }
4636 : break;
4637 : }
4638 82 : case BIT_AND_EXPR:
4639 82 : {
4640 82 : tree _q50 = TREE_OPERAND (_p1, 0);
4641 82 : tree _q51 = TREE_OPERAND (_p1, 1);
4642 82 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
4643 : {
4644 25 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
4645 : {
4646 13 : {
4647 13 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
4648 13 : if (!TYPE_OVERFLOW_SANITIZED (type) && !TYPE_OVERFLOW_TRAPS (type)
4649 13 : && !TYPE_SATURATING (type)
4650 : )
4651 : {
4652 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1281;
4653 0 : {
4654 0 : tree res_op0;
4655 0 : res_op0 = captures[0];
4656 0 : tree res_op1;
4657 0 : res_op1 = captures[1];
4658 0 : tree _r;
4659 0 : _r = fold_build2_loc (loc, BIT_IOR_EXPR, type, res_op0, res_op1);
4660 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 921, __FILE__, __LINE__, true);
4661 0 : return _r;
4662 : }
4663 0 : next_after_fail1281:;
4664 : }
4665 : }
4666 : }
4667 : }
4668 : break;
4669 : }
4670 2342627 : default:;
4671 : }
4672 2342627 : switch (TREE_CODE (_q20))
4673 : {
4674 593 : case BIT_AND_EXPR:
4675 593 : {
4676 593 : tree _q30 = TREE_OPERAND (_q20, 0);
4677 593 : tree _q31 = TREE_OPERAND (_q20, 1);
4678 593 : if (integer_all_onesp (_q21))
4679 : {
4680 1 : switch (TREE_CODE (_p1))
4681 : {
4682 1 : case BIT_IOR_EXPR:
4683 1 : {
4684 1 : tree _q70 = TREE_OPERAND (_p1, 0);
4685 1 : tree _q71 = TREE_OPERAND (_p1, 1);
4686 1 : if ((_q70 == _q30 && ! TREE_SIDE_EFFECTS (_q70)) || (operand_equal_p (_q70, _q30, 0) && types_match (_q70, _q30)))
4687 : {
4688 1 : if ((_q71 == _q31 && ! TREE_SIDE_EFFECTS (_q71)) || (operand_equal_p (_q71, _q31, 0) && types_match (_q71, _q31)))
4689 : {
4690 1 : {
4691 1 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q30, _q31 };
4692 1 : tree res = generic_simplify_91 (loc, type, _p0, _p1, captures);
4693 1 : if (res) return res;
4694 : }
4695 : }
4696 : }
4697 0 : if ((_q70 == _q31 && ! TREE_SIDE_EFFECTS (_q70)) || (operand_equal_p (_q70, _q31, 0) && types_match (_q70, _q31)))
4698 : {
4699 0 : if ((_q71 == _q30 && ! TREE_SIDE_EFFECTS (_q71)) || (operand_equal_p (_q71, _q30, 0) && types_match (_q71, _q30)))
4700 : {
4701 0 : {
4702 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q31, _q30 };
4703 0 : tree res = generic_simplify_91 (loc, type, _p0, _p1, captures);
4704 0 : if (res) return res;
4705 : }
4706 : }
4707 : }
4708 : break;
4709 : }
4710 0 : default:;
4711 : }
4712 0 : {
4713 0 : tree _p1_pops[1];
4714 0 : if (tree_nop_convert (_p1, _p1_pops))
4715 : {
4716 0 : tree _q70 = _p1_pops[0];
4717 0 : switch (TREE_CODE (_q70))
4718 : {
4719 0 : case BIT_IOR_EXPR:
4720 0 : {
4721 0 : tree _q80 = TREE_OPERAND (_q70, 0);
4722 0 : tree _q81 = TREE_OPERAND (_q70, 1);
4723 0 : if ((_q80 == _q30 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q30, 0) && types_match (_q80, _q30)))
4724 : {
4725 0 : if ((_q81 == _q31 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q31, 0) && types_match (_q81, _q31)))
4726 : {
4727 0 : {
4728 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q30, _q31 };
4729 0 : tree res = generic_simplify_91 (loc, type, _p0, _p1, captures);
4730 0 : if (res) return res;
4731 : }
4732 : }
4733 : }
4734 0 : if ((_q80 == _q31 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q31, 0) && types_match (_q80, _q31)))
4735 : {
4736 0 : if ((_q81 == _q30 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q30, 0) && types_match (_q81, _q30)))
4737 : {
4738 0 : {
4739 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q31, _q30 };
4740 0 : tree res = generic_simplify_91 (loc, type, _p0, _p1, captures);
4741 0 : if (res) return res;
4742 : }
4743 : }
4744 : }
4745 : break;
4746 : }
4747 : default:;
4748 : }
4749 : }
4750 : }
4751 : }
4752 : break;
4753 : }
4754 2342626 : default:;
4755 : }
4756 2342626 : {
4757 2342626 : tree _q20_pops[1];
4758 2342626 : if (tree_nop_convert (_q20, _q20_pops))
4759 : {
4760 548125 : tree _q30 = _q20_pops[0];
4761 548125 : switch (TREE_CODE (_q30))
4762 : {
4763 0 : case BIT_AND_EXPR:
4764 0 : {
4765 0 : tree _q40 = TREE_OPERAND (_q30, 0);
4766 0 : tree _q41 = TREE_OPERAND (_q30, 1);
4767 0 : if (integer_all_onesp (_q21))
4768 : {
4769 0 : switch (TREE_CODE (_p1))
4770 : {
4771 0 : case BIT_IOR_EXPR:
4772 0 : {
4773 0 : tree _q80 = TREE_OPERAND (_p1, 0);
4774 0 : tree _q81 = TREE_OPERAND (_p1, 1);
4775 0 : if ((_q80 == _q40 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q40, 0) && types_match (_q80, _q40)))
4776 : {
4777 0 : if ((_q81 == _q41 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q41, 0) && types_match (_q81, _q41)))
4778 : {
4779 0 : {
4780 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q40, _q41 };
4781 0 : tree res = generic_simplify_91 (loc, type, _p0, _p1, captures);
4782 0 : if (res) return res;
4783 : }
4784 : }
4785 : }
4786 0 : if ((_q80 == _q41 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q41, 0) && types_match (_q80, _q41)))
4787 : {
4788 0 : if ((_q81 == _q40 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q40, 0) && types_match (_q81, _q40)))
4789 : {
4790 0 : {
4791 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q41, _q40 };
4792 0 : tree res = generic_simplify_91 (loc, type, _p0, _p1, captures);
4793 0 : if (res) return res;
4794 : }
4795 : }
4796 : }
4797 : break;
4798 : }
4799 0 : default:;
4800 : }
4801 0 : {
4802 0 : tree _p1_pops[1];
4803 0 : if (tree_nop_convert (_p1, _p1_pops))
4804 : {
4805 0 : tree _q80 = _p1_pops[0];
4806 0 : switch (TREE_CODE (_q80))
4807 : {
4808 0 : case BIT_IOR_EXPR:
4809 0 : {
4810 0 : tree _q90 = TREE_OPERAND (_q80, 0);
4811 0 : tree _q91 = TREE_OPERAND (_q80, 1);
4812 0 : if ((_q90 == _q40 && ! TREE_SIDE_EFFECTS (_q90)) || (operand_equal_p (_q90, _q40, 0) && types_match (_q90, _q40)))
4813 : {
4814 0 : if ((_q91 == _q41 && ! TREE_SIDE_EFFECTS (_q91)) || (operand_equal_p (_q91, _q41, 0) && types_match (_q91, _q41)))
4815 : {
4816 0 : {
4817 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q40, _q41 };
4818 0 : tree res = generic_simplify_91 (loc, type, _p0, _p1, captures);
4819 0 : if (res) return res;
4820 : }
4821 : }
4822 : }
4823 0 : if ((_q90 == _q41 && ! TREE_SIDE_EFFECTS (_q90)) || (operand_equal_p (_q90, _q41, 0) && types_match (_q90, _q41)))
4824 : {
4825 0 : if ((_q91 == _q40 && ! TREE_SIDE_EFFECTS (_q91)) || (operand_equal_p (_q91, _q40, 0) && types_match (_q91, _q40)))
4826 : {
4827 0 : {
4828 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q41, _q40 };
4829 0 : tree res = generic_simplify_91 (loc, type, _p0, _p1, captures);
4830 0 : if (res) return res;
4831 : }
4832 : }
4833 : }
4834 : break;
4835 : }
4836 : default:;
4837 : }
4838 : }
4839 : }
4840 : }
4841 : break;
4842 : }
4843 : default:;
4844 : }
4845 : }
4846 : }
4847 2342626 : break;
4848 : }
4849 79 : case BIT_IOR_EXPR:
4850 79 : {
4851 79 : tree _q20 = TREE_OPERAND (_p0, 0);
4852 79 : tree _q21 = TREE_OPERAND (_p0, 1);
4853 79 : if ((_p1 == _q21 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q21, 0) && types_match (_p1, _q21)))
4854 : {
4855 5 : {
4856 5 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
4857 5 : tree res = generic_simplify_92 (loc, type, _p0, _p1, captures);
4858 5 : if (res) return res;
4859 : }
4860 : }
4861 74 : if ((_p1 == _q20 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q20, 0) && types_match (_p1, _q20)))
4862 : {
4863 0 : {
4864 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q21, _q20 };
4865 0 : tree res = generic_simplify_92 (loc, type, _p0, _p1, captures);
4866 0 : if (res) return res;
4867 : }
4868 : }
4869 74 : switch (TREE_CODE (_p1))
4870 : {
4871 0 : case BIT_XOR_EXPR:
4872 0 : {
4873 0 : tree _q50 = TREE_OPERAND (_p1, 0);
4874 0 : tree _q51 = TREE_OPERAND (_p1, 1);
4875 0 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
4876 : {
4877 0 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
4878 : {
4879 0 : {
4880 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
4881 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1282;
4882 0 : {
4883 0 : tree res_op0;
4884 0 : res_op0 = captures[0];
4885 0 : tree res_op1;
4886 0 : res_op1 = captures[1];
4887 0 : tree _r;
4888 0 : _r = fold_build2_loc (loc, BIT_AND_EXPR, type, res_op0, res_op1);
4889 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 922, __FILE__, __LINE__, true);
4890 0 : return _r;
4891 : }
4892 0 : next_after_fail1282:;
4893 : }
4894 : }
4895 : }
4896 : break;
4897 : }
4898 0 : case BIT_AND_EXPR:
4899 0 : {
4900 0 : tree _q50 = TREE_OPERAND (_p1, 0);
4901 0 : tree _q51 = TREE_OPERAND (_p1, 1);
4902 0 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
4903 : {
4904 0 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
4905 : {
4906 0 : {
4907 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
4908 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1283;
4909 0 : {
4910 0 : tree res_op0;
4911 0 : res_op0 = captures[0];
4912 0 : tree res_op1;
4913 0 : res_op1 = captures[1];
4914 0 : tree _r;
4915 0 : _r = fold_build2_loc (loc, BIT_XOR_EXPR, type, res_op0, res_op1);
4916 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 923, __FILE__, __LINE__, true);
4917 0 : return _r;
4918 : }
4919 0 : next_after_fail1283:;
4920 : }
4921 : }
4922 : }
4923 : break;
4924 : }
4925 : default:;
4926 : }
4927 : break;
4928 : }
4929 31242786 : default:;
4930 : }
4931 31242786 : {
4932 31242786 : tree _p0_pops[1];
4933 31242786 : if (tree_nop_convert (_p0, _p0_pops))
4934 : {
4935 7526013 : tree _q20 = _p0_pops[0];
4936 7526013 : switch (TREE_CODE (_q20))
4937 : {
4938 1039617 : case PLUS_EXPR:
4939 1039617 : {
4940 1039617 : tree _q30 = TREE_OPERAND (_q20, 0);
4941 1039617 : tree _q31 = TREE_OPERAND (_q20, 1);
4942 1039617 : switch (TREE_CODE (_q30))
4943 : {
4944 8 : case BIT_AND_EXPR:
4945 8 : {
4946 8 : tree _q40 = TREE_OPERAND (_q30, 0);
4947 8 : tree _q41 = TREE_OPERAND (_q30, 1);
4948 8 : if (integer_all_onesp (_q31))
4949 : {
4950 0 : switch (TREE_CODE (_p1))
4951 : {
4952 0 : case BIT_IOR_EXPR:
4953 0 : {
4954 0 : tree _q80 = TREE_OPERAND (_p1, 0);
4955 0 : tree _q81 = TREE_OPERAND (_p1, 1);
4956 0 : if ((_q80 == _q40 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q40, 0) && types_match (_q80, _q40)))
4957 : {
4958 0 : if ((_q81 == _q41 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q41, 0) && types_match (_q81, _q41)))
4959 : {
4960 0 : {
4961 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q40, _q41 };
4962 0 : tree res = generic_simplify_91 (loc, type, _p0, _p1, captures);
4963 0 : if (res) return res;
4964 : }
4965 : }
4966 : }
4967 0 : if ((_q80 == _q41 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q41, 0) && types_match (_q80, _q41)))
4968 : {
4969 0 : if ((_q81 == _q40 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q40, 0) && types_match (_q81, _q40)))
4970 : {
4971 0 : {
4972 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q41, _q40 };
4973 0 : tree res = generic_simplify_91 (loc, type, _p0, _p1, captures);
4974 0 : if (res) return res;
4975 : }
4976 : }
4977 : }
4978 : break;
4979 : }
4980 0 : default:;
4981 : }
4982 0 : {
4983 0 : tree _p1_pops[1];
4984 0 : if (tree_nop_convert (_p1, _p1_pops))
4985 : {
4986 0 : tree _q80 = _p1_pops[0];
4987 0 : switch (TREE_CODE (_q80))
4988 : {
4989 0 : case BIT_IOR_EXPR:
4990 0 : {
4991 0 : tree _q90 = TREE_OPERAND (_q80, 0);
4992 0 : tree _q91 = TREE_OPERAND (_q80, 1);
4993 0 : if ((_q90 == _q40 && ! TREE_SIDE_EFFECTS (_q90)) || (operand_equal_p (_q90, _q40, 0) && types_match (_q90, _q40)))
4994 : {
4995 0 : if ((_q91 == _q41 && ! TREE_SIDE_EFFECTS (_q91)) || (operand_equal_p (_q91, _q41, 0) && types_match (_q91, _q41)))
4996 : {
4997 0 : {
4998 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q40, _q41 };
4999 0 : tree res = generic_simplify_91 (loc, type, _p0, _p1, captures);
5000 0 : if (res) return res;
5001 : }
5002 : }
5003 : }
5004 0 : if ((_q90 == _q41 && ! TREE_SIDE_EFFECTS (_q90)) || (operand_equal_p (_q90, _q41, 0) && types_match (_q90, _q41)))
5005 : {
5006 0 : if ((_q91 == _q40 && ! TREE_SIDE_EFFECTS (_q91)) || (operand_equal_p (_q91, _q40, 0) && types_match (_q91, _q40)))
5007 : {
5008 0 : {
5009 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q41, _q40 };
5010 0 : tree res = generic_simplify_91 (loc, type, _p0, _p1, captures);
5011 0 : if (res) return res;
5012 : }
5013 : }
5014 : }
5015 : break;
5016 : }
5017 : default:;
5018 : }
5019 : }
5020 : }
5021 : }
5022 : break;
5023 : }
5024 1039617 : default:;
5025 : }
5026 1039617 : {
5027 1039617 : tree _q30_pops[1];
5028 1039617 : if (tree_nop_convert (_q30, _q30_pops))
5029 : {
5030 41553 : tree _q40 = _q30_pops[0];
5031 41553 : switch (TREE_CODE (_q40))
5032 : {
5033 0 : case BIT_AND_EXPR:
5034 0 : {
5035 0 : tree _q50 = TREE_OPERAND (_q40, 0);
5036 0 : tree _q51 = TREE_OPERAND (_q40, 1);
5037 0 : if (integer_all_onesp (_q31))
5038 : {
5039 0 : switch (TREE_CODE (_p1))
5040 : {
5041 0 : case BIT_IOR_EXPR:
5042 0 : {
5043 0 : tree _q90 = TREE_OPERAND (_p1, 0);
5044 0 : tree _q91 = TREE_OPERAND (_p1, 1);
5045 0 : if ((_q90 == _q50 && ! TREE_SIDE_EFFECTS (_q90)) || (operand_equal_p (_q90, _q50, 0) && types_match (_q90, _q50)))
5046 : {
5047 0 : if ((_q91 == _q51 && ! TREE_SIDE_EFFECTS (_q91)) || (operand_equal_p (_q91, _q51, 0) && types_match (_q91, _q51)))
5048 : {
5049 0 : {
5050 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q50, _q51 };
5051 0 : tree res = generic_simplify_91 (loc, type, _p0, _p1, captures);
5052 0 : if (res) return res;
5053 : }
5054 : }
5055 : }
5056 0 : if ((_q90 == _q51 && ! TREE_SIDE_EFFECTS (_q90)) || (operand_equal_p (_q90, _q51, 0) && types_match (_q90, _q51)))
5057 : {
5058 0 : if ((_q91 == _q50 && ! TREE_SIDE_EFFECTS (_q91)) || (operand_equal_p (_q91, _q50, 0) && types_match (_q91, _q50)))
5059 : {
5060 0 : {
5061 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q51, _q50 };
5062 0 : tree res = generic_simplify_91 (loc, type, _p0, _p1, captures);
5063 0 : if (res) return res;
5064 : }
5065 : }
5066 : }
5067 : break;
5068 : }
5069 0 : default:;
5070 : }
5071 0 : {
5072 0 : tree _p1_pops[1];
5073 0 : if (tree_nop_convert (_p1, _p1_pops))
5074 : {
5075 0 : tree _q90 = _p1_pops[0];
5076 0 : switch (TREE_CODE (_q90))
5077 : {
5078 0 : case BIT_IOR_EXPR:
5079 0 : {
5080 0 : tree _q100 = TREE_OPERAND (_q90, 0);
5081 0 : tree _q101 = TREE_OPERAND (_q90, 1);
5082 0 : if ((_q100 == _q50 && ! TREE_SIDE_EFFECTS (_q100)) || (operand_equal_p (_q100, _q50, 0) && types_match (_q100, _q50)))
5083 : {
5084 0 : if ((_q101 == _q51 && ! TREE_SIDE_EFFECTS (_q101)) || (operand_equal_p (_q101, _q51, 0) && types_match (_q101, _q51)))
5085 : {
5086 0 : {
5087 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q50, _q51 };
5088 0 : tree res = generic_simplify_91 (loc, type, _p0, _p1, captures);
5089 0 : if (res) return res;
5090 : }
5091 : }
5092 : }
5093 0 : if ((_q100 == _q51 && ! TREE_SIDE_EFFECTS (_q100)) || (operand_equal_p (_q100, _q51, 0) && types_match (_q100, _q51)))
5094 : {
5095 0 : if ((_q101 == _q50 && ! TREE_SIDE_EFFECTS (_q101)) || (operand_equal_p (_q101, _q50, 0) && types_match (_q101, _q50)))
5096 : {
5097 0 : {
5098 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q51, _q50 };
5099 0 : tree res = generic_simplify_91 (loc, type, _p0, _p1, captures);
5100 0 : if (res) return res;
5101 : }
5102 : }
5103 : }
5104 : break;
5105 : }
5106 : default:;
5107 : }
5108 : }
5109 : }
5110 : }
5111 : break;
5112 : }
5113 : default:;
5114 : }
5115 : }
5116 : }
5117 1039617 : break;
5118 : }
5119 14 : case BIT_AND_EXPR:
5120 14 : {
5121 14 : tree _q30 = TREE_OPERAND (_q20, 0);
5122 14 : tree _q31 = TREE_OPERAND (_q20, 1);
5123 14 : switch (TREE_CODE (_p1))
5124 : {
5125 0 : case PLUS_EXPR:
5126 0 : {
5127 0 : tree _q60 = TREE_OPERAND (_p1, 0);
5128 0 : tree _q61 = TREE_OPERAND (_p1, 1);
5129 0 : switch (TREE_CODE (_q60))
5130 : {
5131 0 : case BIT_IOR_EXPR:
5132 0 : {
5133 0 : tree _q70 = TREE_OPERAND (_q60, 0);
5134 0 : tree _q71 = TREE_OPERAND (_q60, 1);
5135 0 : if ((_q70 == _q30 && ! TREE_SIDE_EFFECTS (_q70)) || (operand_equal_p (_q70, _q30, 0) && types_match (_q70, _q30)))
5136 : {
5137 0 : if ((_q71 == _q31 && ! TREE_SIDE_EFFECTS (_q71)) || (operand_equal_p (_q71, _q31, 0) && types_match (_q71, _q31)))
5138 : {
5139 0 : if (integer_onep (_q61))
5140 : {
5141 0 : {
5142 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _q31, _p1 };
5143 0 : tree res = generic_simplify_90 (loc, type, _p0, _p1, captures);
5144 0 : if (res) return res;
5145 : }
5146 : }
5147 : }
5148 : }
5149 0 : if ((_q70 == _q31 && ! TREE_SIDE_EFFECTS (_q70)) || (operand_equal_p (_q70, _q31, 0) && types_match (_q70, _q31)))
5150 : {
5151 0 : if ((_q71 == _q30 && ! TREE_SIDE_EFFECTS (_q71)) || (operand_equal_p (_q71, _q30, 0) && types_match (_q71, _q30)))
5152 : {
5153 0 : if (integer_onep (_q61))
5154 : {
5155 0 : {
5156 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _q31, _p1 };
5157 0 : tree res = generic_simplify_90 (loc, type, _p0, _p1, captures);
5158 0 : if (res) return res;
5159 : }
5160 : }
5161 : }
5162 : }
5163 : break;
5164 : }
5165 0 : default:;
5166 : }
5167 0 : {
5168 0 : tree _q60_pops[1];
5169 0 : if (tree_nop_convert (_q60, _q60_pops))
5170 : {
5171 0 : tree _q70 = _q60_pops[0];
5172 0 : switch (TREE_CODE (_q70))
5173 : {
5174 0 : case BIT_IOR_EXPR:
5175 0 : {
5176 0 : tree _q80 = TREE_OPERAND (_q70, 0);
5177 0 : tree _q81 = TREE_OPERAND (_q70, 1);
5178 0 : if ((_q80 == _q30 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q30, 0) && types_match (_q80, _q30)))
5179 : {
5180 0 : if ((_q81 == _q31 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q31, 0) && types_match (_q81, _q31)))
5181 : {
5182 0 : if (integer_onep (_q61))
5183 : {
5184 0 : {
5185 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _q31, _p1 };
5186 0 : tree res = generic_simplify_90 (loc, type, _p0, _p1, captures);
5187 0 : if (res) return res;
5188 : }
5189 : }
5190 : }
5191 : }
5192 0 : if ((_q80 == _q31 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q31, 0) && types_match (_q80, _q31)))
5193 : {
5194 0 : if ((_q81 == _q30 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q30, 0) && types_match (_q81, _q30)))
5195 : {
5196 0 : if (integer_onep (_q61))
5197 : {
5198 0 : {
5199 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _q31, _p1 };
5200 0 : tree res = generic_simplify_90 (loc, type, _p0, _p1, captures);
5201 0 : if (res) return res;
5202 : }
5203 : }
5204 : }
5205 : }
5206 : break;
5207 : }
5208 : default:;
5209 : }
5210 : }
5211 : }
5212 0 : break;
5213 : }
5214 14 : default:;
5215 : }
5216 14 : {
5217 14 : tree _p1_pops[1];
5218 14 : if (tree_nop_convert (_p1, _p1_pops))
5219 : {
5220 14 : tree _q60 = _p1_pops[0];
5221 14 : switch (TREE_CODE (_q60))
5222 : {
5223 0 : case PLUS_EXPR:
5224 0 : {
5225 0 : tree _q70 = TREE_OPERAND (_q60, 0);
5226 0 : tree _q71 = TREE_OPERAND (_q60, 1);
5227 0 : switch (TREE_CODE (_q70))
5228 : {
5229 0 : case BIT_IOR_EXPR:
5230 0 : {
5231 0 : tree _q80 = TREE_OPERAND (_q70, 0);
5232 0 : tree _q81 = TREE_OPERAND (_q70, 1);
5233 0 : if ((_q80 == _q30 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q30, 0) && types_match (_q80, _q30)))
5234 : {
5235 0 : if ((_q81 == _q31 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q31, 0) && types_match (_q81, _q31)))
5236 : {
5237 0 : if (integer_onep (_q71))
5238 : {
5239 0 : {
5240 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _q31, _q60 };
5241 0 : tree res = generic_simplify_90 (loc, type, _p0, _p1, captures);
5242 0 : if (res) return res;
5243 : }
5244 : }
5245 : }
5246 : }
5247 0 : if ((_q80 == _q31 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q31, 0) && types_match (_q80, _q31)))
5248 : {
5249 0 : if ((_q81 == _q30 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q30, 0) && types_match (_q81, _q30)))
5250 : {
5251 0 : if (integer_onep (_q71))
5252 : {
5253 0 : {
5254 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _q31, _q60 };
5255 0 : tree res = generic_simplify_90 (loc, type, _p0, _p1, captures);
5256 0 : if (res) return res;
5257 : }
5258 : }
5259 : }
5260 : }
5261 : break;
5262 : }
5263 0 : default:;
5264 : }
5265 0 : {
5266 0 : tree _q70_pops[1];
5267 0 : if (tree_nop_convert (_q70, _q70_pops))
5268 : {
5269 0 : tree _q80 = _q70_pops[0];
5270 0 : switch (TREE_CODE (_q80))
5271 : {
5272 0 : case BIT_IOR_EXPR:
5273 0 : {
5274 0 : tree _q90 = TREE_OPERAND (_q80, 0);
5275 0 : tree _q91 = TREE_OPERAND (_q80, 1);
5276 0 : if ((_q90 == _q30 && ! TREE_SIDE_EFFECTS (_q90)) || (operand_equal_p (_q90, _q30, 0) && types_match (_q90, _q30)))
5277 : {
5278 0 : if ((_q91 == _q31 && ! TREE_SIDE_EFFECTS (_q91)) || (operand_equal_p (_q91, _q31, 0) && types_match (_q91, _q31)))
5279 : {
5280 0 : if (integer_onep (_q71))
5281 : {
5282 0 : {
5283 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _q31, _q60 };
5284 0 : tree res = generic_simplify_90 (loc, type, _p0, _p1, captures);
5285 0 : if (res) return res;
5286 : }
5287 : }
5288 : }
5289 : }
5290 0 : if ((_q90 == _q31 && ! TREE_SIDE_EFFECTS (_q90)) || (operand_equal_p (_q90, _q31, 0) && types_match (_q90, _q31)))
5291 : {
5292 0 : if ((_q91 == _q30 && ! TREE_SIDE_EFFECTS (_q91)) || (operand_equal_p (_q91, _q30, 0) && types_match (_q91, _q30)))
5293 : {
5294 0 : if (integer_onep (_q71))
5295 : {
5296 0 : {
5297 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _q31, _q60 };
5298 0 : tree res = generic_simplify_90 (loc, type, _p0, _p1, captures);
5299 0 : if (res) return res;
5300 : }
5301 : }
5302 : }
5303 : }
5304 : break;
5305 : }
5306 : default:;
5307 : }
5308 : }
5309 : }
5310 0 : break;
5311 : }
5312 : default:;
5313 : }
5314 : }
5315 : }
5316 14 : break;
5317 : }
5318 : default:;
5319 : }
5320 : }
5321 : }
5322 31242786 : if (tree_negate_expr_p (_p1))
5323 : {
5324 7776614 : {
5325 7776614 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
5326 7776614 : if (!FIXED_POINT_TYPE_P (type)
5327 : )
5328 : {
5329 7776614 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1284;
5330 7776614 : {
5331 7776614 : tree res_op0;
5332 7776614 : res_op0 = captures[0];
5333 7776614 : tree res_op1;
5334 7776614 : {
5335 7776614 : tree _o1[1], _r1;
5336 7776614 : _o1[0] = captures[1];
5337 7776614 : _r1 = fold_build1_loc (loc, NEGATE_EXPR, TREE_TYPE (_o1[0]), _o1[0]);
5338 7776614 : res_op1 = _r1;
5339 : }
5340 7776614 : tree _r;
5341 7776614 : _r = fold_build2_loc (loc, PLUS_EXPR, type, res_op0, res_op1);
5342 7776614 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 924, __FILE__, __LINE__, true);
5343 7776614 : return _r;
5344 : }
5345 0 : next_after_fail1284:;
5346 : }
5347 : }
5348 : }
5349 23466172 : switch (TREE_CODE (_p0))
5350 : {
5351 5194290 : CASE_CONVERT:
5352 5194290 : {
5353 5194290 : tree _q20 = TREE_OPERAND (_p0, 0);
5354 5194290 : switch (TREE_CODE (_p1))
5355 : {
5356 4330381 : CASE_CONVERT:
5357 4330381 : {
5358 4330381 : tree _q40 = TREE_OPERAND (_p1, 0);
5359 4330381 : switch (TREE_CODE (_q40))
5360 : {
5361 15 : case BIT_AND_EXPR:
5362 15 : {
5363 15 : tree _q50 = TREE_OPERAND (_q40, 0);
5364 15 : tree _q51 = TREE_OPERAND (_q40, 1);
5365 15 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || operand_equal_p (_q50, _q20, 0))
5366 : {
5367 0 : {
5368 0 : tree captures[5] ATTRIBUTE_UNUSED = { _q50, _p1, _q40, _q51, _q20 };
5369 0 : tree res = generic_simplify_93 (loc, type, _p0, _p1, captures);
5370 0 : if (res) return res;
5371 : }
5372 : }
5373 15 : if ((_q51 == _q20 && ! TREE_SIDE_EFFECTS (_q51)) || operand_equal_p (_q51, _q20, 0))
5374 : {
5375 1 : {
5376 1 : tree captures[5] ATTRIBUTE_UNUSED = { _q51, _p1, _q40, _q50, _q20 };
5377 1 : tree res = generic_simplify_93 (loc, type, _p0, _p1, captures);
5378 1 : if (res) return res;
5379 : }
5380 : }
5381 : break;
5382 : }
5383 : default:;
5384 : }
5385 : break;
5386 : }
5387 5349 : case BIT_AND_EXPR:
5388 5349 : {
5389 5349 : tree _q40 = TREE_OPERAND (_p1, 0);
5390 5349 : tree _q41 = TREE_OPERAND (_p1, 1);
5391 5349 : if ((_q40 == _q20 && ! TREE_SIDE_EFFECTS (_q40)) || operand_equal_p (_q40, _q20, 0))
5392 : {
5393 0 : {
5394 0 : tree captures[5] ATTRIBUTE_UNUSED = { _q40, _p1, _p1, _q41, _q20 };
5395 0 : tree res = generic_simplify_94 (loc, type, _p0, _p1, captures);
5396 0 : if (res) return res;
5397 : }
5398 : }
5399 5349 : if ((_q41 == _q20 && ! TREE_SIDE_EFFECTS (_q41)) || operand_equal_p (_q41, _q20, 0))
5400 : {
5401 21 : {
5402 21 : tree captures[5] ATTRIBUTE_UNUSED = { _q41, _p1, _p1, _q40, _q20 };
5403 21 : tree res = generic_simplify_94 (loc, type, _p0, _p1, captures);
5404 21 : if (res) return res;
5405 : }
5406 : }
5407 : break;
5408 : }
5409 5194268 : default:;
5410 : }
5411 5194268 : switch (TREE_CODE (_q20))
5412 : {
5413 118064 : case ADDR_EXPR:
5414 118064 : {
5415 118064 : switch (TREE_CODE (_p1))
5416 : {
5417 109563 : CASE_CONVERT:
5418 109563 : {
5419 109563 : tree _q40 = TREE_OPERAND (_p1, 0);
5420 109563 : switch (TREE_CODE (_q40))
5421 : {
5422 32190 : case POINTER_PLUS_EXPR:
5423 32190 : {
5424 32190 : tree _q50 = TREE_OPERAND (_q40, 0);
5425 32190 : tree _q51 = TREE_OPERAND (_q40, 1);
5426 32190 : {
5427 32190 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q50, _q51 };
5428 32190 : if (tree_nop_conversion_p (type, TREE_TYPE (captures[0]))
5429 : )
5430 : {
5431 32190 : {
5432 32190 : poly_int64 diff;
5433 32190 : if (ptr_difference_const (captures[0], captures[1], &diff)
5434 : )
5435 : {
5436 16537 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1285;
5437 16537 : {
5438 16537 : tree res_op0;
5439 16537 : res_op0 = build_int_cst_type (type, diff);
5440 16537 : tree res_op1;
5441 16537 : {
5442 16537 : tree _o1[1], _r1;
5443 16537 : _o1[0] = captures[2];
5444 16537 : if (TREE_TYPE (_o1[0]) != type)
5445 : {
5446 16537 : _r1 = fold_build1_loc (loc, NOP_EXPR, type, _o1[0]);
5447 : }
5448 : else
5449 : _r1 = _o1[0];
5450 16537 : res_op1 = _r1;
5451 : }
5452 16537 : tree _r;
5453 16537 : _r = fold_build2_loc (loc, MINUS_EXPR, type, res_op0, res_op1);
5454 16537 : if (TREE_SIDE_EFFECTS (captures[0]))
5455 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[0]), _r);
5456 16537 : if (TREE_SIDE_EFFECTS (captures[1]))
5457 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
5458 16537 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 925, __FILE__, __LINE__, true);
5459 16537 : return _r;
5460 : }
5461 0 : next_after_fail1285:;
5462 : }
5463 : }
5464 : }
5465 : }
5466 15653 : break;
5467 : }
5468 93026 : default:;
5469 : }
5470 93026 : {
5471 93026 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q40 };
5472 93026 : if (tree_nop_conversion_p (type, TREE_TYPE (captures[0]))
5473 : )
5474 : {
5475 93026 : {
5476 93026 : poly_int64 diff;
5477 93026 : if (ptr_difference_const (captures[0], captures[1], &diff)
5478 : )
5479 : {
5480 57056 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1286;
5481 57056 : {
5482 57056 : tree _r;
5483 57056 : _r = build_int_cst_type (type, diff);
5484 57056 : if (TREE_SIDE_EFFECTS (captures[0]))
5485 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[0]), _r);
5486 57056 : if (TREE_SIDE_EFFECTS (captures[1]))
5487 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
5488 57056 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 926, __FILE__, __LINE__, true);
5489 57056 : return _r;
5490 : }
5491 0 : next_after_fail1286:;
5492 : }
5493 : }
5494 : }
5495 : }
5496 35970 : break;
5497 : }
5498 : default:;
5499 : }
5500 : break;
5501 : }
5502 107761 : case POINTER_PLUS_EXPR:
5503 107761 : {
5504 107761 : tree _q30 = TREE_OPERAND (_q20, 0);
5505 107761 : tree _q31 = TREE_OPERAND (_q20, 1);
5506 107761 : switch (TREE_CODE (_p1))
5507 : {
5508 106687 : CASE_CONVERT:
5509 106687 : {
5510 106687 : tree _q60 = TREE_OPERAND (_p1, 0);
5511 106687 : switch (TREE_CODE (_q60))
5512 : {
5513 5783 : case ADDR_EXPR:
5514 5783 : {
5515 5783 : {
5516 5783 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _q31, _q60 };
5517 5783 : if (tree_nop_conversion_p (type, TREE_TYPE (captures[0]))
5518 : )
5519 : {
5520 5783 : {
5521 5783 : poly_int64 diff;
5522 5783 : if (ptr_difference_const (captures[0], captures[2], &diff)
5523 : )
5524 : {
5525 997 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1287;
5526 997 : {
5527 997 : tree res_op0;
5528 997 : {
5529 997 : tree _o1[1], _r1;
5530 997 : _o1[0] = captures[1];
5531 997 : if (TREE_TYPE (_o1[0]) != type)
5532 : {
5533 928 : _r1 = fold_build1_loc (loc, NOP_EXPR, type, _o1[0]);
5534 : }
5535 : else
5536 : _r1 = _o1[0];
5537 997 : res_op0 = _r1;
5538 : }
5539 997 : tree res_op1;
5540 997 : res_op1 = build_int_cst_type (type, diff);
5541 997 : tree _r;
5542 997 : _r = fold_build2_loc (loc, PLUS_EXPR, type, res_op0, res_op1);
5543 997 : if (TREE_SIDE_EFFECTS (captures[0]))
5544 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[0]), _r);
5545 997 : if (TREE_SIDE_EFFECTS (captures[2]))
5546 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[2]), _r);
5547 997 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 927, __FILE__, __LINE__, true);
5548 997 : return _r;
5549 : }
5550 0 : next_after_fail1287:;
5551 : }
5552 : }
5553 : }
5554 : }
5555 4786 : break;
5556 : }
5557 : default:;
5558 : }
5559 : break;
5560 : }
5561 : default:;
5562 : }
5563 : break;
5564 : }
5565 5119678 : default:;
5566 : }
5567 5119678 : switch (TREE_CODE (_p1))
5568 : {
5569 4255790 : CASE_CONVERT:
5570 4255790 : {
5571 4255790 : tree _q40 = TREE_OPERAND (_p1, 0);
5572 4255790 : switch (TREE_CODE (_q40))
5573 : {
5574 49479 : case ADDR_EXPR:
5575 49479 : {
5576 49479 : {
5577 49479 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q40 };
5578 49479 : if (tree_nop_conversion_p (type, TREE_TYPE (captures[0]))
5579 : )
5580 : {
5581 49458 : {
5582 49458 : poly_int64 diff;
5583 49458 : if (ptr_difference_const (captures[0], captures[1], &diff)
5584 : )
5585 : {
5586 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1288;
5587 0 : {
5588 0 : tree _r;
5589 0 : _r = build_int_cst_type (type, diff);
5590 0 : if (TREE_SIDE_EFFECTS (captures[0]))
5591 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[0]), _r);
5592 0 : if (TREE_SIDE_EFFECTS (captures[1]))
5593 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
5594 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 928, __FILE__, __LINE__, true);
5595 0 : return _r;
5596 : }
5597 0 : next_after_fail1288:;
5598 : }
5599 : }
5600 : }
5601 : }
5602 49479 : break;
5603 : }
5604 : default:;
5605 : }
5606 : break;
5607 : }
5608 : default:;
5609 : }
5610 : break;
5611 : }
5612 23391560 : default:;
5613 : }
5614 23391560 : if (integer_onep (_p0))
5615 : {
5616 105963 : switch (TREE_CODE (_p1))
5617 : {
5618 27705 : case SSA_NAME:
5619 27705 : {
5620 27705 : {
5621 27705 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
5622 27705 : if (INTEGRAL_TYPE_P (type)
5623 27705 : && ssa_name_has_boolean_range (captures[1])
5624 : )
5625 : {
5626 226 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1289;
5627 226 : {
5628 226 : tree res_op0;
5629 226 : res_op0 = captures[1];
5630 226 : tree res_op1;
5631 226 : res_op1 = captures[0];
5632 226 : tree _r;
5633 226 : _r = fold_build2_loc (loc, BIT_XOR_EXPR, type, res_op0, res_op1);
5634 226 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 929, __FILE__, __LINE__, true);
5635 226 : return _r;
5636 : }
5637 0 : next_after_fail1289:;
5638 : }
5639 : }
5640 27479 : break;
5641 : }
5642 : default:;
5643 : }
5644 : }
5645 23391334 : switch (TREE_CODE (_p1))
5646 : {
5647 7616347 : CASE_CONVERT:
5648 7616347 : {
5649 7616347 : tree _q30 = TREE_OPERAND (_p1, 0);
5650 7616347 : switch (TREE_CODE (_q30))
5651 : {
5652 14 : case BIT_AND_EXPR:
5653 14 : {
5654 14 : tree _q40 = TREE_OPERAND (_q30, 0);
5655 14 : tree _q41 = TREE_OPERAND (_q30, 1);
5656 14 : if ((_q40 == _p0 && ! TREE_SIDE_EFFECTS (_q40)) || operand_equal_p (_q40, _p0, 0))
5657 : {
5658 0 : {
5659 0 : tree captures[5] ATTRIBUTE_UNUSED = { _q40, _p1, _q30, _q41, _p0 };
5660 0 : tree res = generic_simplify_93 (loc, type, _p0, _p1, captures);
5661 0 : if (res) return res;
5662 : }
5663 : }
5664 14 : if ((_q41 == _p0 && ! TREE_SIDE_EFFECTS (_q41)) || operand_equal_p (_q41, _p0, 0))
5665 : {
5666 0 : {
5667 0 : tree captures[5] ATTRIBUTE_UNUSED = { _q41, _p1, _q30, _q40, _p0 };
5668 0 : tree res = generic_simplify_93 (loc, type, _p0, _p1, captures);
5669 0 : if (res) return res;
5670 : }
5671 : }
5672 : break;
5673 : }
5674 : default:;
5675 : }
5676 : break;
5677 : }
5678 7495 : case BIT_AND_EXPR:
5679 7495 : {
5680 7495 : tree _q30 = TREE_OPERAND (_p1, 0);
5681 7495 : tree _q31 = TREE_OPERAND (_p1, 1);
5682 7495 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || operand_equal_p (_q30, _p0, 0))
5683 : {
5684 217 : {
5685 217 : tree captures[5] ATTRIBUTE_UNUSED = { _q30, _p1, _p1, _q31, _p0 };
5686 217 : tree res = generic_simplify_94 (loc, type, _p0, _p1, captures);
5687 217 : if (res) return res;
5688 : }
5689 : }
5690 7278 : if ((_q31 == _p0 && ! TREE_SIDE_EFFECTS (_q31)) || operand_equal_p (_q31, _p0, 0))
5691 : {
5692 38 : {
5693 38 : tree captures[5] ATTRIBUTE_UNUSED = { _q31, _p1, _p1, _q30, _p0 };
5694 38 : tree res = generic_simplify_94 (loc, type, _p0, _p1, captures);
5695 38 : if (res) return res;
5696 : }
5697 : }
5698 : break;
5699 : }
5700 23391079 : default:;
5701 : }
5702 23391079 : switch (TREE_CODE (_p0))
5703 : {
5704 1794999 : case PLUS_EXPR:
5705 1794999 : {
5706 1794999 : tree _q20 = TREE_OPERAND (_p0, 0);
5707 1794999 : tree _q21 = TREE_OPERAND (_p0, 1);
5708 1794999 : switch (TREE_CODE (_p1))
5709 : {
5710 482924 : case PLUS_EXPR:
5711 482924 : {
5712 482924 : tree _q50 = TREE_OPERAND (_p1, 0);
5713 482924 : tree _q51 = TREE_OPERAND (_p1, 1);
5714 482924 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
5715 : {
5716 178061 : {
5717 178061 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q50 };
5718 356122 : if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
5719 356122 : && (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[0]))
5720 40239 : || TYPE_OVERFLOW_WRAPS (TREE_TYPE (captures[0])))
5721 : )
5722 : {
5723 178055 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1290;
5724 178055 : {
5725 178055 : tree res_op0;
5726 178055 : res_op0 = captures[0];
5727 178055 : tree res_op1;
5728 178055 : res_op1 = captures[2];
5729 178055 : tree _r;
5730 178055 : _r = fold_build2_loc (loc, MINUS_EXPR, type, res_op0, res_op1);
5731 178055 : if (TREE_SIDE_EFFECTS (captures[1]))
5732 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
5733 178055 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 930, __FILE__, __LINE__, true);
5734 178055 : return _r;
5735 : }
5736 0 : next_after_fail1290:;
5737 : }
5738 : }
5739 : }
5740 304869 : if ((_q50 == _q21 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q21, 0) && types_match (_q50, _q21)))
5741 : {
5742 600 : {
5743 600 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q51 };
5744 1200 : if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
5745 1200 : && (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[0]))
5746 490 : || TYPE_OVERFLOW_WRAPS (TREE_TYPE (captures[0])))
5747 : )
5748 : {
5749 600 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1291;
5750 600 : {
5751 600 : tree res_op0;
5752 600 : res_op0 = captures[0];
5753 600 : tree res_op1;
5754 600 : res_op1 = captures[2];
5755 600 : tree _r;
5756 600 : _r = fold_build2_loc (loc, MINUS_EXPR, type, res_op0, res_op1);
5757 600 : if (TREE_SIDE_EFFECTS (captures[1]))
5758 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
5759 600 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 930, __FILE__, __LINE__, true);
5760 600 : return _r;
5761 : }
5762 0 : next_after_fail1291:;
5763 : }
5764 : }
5765 : }
5766 304269 : if ((_q51 == _q20 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q20, 0) && types_match (_q51, _q20)))
5767 : {
5768 479 : {
5769 479 : tree captures[3] ATTRIBUTE_UNUSED = { _q21, _q20, _q50 };
5770 958 : if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
5771 958 : && (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[0]))
5772 390 : || TYPE_OVERFLOW_WRAPS (TREE_TYPE (captures[0])))
5773 : )
5774 : {
5775 479 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1292;
5776 479 : {
5777 479 : tree res_op0;
5778 479 : res_op0 = captures[0];
5779 479 : tree res_op1;
5780 479 : res_op1 = captures[2];
5781 479 : tree _r;
5782 479 : _r = fold_build2_loc (loc, MINUS_EXPR, type, res_op0, res_op1);
5783 479 : if (TREE_SIDE_EFFECTS (captures[1]))
5784 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
5785 479 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 930, __FILE__, __LINE__, true);
5786 479 : return _r;
5787 : }
5788 0 : next_after_fail1292:;
5789 : }
5790 : }
5791 : }
5792 303790 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
5793 : {
5794 174767 : {
5795 174767 : tree captures[3] ATTRIBUTE_UNUSED = { _q21, _q20, _q51 };
5796 349534 : if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
5797 349534 : && (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[0]))
5798 141656 : || TYPE_OVERFLOW_WRAPS (TREE_TYPE (captures[0])))
5799 : )
5800 : {
5801 174767 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1293;
5802 174767 : {
5803 174767 : tree res_op0;
5804 174767 : res_op0 = captures[0];
5805 174767 : tree res_op1;
5806 174767 : res_op1 = captures[2];
5807 174767 : tree _r;
5808 174767 : _r = fold_build2_loc (loc, MINUS_EXPR, type, res_op0, res_op1);
5809 174767 : if (TREE_SIDE_EFFECTS (captures[1]))
5810 2 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
5811 174767 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 930, __FILE__, __LINE__, true);
5812 174767 : return _r;
5813 : }
5814 0 : next_after_fail1293:;
5815 : }
5816 : }
5817 : }
5818 : break;
5819 : }
5820 : default:;
5821 : }
5822 : break;
5823 : }
5824 987631 : case MINUS_EXPR:
5825 987631 : {
5826 987631 : tree _q20 = TREE_OPERAND (_p0, 0);
5827 987631 : tree _q21 = TREE_OPERAND (_p0, 1);
5828 987631 : switch (TREE_CODE (_p1))
5829 : {
5830 3919 : case MINUS_EXPR:
5831 3919 : {
5832 3919 : tree _q50 = TREE_OPERAND (_p1, 0);
5833 3919 : tree _q51 = TREE_OPERAND (_p1, 1);
5834 3919 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
5835 : {
5836 3877 : {
5837 3877 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q50 };
5838 7754 : if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
5839 7754 : && (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[0]))
5840 0 : || TYPE_OVERFLOW_WRAPS (TREE_TYPE (captures[0])))
5841 : )
5842 : {
5843 3877 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1294;
5844 3877 : {
5845 3877 : tree res_op0;
5846 3877 : res_op0 = captures[0];
5847 3877 : tree res_op1;
5848 3877 : res_op1 = captures[2];
5849 3877 : tree _r;
5850 3877 : _r = fold_build2_loc (loc, MINUS_EXPR, type, res_op0, res_op1);
5851 3877 : if (TREE_SIDE_EFFECTS (captures[1]))
5852 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
5853 3877 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 931, __FILE__, __LINE__, true);
5854 3877 : return _r;
5855 : }
5856 0 : next_after_fail1294:;
5857 : }
5858 : }
5859 : }
5860 42 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
5861 : {
5862 0 : {
5863 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q51 };
5864 0 : if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
5865 0 : && (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[1]))
5866 0 : || TYPE_OVERFLOW_WRAPS (TREE_TYPE (captures[1])))
5867 : )
5868 : {
5869 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1295;
5870 0 : {
5871 0 : tree res_op0;
5872 0 : res_op0 = captures[2];
5873 0 : tree res_op1;
5874 0 : res_op1 = captures[1];
5875 0 : tree _r;
5876 0 : _r = fold_build2_loc (loc, MINUS_EXPR, type, res_op0, res_op1);
5877 0 : if (TREE_SIDE_EFFECTS (captures[0]))
5878 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[0]), _r);
5879 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 932, __FILE__, __LINE__, true);
5880 0 : return _r;
5881 : }
5882 0 : next_after_fail1295:;
5883 : }
5884 : }
5885 : }
5886 : break;
5887 : }
5888 : default:;
5889 : }
5890 : break;
5891 : }
5892 59 : case POINTER_DIFF_EXPR:
5893 59 : {
5894 59 : tree _q20 = TREE_OPERAND (_p0, 0);
5895 59 : tree _q21 = TREE_OPERAND (_p0, 1);
5896 59 : switch (TREE_CODE (_p1))
5897 : {
5898 0 : case POINTER_DIFF_EXPR:
5899 0 : {
5900 0 : tree _q50 = TREE_OPERAND (_p1, 0);
5901 0 : tree _q51 = TREE_OPERAND (_p1, 1);
5902 0 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
5903 : {
5904 0 : {
5905 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q50 };
5906 0 : if (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[0]))
5907 0 : && !TYPE_OVERFLOW_SANITIZED (TREE_TYPE (captures[2]))
5908 : )
5909 : {
5910 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1296;
5911 0 : {
5912 0 : tree res_op0;
5913 0 : res_op0 = captures[1];
5914 0 : tree res_op1;
5915 0 : res_op1 = captures[3];
5916 0 : tree _r;
5917 0 : _r = fold_build2_loc (loc, POINTER_DIFF_EXPR, type, res_op0, res_op1);
5918 0 : if (TREE_SIDE_EFFECTS (captures[2]))
5919 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[2]), _r);
5920 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 933, __FILE__, __LINE__, true);
5921 0 : return _r;
5922 : }
5923 0 : next_after_fail1296:;
5924 : }
5925 : }
5926 : }
5927 0 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
5928 : {
5929 0 : {
5930 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q51 };
5931 0 : if (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[0]))
5932 0 : && !TYPE_OVERFLOW_SANITIZED (TREE_TYPE (captures[1]))
5933 : )
5934 : {
5935 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1297;
5936 0 : {
5937 0 : tree res_op0;
5938 0 : res_op0 = captures[3];
5939 0 : tree res_op1;
5940 0 : res_op1 = captures[2];
5941 0 : tree _r;
5942 0 : _r = fold_build2_loc (loc, POINTER_DIFF_EXPR, type, res_op0, res_op1);
5943 0 : if (TREE_SIDE_EFFECTS (captures[1]))
5944 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
5945 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 934, __FILE__, __LINE__, true);
5946 0 : return _r;
5947 : }
5948 0 : next_after_fail1297:;
5949 : }
5950 : }
5951 : }
5952 : break;
5953 : }
5954 : default:;
5955 : }
5956 : break;
5957 : }
5958 23033301 : default:;
5959 : }
5960 23033301 : switch (TREE_CODE (_p1))
5961 : {
5962 7616347 : CASE_CONVERT:
5963 7616347 : {
5964 7616347 : tree _q30 = TREE_OPERAND (_p1, 0);
5965 7616347 : switch (TREE_CODE (_q30))
5966 : {
5967 2605 : case NEGATE_EXPR:
5968 2605 : {
5969 2605 : tree _q40 = TREE_OPERAND (_q30, 0);
5970 2605 : {
5971 2605 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q40 };
5972 2605 : tree res = generic_simplify_95 (loc, type, _p0, _p1, captures);
5973 2605 : if (res) return res;
5974 : }
5975 2597 : break;
5976 : }
5977 : default:;
5978 : }
5979 : break;
5980 : }
5981 45 : case NEGATE_EXPR:
5982 45 : {
5983 45 : tree _q30 = TREE_OPERAND (_p1, 0);
5984 45 : {
5985 45 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q30 };
5986 45 : tree res = generic_simplify_95 (loc, type, _p0, _p1, captures);
5987 45 : if (res) return res;
5988 : }
5989 40 : break;
5990 : }
5991 23033288 : default:;
5992 : }
5993 23033288 : switch (TREE_CODE (_p0))
5994 : {
5995 1441098 : case PLUS_EXPR:
5996 1441098 : {
5997 1441098 : tree _q20 = TREE_OPERAND (_p0, 0);
5998 1441098 : tree _q21 = TREE_OPERAND (_p0, 1);
5999 1441098 : {
6000 1441098 : tree _q20_pops[1];
6001 1441098 : if (tree_nop_convert (_q20, _q20_pops))
6002 : {
6003 335433 : tree _q30 = _q20_pops[0];
6004 335433 : if ((_p1 == _q30 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q30, 0) && types_match (_p1, _q30)))
6005 : {
6006 393 : {
6007 393 : tree captures[2] ATTRIBUTE_UNUSED = { _q30, _q21 };
6008 393 : tree res = generic_simplify_96 (loc, type, _p0, _p1, captures);
6009 393 : if (res) return res;
6010 : }
6011 : }
6012 : }
6013 : }
6014 1440705 : {
6015 1440705 : tree _q21_pops[1];
6016 1440705 : if (tree_nop_convert (_q21, _q21_pops))
6017 : {
6018 498211 : tree _q40 = _q21_pops[0];
6019 498211 : if ((_p1 == _q40 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q40, 0) && types_match (_p1, _q40)))
6020 : {
6021 79 : {
6022 79 : tree captures[2] ATTRIBUTE_UNUSED = { _q40, _q20 };
6023 79 : tree res = generic_simplify_96 (loc, type, _p0, _p1, captures);
6024 79 : if (res) return res;
6025 : }
6026 : }
6027 : }
6028 : }
6029 1440626 : if ((_p1 == _q20 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q20, 0) && types_match (_p1, _q20)))
6030 : {
6031 54818 : {
6032 54818 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
6033 54818 : tree res = generic_simplify_96 (loc, type, _p0, _p1, captures);
6034 54818 : if (res) return res;
6035 : }
6036 : }
6037 1385808 : if ((_p1 == _q21 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q21, 0) && types_match (_p1, _q21)))
6038 : {
6039 1891 : {
6040 1891 : tree captures[2] ATTRIBUTE_UNUSED = { _q21, _q20 };
6041 1891 : tree res = generic_simplify_96 (loc, type, _p0, _p1, captures);
6042 1891 : if (res) return res;
6043 : }
6044 : }
6045 : break;
6046 : }
6047 983754 : case MINUS_EXPR:
6048 983754 : {
6049 983754 : tree _q20 = TREE_OPERAND (_p0, 0);
6050 983754 : tree _q21 = TREE_OPERAND (_p0, 1);
6051 983754 : {
6052 983754 : tree _q20_pops[1];
6053 983754 : if (tree_nop_convert (_q20, _q20_pops))
6054 : {
6055 86336 : tree _q30 = _q20_pops[0];
6056 86336 : if ((_p1 == _q30 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q30, 0) && types_match (_p1, _q30)))
6057 : {
6058 0 : {
6059 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q30, _q21 };
6060 0 : tree res = generic_simplify_97 (loc, type, _p0, _p1, captures);
6061 0 : if (res) return res;
6062 : }
6063 : }
6064 : }
6065 : }
6066 983754 : if ((_p1 == _q20 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q20, 0) && types_match (_p1, _q20)))
6067 : {
6068 170 : {
6069 170 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
6070 170 : tree res = generic_simplify_97 (loc, type, _p0, _p1, captures);
6071 170 : if (res) return res;
6072 : }
6073 : }
6074 : break;
6075 : }
6076 22975948 : default:;
6077 : }
6078 22975948 : {
6079 22975948 : tree _p0_pops[1];
6080 22975948 : if (tree_nop_convert (_p0, _p0_pops))
6081 : {
6082 4508745 : tree _q20 = _p0_pops[0];
6083 4508745 : switch (TREE_CODE (_q20))
6084 : {
6085 360300 : case PLUS_EXPR:
6086 360300 : {
6087 360300 : tree _q30 = TREE_OPERAND (_q20, 0);
6088 360300 : tree _q31 = TREE_OPERAND (_q20, 1);
6089 360300 : {
6090 360300 : tree _q30_pops[1];
6091 360300 : if (tree_nop_convert (_q30, _q30_pops))
6092 : {
6093 28584 : tree _q40 = _q30_pops[0];
6094 28584 : if ((_p1 == _q40 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q40, 0) && types_match (_p1, _q40)))
6095 : {
6096 574 : {
6097 574 : tree captures[2] ATTRIBUTE_UNUSED = { _q40, _q31 };
6098 574 : tree res = generic_simplify_96 (loc, type, _p0, _p1, captures);
6099 574 : if (res) return res;
6100 : }
6101 : }
6102 : }
6103 : }
6104 359726 : {
6105 359726 : tree _q31_pops[1];
6106 359726 : if (tree_nop_convert (_q31, _q31_pops))
6107 : {
6108 2723 : tree _q50 = _q31_pops[0];
6109 2723 : if ((_p1 == _q50 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q50, 0) && types_match (_p1, _q50)))
6110 : {
6111 52 : {
6112 52 : tree captures[2] ATTRIBUTE_UNUSED = { _q50, _q30 };
6113 52 : tree res = generic_simplify_96 (loc, type, _p0, _p1, captures);
6114 52 : if (res) return res;
6115 : }
6116 : }
6117 : }
6118 : }
6119 359674 : if ((_p1 == _q30 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q30, 0) && types_match (_p1, _q30)))
6120 : {
6121 12 : {
6122 12 : tree captures[2] ATTRIBUTE_UNUSED = { _q30, _q31 };
6123 12 : tree res = generic_simplify_96 (loc, type, _p0, _p1, captures);
6124 12 : if (res) return res;
6125 : }
6126 : }
6127 359662 : if ((_p1 == _q31 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q31, 0) && types_match (_p1, _q31)))
6128 : {
6129 0 : {
6130 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q31, _q30 };
6131 0 : tree res = generic_simplify_96 (loc, type, _p0, _p1, captures);
6132 0 : if (res) return res;
6133 : }
6134 : }
6135 : break;
6136 : }
6137 812 : case MINUS_EXPR:
6138 812 : {
6139 812 : tree _q30 = TREE_OPERAND (_q20, 0);
6140 812 : tree _q31 = TREE_OPERAND (_q20, 1);
6141 812 : {
6142 812 : tree _q30_pops[1];
6143 812 : if (tree_nop_convert (_q30, _q30_pops))
6144 : {
6145 0 : tree _q40 = _q30_pops[0];
6146 0 : if ((_p1 == _q40 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q40, 0) && types_match (_p1, _q40)))
6147 : {
6148 0 : {
6149 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q40, _q31 };
6150 0 : tree res = generic_simplify_97 (loc, type, _p0, _p1, captures);
6151 0 : if (res) return res;
6152 : }
6153 : }
6154 : }
6155 : }
6156 812 : if ((_p1 == _q30 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q30, 0) && types_match (_p1, _q30)))
6157 : {
6158 0 : {
6159 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q30, _q31 };
6160 0 : tree res = generic_simplify_97 (loc, type, _p0, _p1, captures);
6161 0 : if (res) return res;
6162 : }
6163 : }
6164 : break;
6165 : }
6166 : default:;
6167 : }
6168 : }
6169 : }
6170 22975310 : switch (TREE_CODE (_p1))
6171 : {
6172 1290115 : case PLUS_EXPR:
6173 1290115 : {
6174 1290115 : tree _q30 = TREE_OPERAND (_p1, 0);
6175 1290115 : tree _q31 = TREE_OPERAND (_p1, 1);
6176 1290115 : {
6177 1290115 : tree _q30_pops[1];
6178 1290115 : if (tree_nop_convert (_q30, _q30_pops))
6179 : {
6180 340732 : tree _q40 = _q30_pops[0];
6181 340732 : if ((_q40 == _p0 && ! TREE_SIDE_EFFECTS (_q40)) || (operand_equal_p (_q40, _p0, 0) && types_match (_q40, _p0)))
6182 : {
6183 71 : {
6184 71 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q31 };
6185 71 : tree res = generic_simplify_98 (loc, type, _p0, _p1, captures);
6186 71 : if (res) return res;
6187 : }
6188 : }
6189 : }
6190 : }
6191 1290044 : {
6192 1290044 : tree _q31_pops[1];
6193 1290044 : if (tree_nop_convert (_q31, _q31_pops))
6194 : {
6195 74242 : tree _q50 = _q31_pops[0];
6196 74242 : if ((_q50 == _p0 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _p0, 0) && types_match (_q50, _p0)))
6197 : {
6198 0 : {
6199 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q30 };
6200 0 : tree res = generic_simplify_98 (loc, type, _p0, _p1, captures);
6201 0 : if (res) return res;
6202 : }
6203 : }
6204 : }
6205 : }
6206 1290044 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || (operand_equal_p (_q30, _p0, 0) && types_match (_q30, _p0)))
6207 : {
6208 41694 : {
6209 41694 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q31 };
6210 41694 : tree res = generic_simplify_98 (loc, type, _p0, _p1, captures);
6211 41694 : if (res) return res;
6212 : }
6213 : }
6214 1248350 : if ((_q31 == _p0 && ! TREE_SIDE_EFFECTS (_q31)) || (operand_equal_p (_q31, _p0, 0) && types_match (_q31, _p0)))
6215 : {
6216 1587 : {
6217 1587 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q30 };
6218 1587 : tree res = generic_simplify_98 (loc, type, _p0, _p1, captures);
6219 1587 : if (res) return res;
6220 : }
6221 : }
6222 : break;
6223 : }
6224 84074 : case MINUS_EXPR:
6225 84074 : {
6226 84074 : tree _q30 = TREE_OPERAND (_p1, 0);
6227 84074 : tree _q31 = TREE_OPERAND (_p1, 1);
6228 84074 : {
6229 84074 : tree _q30_pops[1];
6230 84074 : if (tree_nop_convert (_q30, _q30_pops))
6231 : {
6232 61 : tree _q40 = _q30_pops[0];
6233 61 : if ((_q40 == _p0 && ! TREE_SIDE_EFFECTS (_q40)) || (operand_equal_p (_q40, _p0, 0) && types_match (_q40, _p0)))
6234 : {
6235 0 : {
6236 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q31 };
6237 0 : tree res = generic_simplify_99 (loc, type, _p0, _p1, captures);
6238 0 : if (res) return res;
6239 : }
6240 : }
6241 : }
6242 : }
6243 84074 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || (operand_equal_p (_q30, _p0, 0) && types_match (_q30, _p0)))
6244 : {
6245 353 : {
6246 353 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q31 };
6247 353 : tree res = generic_simplify_99 (loc, type, _p0, _p1, captures);
6248 353 : if (res) return res;
6249 : }
6250 : }
6251 : break;
6252 : }
6253 22931605 : default:;
6254 : }
6255 22931605 : {
6256 22931605 : tree _p1_pops[1];
6257 22931605 : if (tree_nop_convert (_p1, _p1_pops))
6258 : {
6259 6906371 : tree _q30 = _p1_pops[0];
6260 6906371 : switch (TREE_CODE (_q30))
6261 : {
6262 678907 : case PLUS_EXPR:
6263 678907 : {
6264 678907 : tree _q40 = TREE_OPERAND (_q30, 0);
6265 678907 : tree _q41 = TREE_OPERAND (_q30, 1);
6266 678907 : {
6267 678907 : tree _q40_pops[1];
6268 678907 : if (tree_nop_convert (_q40, _q40_pops))
6269 : {
6270 60563 : tree _q50 = _q40_pops[0];
6271 60563 : if ((_q50 == _p0 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _p0, 0) && types_match (_q50, _p0)))
6272 : {
6273 163 : {
6274 163 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q41 };
6275 163 : tree res = generic_simplify_98 (loc, type, _p0, _p1, captures);
6276 163 : if (res) return res;
6277 : }
6278 : }
6279 : }
6280 : }
6281 678744 : {
6282 678744 : tree _q41_pops[1];
6283 678744 : if (tree_nop_convert (_q41, _q41_pops))
6284 : {
6285 20149 : tree _q60 = _q41_pops[0];
6286 20149 : if ((_q60 == _p0 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _p0, 0) && types_match (_q60, _p0)))
6287 : {
6288 0 : {
6289 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q40 };
6290 0 : tree res = generic_simplify_98 (loc, type, _p0, _p1, captures);
6291 0 : if (res) return res;
6292 : }
6293 : }
6294 : }
6295 : }
6296 678744 : if ((_q40 == _p0 && ! TREE_SIDE_EFFECTS (_q40)) || (operand_equal_p (_q40, _p0, 0) && types_match (_q40, _p0)))
6297 : {
6298 7 : {
6299 7 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q41 };
6300 7 : tree res = generic_simplify_98 (loc, type, _p0, _p1, captures);
6301 7 : if (res) return res;
6302 : }
6303 : }
6304 678737 : if ((_q41 == _p0 && ! TREE_SIDE_EFFECTS (_q41)) || (operand_equal_p (_q41, _p0, 0) && types_match (_q41, _p0)))
6305 : {
6306 0 : {
6307 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q40 };
6308 0 : tree res = generic_simplify_98 (loc, type, _p0, _p1, captures);
6309 0 : if (res) return res;
6310 : }
6311 : }
6312 : break;
6313 : }
6314 7656 : case MINUS_EXPR:
6315 7656 : {
6316 7656 : tree _q40 = TREE_OPERAND (_q30, 0);
6317 7656 : tree _q41 = TREE_OPERAND (_q30, 1);
6318 7656 : {
6319 7656 : tree _q40_pops[1];
6320 7656 : if (tree_nop_convert (_q40, _q40_pops))
6321 : {
6322 6814 : tree _q50 = _q40_pops[0];
6323 6814 : if ((_q50 == _p0 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _p0, 0) && types_match (_q50, _p0)))
6324 : {
6325 0 : {
6326 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q41 };
6327 0 : tree res = generic_simplify_99 (loc, type, _p0, _p1, captures);
6328 0 : if (res) return res;
6329 : }
6330 : }
6331 : }
6332 : }
6333 7656 : if ((_q40 == _p0 && ! TREE_SIDE_EFFECTS (_q40)) || (operand_equal_p (_q40, _p0, 0) && types_match (_q40, _p0)))
6334 : {
6335 2 : {
6336 2 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q41 };
6337 2 : tree res = generic_simplify_99 (loc, type, _p0, _p1, captures);
6338 2 : if (res) return res;
6339 : }
6340 : }
6341 : break;
6342 : }
6343 : default:;
6344 : }
6345 : }
6346 : }
6347 22931433 : switch (TREE_CODE (_p0))
6348 : {
6349 1383928 : case PLUS_EXPR:
6350 1383928 : {
6351 1383928 : tree _q20 = TREE_OPERAND (_p0, 0);
6352 1383928 : tree _q21 = TREE_OPERAND (_p0, 1);
6353 1383928 : switch (TREE_CODE (_p1))
6354 : {
6355 112 : case MINUS_EXPR:
6356 112 : {
6357 112 : tree _q50 = TREE_OPERAND (_p1, 0);
6358 112 : tree _q51 = TREE_OPERAND (_p1, 1);
6359 112 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
6360 : {
6361 0 : {
6362 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q51 };
6363 0 : tree res = generic_simplify_100 (loc, type, _p0, _p1, captures);
6364 0 : if (res) return res;
6365 : }
6366 : }
6367 112 : if ((_q50 == _q21 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q21, 0) && types_match (_q50, _q21)))
6368 : {
6369 0 : {
6370 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q21, _q20, _q51 };
6371 0 : tree res = generic_simplify_100 (loc, type, _p0, _p1, captures);
6372 0 : if (res) return res;
6373 : }
6374 : }
6375 : break;
6376 : }
6377 1383928 : default:;
6378 : }
6379 1383928 : if (CONSTANT_CLASS_P (_q21))
6380 : {
6381 576503 : if (CONSTANT_CLASS_P (_p1))
6382 : {
6383 13 : {
6384 13 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
6385 13 : tree res = generic_simplify_63 (loc, type, _p0, _p1, captures, PLUS_EXPR, MINUS_EXPR, MINUS_EXPR);
6386 13 : if (res) return res;
6387 : }
6388 : }
6389 : }
6390 : break;
6391 : }
6392 983581 : case MINUS_EXPR:
6393 983581 : {
6394 983581 : tree _q20 = TREE_OPERAND (_p0, 0);
6395 983581 : tree _q21 = TREE_OPERAND (_p0, 1);
6396 983581 : if (CONSTANT_CLASS_P (_q21))
6397 : {
6398 96998 : if (CONSTANT_CLASS_P (_p1))
6399 : {
6400 12 : {
6401 12 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
6402 12 : tree res = generic_simplify_63 (loc, type, _p0, _p1, captures, MINUS_EXPR, PLUS_EXPR, MINUS_EXPR);
6403 12 : if (res) return res;
6404 : }
6405 : }
6406 : }
6407 983581 : if (CONSTANT_CLASS_P (_q20))
6408 : {
6409 2941 : if (CONSTANT_CLASS_P (_p1))
6410 : {
6411 1 : {
6412 1 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
6413 1 : tree res = generic_simplify_64 (loc, type, _p0, _p1, captures, MINUS_EXPR);
6414 1 : if (res) return res;
6415 : }
6416 : }
6417 : }
6418 : break;
6419 : }
6420 5101506 : CASE_CONVERT:
6421 5101506 : {
6422 5101506 : tree _q20 = TREE_OPERAND (_p0, 0);
6423 5101506 : switch (TREE_CODE (_p1))
6424 : {
6425 4255778 : CASE_CONVERT:
6426 4255778 : {
6427 4255778 : tree _q40 = TREE_OPERAND (_p1, 0);
6428 4255778 : {
6429 4255778 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q40 };
6430 4255778 : tree res = generic_simplify_68 (loc, type, _p0, _p1, captures, MINUS_EXPR);
6431 4255778 : if (res) return res;
6432 : }
6433 4245342 : break;
6434 : }
6435 5091070 : default:;
6436 : }
6437 5091070 : switch (TREE_CODE (_q20))
6438 : {
6439 272 : case NEGATE_EXPR:
6440 272 : {
6441 272 : tree _q30 = TREE_OPERAND (_q20, 0);
6442 272 : if (integer_each_onep (_p1))
6443 : {
6444 0 : {
6445 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q30 };
6446 0 : tree res = generic_simplify_102 (loc, type, _p0, _p1, captures);
6447 0 : if (res) return res;
6448 : }
6449 : }
6450 : break;
6451 : }
6452 414302 : case PLUS_EXPR:
6453 414302 : {
6454 414302 : tree _q30 = TREE_OPERAND (_q20, 0);
6455 414302 : tree _q31 = TREE_OPERAND (_q20, 1);
6456 414302 : switch (TREE_CODE (_p1))
6457 : {
6458 397296 : CASE_CONVERT:
6459 397296 : {
6460 397296 : tree _q60 = TREE_OPERAND (_p1, 0);
6461 397296 : if ((_q60 == _q30 && ! TREE_SIDE_EFFECTS (_q60)) || operand_equal_p (_q60, _q30, 0))
6462 : {
6463 6629 : {
6464 6629 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _q31, _q30 };
6465 6629 : tree res = generic_simplify_103 (loc, type, _p0, _p1, captures);
6466 6629 : if (res) return res;
6467 : }
6468 : }
6469 390787 : if ((_q60 == _q31 && ! TREE_SIDE_EFFECTS (_q60)) || operand_equal_p (_q60, _q31, 0))
6470 : {
6471 22 : {
6472 22 : tree captures[3] ATTRIBUTE_UNUSED = { _q31, _q30, _q31 };
6473 22 : tree res = generic_simplify_103 (loc, type, _p0, _p1, captures);
6474 22 : if (res) return res;
6475 : }
6476 : }
6477 : break;
6478 : }
6479 407771 : default:;
6480 : }
6481 407771 : if ((_p1 == _q30 && ! TREE_SIDE_EFFECTS (_p1)) || operand_equal_p (_p1, _q30, 0))
6482 : {
6483 4247 : {
6484 4247 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _q31, _q30 };
6485 4247 : tree res = generic_simplify_103 (loc, type, _p0, _p1, captures);
6486 4247 : if (res) return res;
6487 : }
6488 : }
6489 403524 : if ((_p1 == _q31 && ! TREE_SIDE_EFFECTS (_p1)) || operand_equal_p (_p1, _q31, 0))
6490 : {
6491 1344 : {
6492 1344 : tree captures[3] ATTRIBUTE_UNUSED = { _q31, _q30, _q31 };
6493 1344 : tree res = generic_simplify_103 (loc, type, _p0, _p1, captures);
6494 1344 : if (res) return res;
6495 : }
6496 : }
6497 : break;
6498 : }
6499 106764 : case POINTER_PLUS_EXPR:
6500 106764 : {
6501 106764 : tree _q30 = TREE_OPERAND (_q20, 0);
6502 106764 : tree _q31 = TREE_OPERAND (_q20, 1);
6503 106764 : switch (TREE_CODE (_p1))
6504 : {
6505 105690 : CASE_CONVERT:
6506 105690 : {
6507 105690 : tree _q60 = TREE_OPERAND (_p1, 0);
6508 105690 : if ((_q60 == _q30 && ! TREE_SIDE_EFFECTS (_q60)) || operand_equal_p (_q60, _q30, 0))
6509 : {
6510 12222 : {
6511 12222 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _q31, _q30 };
6512 12222 : if (!TYPE_SATURATING (type)
6513 : )
6514 : {
6515 12222 : if ((!FLOAT_TYPE_P (type) || flag_associative_math)
6516 24444 : && !FIXED_POINT_TYPE_P (type)
6517 : )
6518 : {
6519 12222 : if (element_precision (type) <= element_precision (TREE_TYPE (captures[1]))
6520 12222 : || (POINTER_TYPE_P (TREE_TYPE (captures[0]))
6521 0 : && TREE_CODE (captures[1]) == INTEGER_CST
6522 0 : && tree_int_cst_sign_bit (captures[1]) == 0)
6523 : )
6524 : {
6525 12222 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1298;
6526 12222 : {
6527 12222 : tree res_op0;
6528 12222 : res_op0 = captures[1];
6529 12222 : tree _r;
6530 12222 : _r = fold_build1_loc (loc, NOP_EXPR, type, res_op0);
6531 12222 : if (TREE_SIDE_EFFECTS (captures[2]))
6532 11 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[2]), _r);
6533 12222 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 935, __FILE__, __LINE__, true);
6534 12222 : return _r;
6535 : }
6536 0 : next_after_fail1298:;
6537 : }
6538 : }
6539 : }
6540 : }
6541 : }
6542 : break;
6543 : }
6544 : default:;
6545 : }
6546 : break;
6547 : }
6548 5066726 : default:;
6549 : }
6550 5066726 : switch (TREE_CODE (_p1))
6551 : {
6552 4221126 : CASE_CONVERT:
6553 4221126 : {
6554 4221126 : tree _q40 = TREE_OPERAND (_p1, 0);
6555 4221126 : switch (TREE_CODE (_q40))
6556 : {
6557 499648 : case PLUS_EXPR:
6558 499648 : {
6559 499648 : tree _q50 = TREE_OPERAND (_q40, 0);
6560 499648 : tree _q51 = TREE_OPERAND (_q40, 1);
6561 499648 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || operand_equal_p (_q50, _q20, 0))
6562 : {
6563 2145 : {
6564 2145 : tree captures[3] ATTRIBUTE_UNUSED = { _q50, _q51, _q20 };
6565 2145 : tree res = generic_simplify_104 (loc, type, _p0, _p1, captures);
6566 2145 : if (res) return res;
6567 : }
6568 : }
6569 497576 : if ((_q51 == _q20 && ! TREE_SIDE_EFFECTS (_q51)) || operand_equal_p (_q51, _q20, 0))
6570 : {
6571 18 : {
6572 18 : tree captures[3] ATTRIBUTE_UNUSED = { _q51, _q50, _q20 };
6573 18 : tree res = generic_simplify_104 (loc, type, _p0, _p1, captures);
6574 18 : if (res) return res;
6575 : }
6576 : }
6577 : break;
6578 : }
6579 : default:;
6580 : }
6581 : break;
6582 : }
6583 : default:;
6584 : }
6585 : break;
6586 : }
6587 144260 : case NEGATE_EXPR:
6588 144260 : {
6589 144260 : tree _q20 = TREE_OPERAND (_p0, 0);
6590 144260 : if (integer_each_onep (_p1))
6591 : {
6592 41 : {
6593 41 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
6594 41 : tree res = generic_simplify_102 (loc, type, _p0, _p1, captures);
6595 41 : if (res) return res;
6596 : }
6597 : }
6598 : break;
6599 : }
6600 22894522 : default:;
6601 : }
6602 22894522 : {
6603 22894522 : tree _p0_pops[1];
6604 22894522 : if (tree_nop_convert (_p0, _p0_pops))
6605 : {
6606 4459740 : tree _q20 = _p0_pops[0];
6607 4459740 : switch (TREE_CODE (_q20))
6608 : {
6609 343953 : case PLUS_EXPR:
6610 343953 : {
6611 343953 : tree _q30 = TREE_OPERAND (_q20, 0);
6612 343953 : tree _q31 = TREE_OPERAND (_q20, 1);
6613 343953 : if (CONSTANT_CLASS_P (_q31))
6614 : {
6615 337059 : if (CONSTANT_CLASS_P (_p1))
6616 : {
6617 27 : {
6618 27 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _q31, _p1 };
6619 27 : tree res = generic_simplify_63 (loc, type, _p0, _p1, captures, PLUS_EXPR, MINUS_EXPR, MINUS_EXPR);
6620 27 : if (res) return res;
6621 : }
6622 : }
6623 : }
6624 : break;
6625 : }
6626 812 : case MINUS_EXPR:
6627 812 : {
6628 812 : tree _q30 = TREE_OPERAND (_q20, 0);
6629 812 : tree _q31 = TREE_OPERAND (_q20, 1);
6630 812 : if (CONSTANT_CLASS_P (_q31))
6631 : {
6632 0 : if (CONSTANT_CLASS_P (_p1))
6633 : {
6634 0 : {
6635 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _q31, _p1 };
6636 0 : tree res = generic_simplify_63 (loc, type, _p0, _p1, captures, MINUS_EXPR, PLUS_EXPR, MINUS_EXPR);
6637 0 : if (res) return res;
6638 : }
6639 : }
6640 : }
6641 812 : if (CONSTANT_CLASS_P (_q30))
6642 : {
6643 34 : if (CONSTANT_CLASS_P (_p1))
6644 : {
6645 0 : {
6646 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _q31, _p1 };
6647 0 : tree res = generic_simplify_64 (loc, type, _p0, _p1, captures, MINUS_EXPR);
6648 0 : if (res) return res;
6649 : }
6650 : }
6651 : }
6652 : break;
6653 : }
6654 : default:;
6655 : }
6656 : }
6657 : }
6658 22894495 : if (CONSTANT_CLASS_P (_p0))
6659 : {
6660 5571335 : switch (TREE_CODE (_p1))
6661 : {
6662 823 : case MINUS_EXPR:
6663 823 : {
6664 823 : tree _q30 = TREE_OPERAND (_p1, 0);
6665 823 : tree _q31 = TREE_OPERAND (_p1, 1);
6666 823 : if (CONSTANT_CLASS_P (_q30))
6667 : {
6668 639 : {
6669 639 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q30, _q31 };
6670 639 : tree res = generic_simplify_101 (loc, type, _p0, _p1, captures);
6671 639 : if (res) return res;
6672 : }
6673 : }
6674 : break;
6675 : }
6676 5570705 : default:;
6677 : }
6678 5570705 : {
6679 5570705 : tree _p1_pops[1];
6680 5570705 : if (tree_nop_convert (_p1, _p1_pops))
6681 : {
6682 1871301 : tree _q30 = _p1_pops[0];
6683 1871301 : switch (TREE_CODE (_q30))
6684 : {
6685 7305 : case MINUS_EXPR:
6686 7305 : {
6687 7305 : tree _q40 = TREE_OPERAND (_q30, 0);
6688 7305 : tree _q41 = TREE_OPERAND (_q30, 1);
6689 7305 : if (CONSTANT_CLASS_P (_q40))
6690 : {
6691 25 : {
6692 25 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q40, _q41 };
6693 25 : tree res = generic_simplify_101 (loc, type, _p0, _p1, captures);
6694 25 : if (res) return res;
6695 : }
6696 : }
6697 : break;
6698 : }
6699 : default:;
6700 : }
6701 : }
6702 : }
6703 : }
6704 22893840 : if (integer_all_onesp (_p0))
6705 : {
6706 1186640 : {
6707 1186640 : tree captures[1] ATTRIBUTE_UNUSED = { _p1 };
6708 1186640 : if (!TYPE_SATURATING (type)
6709 : )
6710 : {
6711 1186640 : if ((!FLOAT_TYPE_P (type) || flag_associative_math)
6712 2373280 : && !FIXED_POINT_TYPE_P (type)
6713 : )
6714 : {
6715 1186640 : if (TREE_CODE (type) != COMPLEX_TYPE
6716 : )
6717 : {
6718 1186638 : if (TREE_SIDE_EFFECTS (_p0)) goto next_after_fail1299;
6719 1186638 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1299;
6720 1186638 : {
6721 1186638 : tree res_op0;
6722 1186638 : res_op0 = captures[0];
6723 1186638 : tree _r;
6724 1186638 : _r = fold_build1_loc (loc, BIT_NOT_EXPR, type, res_op0);
6725 1186638 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 936, __FILE__, __LINE__, true);
6726 1186638 : return _r;
6727 : }
6728 : next_after_fail1299:;
6729 : }
6730 : }
6731 : }
6732 : }
6733 : }
6734 21707202 : switch (TREE_CODE (_p1))
6735 : {
6736 7235523 : CASE_CONVERT:
6737 7235523 : {
6738 7235523 : tree _q30 = TREE_OPERAND (_p1, 0);
6739 7235523 : switch (TREE_CODE (_q30))
6740 : {
6741 685298 : case PLUS_EXPR:
6742 685298 : {
6743 685298 : tree _q40 = TREE_OPERAND (_q30, 0);
6744 685298 : tree _q41 = TREE_OPERAND (_q30, 1);
6745 685298 : if ((_q40 == _p0 && ! TREE_SIDE_EFFECTS (_q40)) || operand_equal_p (_q40, _p0, 0))
6746 : {
6747 24 : {
6748 24 : tree captures[3] ATTRIBUTE_UNUSED = { _q40, _q41, _p0 };
6749 24 : tree res = generic_simplify_104 (loc, type, _p0, _p1, captures);
6750 24 : if (res) return res;
6751 : }
6752 : }
6753 685274 : if ((_q41 == _p0 && ! TREE_SIDE_EFFECTS (_q41)) || operand_equal_p (_q41, _p0, 0))
6754 : {
6755 8361 : {
6756 8361 : tree captures[3] ATTRIBUTE_UNUSED = { _q41, _q40, _p0 };
6757 8361 : tree res = generic_simplify_104 (loc, type, _p0, _p1, captures);
6758 8361 : if (res) return res;
6759 : }
6760 : }
6761 : break;
6762 : }
6763 : default:;
6764 : }
6765 : break;
6766 : }
6767 21699004 : default:;
6768 : }
6769 21699004 : switch (TREE_CODE (_p0))
6770 : {
6771 5064585 : CASE_CONVERT:
6772 5064585 : {
6773 5064585 : tree _q20 = TREE_OPERAND (_p0, 0);
6774 5064585 : switch (TREE_CODE (_p1))
6775 : {
6776 4219012 : CASE_CONVERT:
6777 4219012 : {
6778 4219012 : tree _q40 = TREE_OPERAND (_p1, 0);
6779 4219012 : switch (TREE_CODE (_q40))
6780 : {
6781 391657 : case POINTER_PLUS_EXPR:
6782 391657 : {
6783 391657 : tree _q50 = TREE_OPERAND (_q40, 0);
6784 391657 : tree _q51 = TREE_OPERAND (_q40, 1);
6785 391657 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || operand_equal_p (_q50, _q20, 0))
6786 : {
6787 2102 : {
6788 2102 : tree captures[3] ATTRIBUTE_UNUSED = { _q50, _q51, _q20 };
6789 2102 : if (!TYPE_SATURATING (type)
6790 : )
6791 : {
6792 2102 : if ((!FLOAT_TYPE_P (type) || flag_associative_math)
6793 4204 : && !FIXED_POINT_TYPE_P (type)
6794 : )
6795 : {
6796 2102 : if (INTEGRAL_TYPE_P (type)
6797 2102 : && TYPE_OVERFLOW_UNDEFINED (type)
6798 0 : && TREE_CODE (captures[1]) != INTEGER_CST
6799 2102 : && element_precision (type) <= element_precision (TREE_TYPE (captures[1]))
6800 : )
6801 : {
6802 0 : {
6803 0 : tree utype = unsigned_type_for (type);
6804 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1300;
6805 0 : {
6806 0 : tree res_op0;
6807 0 : {
6808 0 : tree _o1[1], _r1;
6809 0 : {
6810 0 : tree _o2[1], _r2;
6811 0 : _o2[0] = captures[1];
6812 0 : if (TREE_TYPE (_o2[0]) != utype)
6813 : {
6814 0 : _r2 = fold_build1_loc (loc, NOP_EXPR, utype, _o2[0]);
6815 : }
6816 : else
6817 : _r2 = _o2[0];
6818 0 : _o1[0] = _r2;
6819 : }
6820 0 : _r1 = fold_build1_loc (loc, NEGATE_EXPR, TREE_TYPE (_o1[0]), _o1[0]);
6821 0 : res_op0 = _r1;
6822 : }
6823 0 : tree _r;
6824 0 : _r = fold_build1_loc (loc, NOP_EXPR, type, res_op0);
6825 0 : if (TREE_SIDE_EFFECTS (captures[2]))
6826 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[2]), _r);
6827 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 937, __FILE__, __LINE__, true);
6828 0 : return _r;
6829 : }
6830 0 : next_after_fail1300:;
6831 : }
6832 : }
6833 : else
6834 : {
6835 2102 : if (element_precision (type) <= element_precision (TREE_TYPE (captures[1]))
6836 2102 : || (POINTER_TYPE_P (TREE_TYPE (captures[0]))
6837 0 : && TREE_CODE (captures[1]) == INTEGER_CST
6838 0 : && tree_int_cst_sign_bit (captures[1]) == 0)
6839 : )
6840 : {
6841 2102 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1301;
6842 2102 : {
6843 2102 : tree res_op0;
6844 2102 : {
6845 2102 : tree _o1[1], _r1;
6846 2102 : _o1[0] = captures[1];
6847 2102 : if (TREE_TYPE (_o1[0]) != type)
6848 : {
6849 2098 : _r1 = fold_build1_loc (loc, NOP_EXPR, type, _o1[0]);
6850 : }
6851 : else
6852 : _r1 = _o1[0];
6853 2102 : res_op0 = _r1;
6854 : }
6855 2102 : tree _r;
6856 2102 : _r = fold_build1_loc (loc, NEGATE_EXPR, type, res_op0);
6857 2102 : if (TREE_SIDE_EFFECTS (captures[2]))
6858 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[2]), _r);
6859 2102 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 938, __FILE__, __LINE__, true);
6860 2102 : return _r;
6861 : }
6862 0 : next_after_fail1301:;
6863 : }
6864 : }
6865 : }
6866 : }
6867 : }
6868 : }
6869 : break;
6870 : }
6871 : default:;
6872 : }
6873 : break;
6874 : }
6875 5062483 : default:;
6876 : }
6877 5062483 : switch (TREE_CODE (_q20))
6878 : {
6879 402153 : case PLUS_EXPR:
6880 402153 : {
6881 402153 : tree _q30 = TREE_OPERAND (_q20, 0);
6882 402153 : tree _q31 = TREE_OPERAND (_q20, 1);
6883 402153 : switch (TREE_CODE (_p1))
6884 : {
6885 385302 : CASE_CONVERT:
6886 385302 : {
6887 385302 : tree _q60 = TREE_OPERAND (_p1, 0);
6888 385302 : switch (TREE_CODE (_q60))
6889 : {
6890 209851 : case PLUS_EXPR:
6891 209851 : {
6892 209851 : tree _q70 = TREE_OPERAND (_q60, 0);
6893 209851 : tree _q71 = TREE_OPERAND (_q60, 1);
6894 209851 : if ((_q70 == _q30 && ! TREE_SIDE_EFFECTS (_q70)) || operand_equal_p (_q70, _q30, 0))
6895 : {
6896 5420 : {
6897 5420 : tree captures[4] ATTRIBUTE_UNUSED = { _q30, _q31, _q71, _q30 };
6898 5420 : tree res = generic_simplify_105 (loc, type, _p0, _p1, captures);
6899 5420 : if (res) return res;
6900 : }
6901 : }
6902 204431 : if ((_q71 == _q30 && ! TREE_SIDE_EFFECTS (_q71)) || operand_equal_p (_q71, _q30, 0))
6903 : {
6904 70 : {
6905 70 : tree captures[4] ATTRIBUTE_UNUSED = { _q30, _q31, _q70, _q30 };
6906 70 : tree res = generic_simplify_105 (loc, type, _p0, _p1, captures);
6907 70 : if (res) return res;
6908 : }
6909 : }
6910 204361 : if ((_q70 == _q31 && ! TREE_SIDE_EFFECTS (_q70)) || operand_equal_p (_q70, _q31, 0))
6911 : {
6912 90 : {
6913 90 : tree captures[4] ATTRIBUTE_UNUSED = { _q31, _q30, _q71, _q31 };
6914 90 : tree res = generic_simplify_105 (loc, type, _p0, _p1, captures);
6915 90 : if (res) return res;
6916 : }
6917 : }
6918 204271 : if ((_q71 == _q31 && ! TREE_SIDE_EFFECTS (_q71)) || operand_equal_p (_q71, _q31, 0))
6919 : {
6920 153356 : {
6921 153356 : tree captures[4] ATTRIBUTE_UNUSED = { _q31, _q30, _q70, _q31 };
6922 153356 : tree res = generic_simplify_105 (loc, type, _p0, _p1, captures);
6923 153356 : if (res) return res;
6924 : }
6925 : }
6926 : break;
6927 : }
6928 : default:;
6929 : }
6930 : break;
6931 : }
6932 : default:;
6933 : }
6934 : break;
6935 : }
6936 94542 : case POINTER_PLUS_EXPR:
6937 94542 : {
6938 94542 : tree _q30 = TREE_OPERAND (_q20, 0);
6939 94542 : tree _q31 = TREE_OPERAND (_q20, 1);
6940 94542 : switch (TREE_CODE (_p1))
6941 : {
6942 93468 : CASE_CONVERT:
6943 93468 : {
6944 93468 : tree _q60 = TREE_OPERAND (_p1, 0);
6945 93468 : switch (TREE_CODE (_q60))
6946 : {
6947 55413 : case POINTER_PLUS_EXPR:
6948 55413 : {
6949 55413 : tree _q70 = TREE_OPERAND (_q60, 0);
6950 55413 : tree _q71 = TREE_OPERAND (_q60, 1);
6951 55413 : if ((_q70 == _q30 && ! TREE_SIDE_EFFECTS (_q70)) || operand_equal_p (_q70, _q30, 0))
6952 : {
6953 11618 : {
6954 11618 : tree captures[4] ATTRIBUTE_UNUSED = { _q30, _q31, _q71, _q30 };
6955 11618 : if (!TYPE_SATURATING (type)
6956 : )
6957 : {
6958 11618 : if ((!FLOAT_TYPE_P (type) || flag_associative_math)
6959 23236 : && !FIXED_POINT_TYPE_P (type)
6960 : )
6961 : {
6962 11618 : if (INTEGRAL_TYPE_P (type)
6963 11618 : && TYPE_OVERFLOW_UNDEFINED (type)
6964 11618 : && element_precision (type) <= element_precision (TREE_TYPE (captures[1]))
6965 : )
6966 : {
6967 0 : {
6968 0 : tree utype = unsigned_type_for (type);
6969 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1302;
6970 0 : {
6971 0 : tree res_op0;
6972 0 : {
6973 0 : tree _o1[2], _r1;
6974 0 : {
6975 0 : tree _o2[1], _r2;
6976 0 : _o2[0] = captures[1];
6977 0 : if (TREE_TYPE (_o2[0]) != utype)
6978 : {
6979 0 : _r2 = fold_build1_loc (loc, NOP_EXPR, utype, _o2[0]);
6980 : }
6981 : else
6982 : _r2 = _o2[0];
6983 0 : _o1[0] = _r2;
6984 : }
6985 0 : {
6986 0 : tree _o2[1], _r2;
6987 0 : _o2[0] = captures[2];
6988 0 : if (TREE_TYPE (_o2[0]) != utype)
6989 : {
6990 0 : _r2 = fold_build1_loc (loc, NOP_EXPR, utype, _o2[0]);
6991 : }
6992 : else
6993 : _r2 = _o2[0];
6994 0 : _o1[1] = _r2;
6995 : }
6996 0 : _r1 = fold_build2_loc (loc, MINUS_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
6997 0 : res_op0 = _r1;
6998 : }
6999 0 : tree _r;
7000 0 : _r = fold_build1_loc (loc, NOP_EXPR, type, res_op0);
7001 0 : if (TREE_SIDE_EFFECTS (captures[3]))
7002 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[3]), _r);
7003 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 939, __FILE__, __LINE__, true);
7004 0 : return _r;
7005 : }
7006 0 : next_after_fail1302:;
7007 : }
7008 : }
7009 : else
7010 : {
7011 11618 : if (element_precision (type) <= element_precision (TREE_TYPE (captures[1]))
7012 11618 : || (POINTER_TYPE_P (TREE_TYPE (captures[0]))
7013 0 : && TREE_CODE (captures[1]) == INTEGER_CST
7014 0 : && tree_int_cst_sign_bit (captures[1]) == 0
7015 0 : && TREE_CODE (captures[2]) == INTEGER_CST
7016 0 : && tree_int_cst_sign_bit (captures[2]) == 0)
7017 : )
7018 : {
7019 11618 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1303;
7020 11618 : {
7021 11618 : tree res_op0;
7022 11618 : {
7023 11618 : tree _o1[1], _r1;
7024 11618 : _o1[0] = captures[1];
7025 11618 : if (TREE_TYPE (_o1[0]) != type)
7026 : {
7027 11565 : _r1 = fold_build1_loc (loc, NOP_EXPR, type, _o1[0]);
7028 : }
7029 : else
7030 : _r1 = _o1[0];
7031 11618 : res_op0 = _r1;
7032 : }
7033 11618 : tree res_op1;
7034 11618 : {
7035 11618 : tree _o1[1], _r1;
7036 11618 : _o1[0] = captures[2];
7037 11618 : if (TREE_TYPE (_o1[0]) != type)
7038 : {
7039 11565 : _r1 = fold_build1_loc (loc, NOP_EXPR, type, _o1[0]);
7040 : }
7041 : else
7042 : _r1 = _o1[0];
7043 11618 : res_op1 = _r1;
7044 : }
7045 11618 : tree _r;
7046 11618 : _r = fold_build2_loc (loc, MINUS_EXPR, type, res_op0, res_op1);
7047 11618 : if (TREE_SIDE_EFFECTS (captures[3]))
7048 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[3]), _r);
7049 11618 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 940, __FILE__, __LINE__, true);
7050 11618 : return _r;
7051 : }
7052 0 : next_after_fail1303:;
7053 : }
7054 : }
7055 : }
7056 : }
7057 : }
7058 : }
7059 : break;
7060 : }
7061 : default:;
7062 : }
7063 : break;
7064 : }
7065 : default:;
7066 : }
7067 : break;
7068 : }
7069 : default:;
7070 : }
7071 : break;
7072 : }
7073 1529275 : case MULT_EXPR:
7074 1529275 : {
7075 1529275 : tree _q20 = TREE_OPERAND (_p0, 0);
7076 1529275 : tree _q21 = TREE_OPERAND (_p0, 1);
7077 1529275 : switch (TREE_CODE (_p1))
7078 : {
7079 718951 : case MULT_EXPR:
7080 718951 : {
7081 718951 : tree _q50 = TREE_OPERAND (_p1, 0);
7082 718951 : tree _q51 = TREE_OPERAND (_p1, 1);
7083 718951 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
7084 : {
7085 3901 : {
7086 3901 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _p1, _q51 };
7087 3901 : tree res = generic_simplify_71 (loc, type, _p0, _p1, captures, MINUS_EXPR);
7088 3901 : if (res) return res;
7089 : }
7090 : }
7091 717722 : if ((_q51 == _q20 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q20, 0) && types_match (_q51, _q20)))
7092 : {
7093 17285 : {
7094 17285 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _p1, _q50 };
7095 17285 : tree res = generic_simplify_71 (loc, type, _p0, _p1, captures, MINUS_EXPR);
7096 17285 : if (res) return res;
7097 : }
7098 : }
7099 700437 : if ((_q50 == _q21 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q21, 0) && types_match (_q50, _q21)))
7100 : {
7101 35392 : {
7102 35392 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q21, _q20, _p1, _q51 };
7103 35392 : tree res = generic_simplify_71 (loc, type, _p0, _p1, captures, MINUS_EXPR);
7104 35392 : if (res) return res;
7105 : }
7106 : }
7107 665120 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
7108 : {
7109 220421 : {
7110 220421 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q21, _q20, _p1, _q50 };
7111 220421 : tree res = generic_simplify_71 (loc, type, _p0, _p1, captures, MINUS_EXPR);
7112 220421 : if (res) return res;
7113 : }
7114 : }
7115 : break;
7116 : }
7117 : default:;
7118 : }
7119 : break;
7120 : }
7121 21274127 : default:;
7122 : }
7123 21274127 : switch (TREE_CODE (_p1))
7124 : {
7125 1795528 : case MULT_EXPR:
7126 1795528 : {
7127 1795528 : tree _q30 = TREE_OPERAND (_p1, 0);
7128 1795528 : tree _q31 = TREE_OPERAND (_p1, 1);
7129 1795528 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || (operand_equal_p (_q30, _p0, 0) && types_match (_q30, _p0)))
7130 : {
7131 3876 : {
7132 3876 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p1, _q31 };
7133 3876 : tree res = generic_simplify_72 (loc, type, _p0, _p1, captures, MINUS_EXPR);
7134 3876 : if (res) return res;
7135 : }
7136 : }
7137 1791696 : if ((_q31 == _p0 && ! TREE_SIDE_EFFECTS (_q31)) || (operand_equal_p (_q31, _p0, 0) && types_match (_q31, _p0)))
7138 : {
7139 1970 : {
7140 1970 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p1, _q30 };
7141 1970 : tree res = generic_simplify_72 (loc, type, _p0, _p1, captures, MINUS_EXPR);
7142 1970 : if (res) return res;
7143 : }
7144 : }
7145 : break;
7146 : }
7147 21268424 : default:;
7148 : }
7149 21268424 : switch (TREE_CODE (_p0))
7150 : {
7151 1260398 : case MULT_EXPR:
7152 1260398 : {
7153 1260398 : tree _q20 = TREE_OPERAND (_p0, 0);
7154 1260398 : tree _q21 = TREE_OPERAND (_p0, 1);
7155 1260398 : if ((_p1 == _q20 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q20, 0) && types_match (_p1, _q20)))
7156 : {
7157 65661 : {
7158 65661 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
7159 65661 : tree res = generic_simplify_73 (loc, type, _p0, _p1, captures, MINUS_EXPR);
7160 65661 : if (res) return res;
7161 : }
7162 : }
7163 1195029 : if ((_p1 == _q21 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q21, 0) && types_match (_p1, _q21)))
7164 : {
7165 632 : {
7166 632 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q21, _q20 };
7167 632 : tree res = generic_simplify_73 (loc, type, _p0, _p1, captures, MINUS_EXPR);
7168 632 : if (res) return res;
7169 : }
7170 : }
7171 : break;
7172 : }
7173 21202956 : default:;
7174 : }
7175 21202956 : switch (TREE_CODE (_p1))
7176 : {
7177 1789825 : case MULT_EXPR:
7178 1789825 : {
7179 1789825 : tree _q30 = TREE_OPERAND (_p1, 0);
7180 1789825 : tree _q31 = TREE_OPERAND (_p1, 1);
7181 1789825 : switch (TREE_CODE (_q30))
7182 : {
7183 78518 : case MINUS_EXPR:
7184 78518 : {
7185 78518 : tree _q40 = TREE_OPERAND (_q30, 0);
7186 78518 : tree _q41 = TREE_OPERAND (_q30, 1);
7187 78518 : if ((_q40 == _p0 && ! TREE_SIDE_EFFECTS (_q40)) || (operand_equal_p (_q40, _p0, 0) && types_match (_q40, _p0)))
7188 : {
7189 19 : if (tree_zero_one_valued_p (_q31))
7190 : {
7191 0 : {
7192 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q41, _q31 };
7193 0 : tree res = generic_simplify_106 (loc, type, _p0, _p1, captures);
7194 0 : if (res) return res;
7195 : }
7196 : }
7197 : }
7198 : break;
7199 : }
7200 1789825 : default:;
7201 : }
7202 1789825 : if (tree_zero_one_valued_p (_q30))
7203 : {
7204 1228 : switch (TREE_CODE (_q31))
7205 : {
7206 9 : case MINUS_EXPR:
7207 9 : {
7208 9 : tree _q50 = TREE_OPERAND (_q31, 0);
7209 9 : tree _q51 = TREE_OPERAND (_q31, 1);
7210 9 : if ((_q50 == _p0 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _p0, 0) && types_match (_q50, _p0)))
7211 : {
7212 9 : {
7213 9 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q51, _q30 };
7214 9 : tree res = generic_simplify_106 (loc, type, _p0, _p1, captures);
7215 9 : if (res) return res;
7216 : }
7217 : }
7218 : break;
7219 : }
7220 : default:;
7221 : }
7222 : }
7223 : break;
7224 : }
7225 21202954 : default:;
7226 : }
7227 21202954 : switch (TREE_CODE (_p0))
7228 : {
7229 92 : case BIT_AND_EXPR:
7230 92 : {
7231 92 : tree _q20 = TREE_OPERAND (_p0, 0);
7232 92 : tree _q21 = TREE_OPERAND (_p0, 1);
7233 92 : switch (TREE_CODE (_q21))
7234 : {
7235 67 : case INTEGER_CST:
7236 67 : {
7237 67 : switch (TREE_CODE (_p1))
7238 : {
7239 28 : case BIT_AND_EXPR:
7240 28 : {
7241 28 : tree _q50 = TREE_OPERAND (_p1, 0);
7242 28 : tree _q51 = TREE_OPERAND (_p1, 1);
7243 28 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
7244 : {
7245 6 : if (integer_pow2p (_q51))
7246 : {
7247 6 : {
7248 6 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q51 };
7249 12 : if (INTEGRAL_TYPE_P (type)
7250 12 : && TYPE_PRECISION (type) <= MAX_FIXED_MODE_SIZE
7251 12 : && wi::to_wide (captures[1]) + 1 == wi::to_wide (captures[2])
7252 : )
7253 : {
7254 4 : {
7255 4 : int width = wi::exact_log2 (wi::to_wide (captures[2])) + 1;
7256 4 : tree ntype = NULL_TREE;
7257 4 : if (width > 0 && width < TYPE_PRECISION (type))
7258 4 : ntype = build_nonstandard_integer_type (width, SIGNED);
7259 4 : if (ntype && type_has_mode_precision_p (ntype)
7260 : )
7261 : {
7262 4 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail1304;
7263 4 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1304;
7264 4 : {
7265 4 : tree res_op0;
7266 4 : {
7267 4 : tree _o1[1], _r1;
7268 4 : _o1[0] = captures[0];
7269 4 : if (TREE_TYPE (_o1[0]) != ntype)
7270 : {
7271 4 : _r1 = fold_build1_loc (loc, NOP_EXPR, ntype, _o1[0]);
7272 : }
7273 : else
7274 : _r1 = _o1[0];
7275 4 : res_op0 = _r1;
7276 : }
7277 4 : tree _r;
7278 4 : _r = fold_build1_loc (loc, NOP_EXPR, type, res_op0);
7279 4 : if (TREE_SIDE_EFFECTS (captures[1]))
7280 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
7281 4 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 941, __FILE__, __LINE__, true);
7282 4 : return _r;
7283 : }
7284 2 : next_after_fail1304:;
7285 : }
7286 : }
7287 : }
7288 : }
7289 : }
7290 : }
7291 : break;
7292 : }
7293 : default:;
7294 : }
7295 : break;
7296 : }
7297 : default:;
7298 : }
7299 : break;
7300 : }
7301 0 : case VEC_COND_EXPR:
7302 0 : {
7303 0 : tree _q20 = TREE_OPERAND (_p0, 0);
7304 0 : tree _q21 = TREE_OPERAND (_p0, 1);
7305 0 : tree _q22 = TREE_OPERAND (_p0, 2);
7306 0 : switch (TREE_CODE (_p1))
7307 : {
7308 0 : case VEC_COND_EXPR:
7309 0 : {
7310 0 : tree _q60 = TREE_OPERAND (_p1, 0);
7311 0 : tree _q61 = TREE_OPERAND (_p1, 1);
7312 0 : tree _q62 = TREE_OPERAND (_p1, 2);
7313 0 : if ((_q60 == _q20 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _q20, 0) && types_match (_q60, _q20)))
7314 : {
7315 0 : {
7316 0 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q22, _p1, _q61, _q62 };
7317 0 : if (VECTOR_TYPE_P (type)
7318 0 : && (TREE_CODE_CLASS (MINUS_EXPR) != tcc_comparison
7319 : || types_match (type, TREE_TYPE (captures[2]))
7320 : || expand_vec_cond_expr_p (type, TREE_TYPE (captures[1]))
7321 : || (optimize_vectors_before_lowering_p ()
7322 : && !expand_vec_cond_expr_p (TREE_TYPE (captures[2]), TREE_TYPE (captures[1]))))
7323 : )
7324 : {
7325 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1305;
7326 0 : {
7327 0 : tree res_op0;
7328 0 : res_op0 = captures[1];
7329 0 : tree res_op1;
7330 0 : {
7331 0 : tree _o1[2], _r1;
7332 0 : _o1[0] = captures[2];
7333 0 : _o1[1] = captures[5];
7334 0 : _r1 = fold_build2_loc (loc, MINUS_EXPR, type, _o1[0], _o1[1]);
7335 0 : if (EXPR_P (_r1))
7336 0 : goto next_after_fail1305;
7337 0 : res_op1 = _r1;
7338 : }
7339 0 : tree res_op2;
7340 0 : {
7341 0 : tree _o1[2], _r1;
7342 0 : _o1[0] = captures[3];
7343 0 : _o1[1] = captures[6];
7344 0 : _r1 = fold_build2_loc (loc, MINUS_EXPR, type, _o1[0], _o1[1]);
7345 0 : if (EXPR_P (_r1))
7346 0 : goto next_after_fail1305;
7347 0 : res_op2 = _r1;
7348 : }
7349 0 : tree _r;
7350 0 : _r = fold_build3_loc (loc, VEC_COND_EXPR, type, res_op0, res_op1, res_op2);
7351 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 898, __FILE__, __LINE__, true);
7352 0 : return _r;
7353 : }
7354 0 : next_after_fail1305:;
7355 : }
7356 : }
7357 : }
7358 : break;
7359 : }
7360 0 : default:;
7361 : }
7362 0 : {
7363 0 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q22, _p1 };
7364 0 : if (VECTOR_TYPE_P (type)
7365 0 : && (TREE_CODE_CLASS (MINUS_EXPR) != tcc_comparison
7366 : || types_match (type, TREE_TYPE (captures[2]))
7367 : || expand_vec_cond_expr_p (type, TREE_TYPE (captures[1]))
7368 : || (optimize_vectors_before_lowering_p ()
7369 : && !expand_vec_cond_expr_p (TREE_TYPE (captures[2]), TREE_TYPE (captures[1]))))
7370 : )
7371 : {
7372 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1306;
7373 0 : {
7374 0 : if (! tree_invariant_p (captures[4])) goto next_after_fail1306;
7375 0 : tree res_op0;
7376 0 : res_op0 = captures[1];
7377 0 : tree res_op1;
7378 0 : {
7379 0 : tree _o1[2], _r1;
7380 0 : _o1[0] = captures[2];
7381 0 : _o1[1] = unshare_expr (captures[4]);
7382 0 : _r1 = fold_build2_loc (loc, MINUS_EXPR, type, _o1[0], _o1[1]);
7383 0 : if (EXPR_P (_r1))
7384 0 : goto next_after_fail1306;
7385 0 : res_op1 = _r1;
7386 : }
7387 0 : tree res_op2;
7388 0 : {
7389 0 : tree _o1[2], _r1;
7390 0 : _o1[0] = captures[3];
7391 0 : _o1[1] = captures[4];
7392 0 : _r1 = fold_build2_loc (loc, MINUS_EXPR, type, _o1[0], _o1[1]);
7393 0 : if (EXPR_P (_r1))
7394 0 : goto next_after_fail1306;
7395 0 : res_op2 = _r1;
7396 : }
7397 0 : tree _r;
7398 0 : _r = fold_build3_loc (loc, VEC_COND_EXPR, type, res_op0, res_op1, res_op2);
7399 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 900, __FILE__, __LINE__, true);
7400 0 : return _r;
7401 : }
7402 0 : next_after_fail1306:;
7403 : }
7404 : }
7405 0 : break;
7406 : }
7407 21202950 : default:;
7408 : }
7409 21202950 : if (integer_zerop (_p0))
7410 : {
7411 304296 : {
7412 304296 : tree captures[1] ATTRIBUTE_UNUSED = { _p1 };
7413 304296 : if (TREE_SIDE_EFFECTS (_p0)) goto next_after_fail1307;
7414 304296 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1307;
7415 304296 : {
7416 304296 : tree res_op0;
7417 304296 : res_op0 = captures[0];
7418 304296 : tree _r;
7419 304296 : _r = fold_build1_loc (loc, NEGATE_EXPR, type, res_op0);
7420 304296 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 942, __FILE__, __LINE__, true);
7421 304296 : return _r;
7422 : }
7423 : next_after_fail1307:;
7424 : }
7425 : }
7426 20898654 : if (real_zerop (_p0))
7427 : {
7428 182 : {
7429 182 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
7430 182 : if (fold_real_zero_addition_p (type, captures[1], captures[0], 0)
7431 : )
7432 : {
7433 55 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1308;
7434 55 : {
7435 55 : tree res_op0;
7436 55 : res_op0 = captures[1];
7437 55 : tree _r;
7438 55 : _r = fold_build1_loc (loc, NEGATE_EXPR, type, res_op0);
7439 55 : if (TREE_SIDE_EFFECTS (captures[0]))
7440 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[0]), _r);
7441 55 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 943, __FILE__, __LINE__, true);
7442 55 : return _r;
7443 : }
7444 0 : next_after_fail1308:;
7445 : }
7446 : }
7447 : }
7448 20898599 : switch (TREE_CODE (_p1))
7449 : {
7450 4 : case VEC_COND_EXPR:
7451 4 : {
7452 4 : tree _q30 = TREE_OPERAND (_p1, 0);
7453 4 : tree _q31 = TREE_OPERAND (_p1, 1);
7454 4 : tree _q32 = TREE_OPERAND (_p1, 2);
7455 4 : {
7456 4 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _p1, _q30, _q31, _q32 };
7457 4 : if (VECTOR_TYPE_P (type)
7458 4 : && (TREE_CODE_CLASS (MINUS_EXPR) != tcc_comparison
7459 : || types_match (type, TREE_TYPE (captures[3]))
7460 : || expand_vec_cond_expr_p (type, TREE_TYPE (captures[2]))
7461 : || (optimize_vectors_before_lowering_p ()
7462 : && !expand_vec_cond_expr_p (TREE_TYPE (captures[3]), TREE_TYPE (captures[2]))))
7463 : )
7464 : {
7465 4 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1309;
7466 4 : {
7467 4 : if (! tree_invariant_p (captures[0])) goto next_after_fail1309;
7468 0 : tree res_op0;
7469 0 : res_op0 = captures[2];
7470 0 : tree res_op1;
7471 0 : {
7472 0 : tree _o1[2], _r1;
7473 0 : _o1[0] = unshare_expr (captures[0]);
7474 0 : _o1[1] = captures[3];
7475 0 : _r1 = fold_build2_loc (loc, MINUS_EXPR, type, _o1[0], _o1[1]);
7476 0 : if (EXPR_P (_r1))
7477 0 : goto next_after_fail1309;
7478 0 : res_op1 = _r1;
7479 : }
7480 0 : tree res_op2;
7481 0 : {
7482 0 : tree _o1[2], _r1;
7483 0 : _o1[0] = captures[0];
7484 0 : _o1[1] = captures[4];
7485 0 : _r1 = fold_build2_loc (loc, MINUS_EXPR, type, _o1[0], _o1[1]);
7486 0 : if (EXPR_P (_r1))
7487 0 : goto next_after_fail1309;
7488 0 : res_op2 = _r1;
7489 : }
7490 0 : tree _r;
7491 0 : _r = fold_build3_loc (loc, VEC_COND_EXPR, type, res_op0, res_op1, res_op2);
7492 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 901, __FILE__, __LINE__, true);
7493 0 : return _r;
7494 : }
7495 4 : next_after_fail1309:;
7496 : }
7497 : }
7498 4 : if (integer_each_onep (_q31))
7499 : {
7500 0 : if (integer_zerop (_q32))
7501 : {
7502 0 : {
7503 0 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _p1, _q30, _q31, _q32 };
7504 0 : tree res = generic_simplify_107 (loc, type, _p0, _p1, captures);
7505 0 : if (res) return res;
7506 : }
7507 : }
7508 : }
7509 : break;
7510 : }
7511 121148 : case VIEW_CONVERT_EXPR:
7512 121148 : {
7513 121148 : tree _q30 = TREE_OPERAND (_p1, 0);
7514 121148 : switch (TREE_CODE (_q30))
7515 : {
7516 0 : case VEC_COND_EXPR:
7517 0 : {
7518 0 : tree _q40 = TREE_OPERAND (_q30, 0);
7519 0 : tree _q41 = TREE_OPERAND (_q30, 1);
7520 0 : tree _q42 = TREE_OPERAND (_q30, 2);
7521 0 : if (integer_each_onep (_q41))
7522 : {
7523 0 : if (integer_zerop (_q42))
7524 : {
7525 0 : {
7526 0 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q30, _q40, _q41, _q42 };
7527 0 : tree res = generic_simplify_107 (loc, type, _p0, _p1, captures);
7528 0 : if (res) return res;
7529 : }
7530 : }
7531 : }
7532 : break;
7533 : }
7534 : default:;
7535 : }
7536 : break;
7537 : }
7538 20898599 : default:;
7539 : }
7540 20898599 : switch (TREE_CODE (_p0))
7541 : {
7542 116501 : case RDIV_EXPR:
7543 116501 : {
7544 116501 : tree _q20 = TREE_OPERAND (_p0, 0);
7545 116501 : tree _q21 = TREE_OPERAND (_p0, 1);
7546 116501 : switch (TREE_CODE (_p1))
7547 : {
7548 19493 : case RDIV_EXPR:
7549 19493 : {
7550 19493 : tree _q50 = TREE_OPERAND (_p1, 0);
7551 19493 : tree _q51 = TREE_OPERAND (_p1, 1);
7552 19493 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
7553 : {
7554 19473 : {
7555 19473 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q50 };
7556 19473 : tree res = generic_simplify_79 (loc, type, _p0, _p1, captures, MINUS_EXPR);
7557 19473 : if (res) return res;
7558 : }
7559 : }
7560 : break;
7561 : }
7562 : default:;
7563 : }
7564 : break;
7565 : }
7566 1383928 : case PLUS_EXPR:
7567 1383928 : {
7568 1383928 : tree _q20 = TREE_OPERAND (_p0, 0);
7569 1383928 : tree _q21 = TREE_OPERAND (_p0, 1);
7570 1383928 : switch (TREE_CODE (_q20))
7571 : {
7572 59601 : case CALL_EXPR:
7573 59601 : switch (get_call_combined_fn (_q20))
7574 : {
7575 4 : case CFN_BUILT_IN_POPCOUNT:
7576 4 : if (call_expr_nargs (_q20) == 1)
7577 : {
7578 4 : tree _q30 = CALL_EXPR_ARG (_q20, 0);
7579 4 : switch (TREE_CODE (_q21))
7580 : {
7581 4 : case CALL_EXPR:
7582 4 : switch (get_call_combined_fn (_q21))
7583 : {
7584 4 : case CFN_BUILT_IN_POPCOUNT:
7585 4 : if (call_expr_nargs (_q21) == 1)
7586 : {
7587 4 : tree _q50 = CALL_EXPR_ARG (_q21, 0);
7588 4 : switch (TREE_CODE (_p1))
7589 : {
7590 4 : case CALL_EXPR:
7591 4 : switch (get_call_combined_fn (_p1))
7592 : {
7593 4 : case CFN_BUILT_IN_POPCOUNT:
7594 4 : if (call_expr_nargs (_p1) == 1)
7595 : {
7596 4 : tree _q70 = CALL_EXPR_ARG (_p1, 0);
7597 4 : switch (TREE_CODE (_q70))
7598 : {
7599 2 : case BIT_AND_EXPR:
7600 2 : {
7601 2 : tree _q80 = TREE_OPERAND (_q70, 0);
7602 2 : tree _q81 = TREE_OPERAND (_q70, 1);
7603 2 : if ((_q80 == _q30 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q30, 0) && types_match (_q80, _q30)))
7604 : {
7605 1 : if ((_q81 == _q50 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q50, 0) && types_match (_q81, _q50)))
7606 : {
7607 1 : {
7608 1 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q21, _q50, _p1, _q70 };
7609 1 : tree res = generic_simplify_109 (loc, type, _p0, _p1, captures, BIT_AND_EXPR, BIT_IOR_EXPR, CFN_BUILT_IN_POPCOUNT);
7610 1 : if (res) return res;
7611 : }
7612 : }
7613 : }
7614 1 : if ((_q80 == _q50 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q50, 0) && types_match (_q80, _q50)))
7615 : {
7616 1 : if ((_q81 == _q30 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q30, 0) && types_match (_q81, _q30)))
7617 : {
7618 1 : {
7619 1 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q21, _q50, _p1, _q70 };
7620 1 : tree res = generic_simplify_109 (loc, type, _p0, _p1, captures, BIT_AND_EXPR, BIT_IOR_EXPR, CFN_BUILT_IN_POPCOUNT);
7621 1 : if (res) return res;
7622 : }
7623 : }
7624 : }
7625 : break;
7626 : }
7627 2 : case BIT_IOR_EXPR:
7628 2 : {
7629 2 : tree _q80 = TREE_OPERAND (_q70, 0);
7630 2 : tree _q81 = TREE_OPERAND (_q70, 1);
7631 2 : if ((_q80 == _q30 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q30, 0) && types_match (_q80, _q30)))
7632 : {
7633 1 : if ((_q81 == _q50 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q50, 0) && types_match (_q81, _q50)))
7634 : {
7635 1 : {
7636 1 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q21, _q50, _p1, _q70 };
7637 1 : tree res = generic_simplify_109 (loc, type, _p0, _p1, captures, BIT_IOR_EXPR, BIT_AND_EXPR, CFN_BUILT_IN_POPCOUNT);
7638 1 : if (res) return res;
7639 : }
7640 : }
7641 : }
7642 1 : if ((_q80 == _q50 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q50, 0) && types_match (_q80, _q50)))
7643 : {
7644 1 : if ((_q81 == _q30 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q30, 0) && types_match (_q81, _q30)))
7645 : {
7646 1 : {
7647 1 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q21, _q50, _p1, _q70 };
7648 1 : tree res = generic_simplify_109 (loc, type, _p0, _p1, captures, BIT_IOR_EXPR, BIT_AND_EXPR, CFN_BUILT_IN_POPCOUNT);
7649 1 : if (res) return res;
7650 : }
7651 : }
7652 : }
7653 : break;
7654 : }
7655 : default:;
7656 : }
7657 : }
7658 : break;
7659 : default:;
7660 : }
7661 : break;
7662 : default:;
7663 : }
7664 : }
7665 : break;
7666 : default:;
7667 : }
7668 : break;
7669 : default:;
7670 : }
7671 : }
7672 : break;
7673 0 : case CFN_BUILT_IN_POPCOUNTLL:
7674 0 : if (call_expr_nargs (_q20) == 1)
7675 : {
7676 0 : tree _q30 = CALL_EXPR_ARG (_q20, 0);
7677 0 : switch (TREE_CODE (_q21))
7678 : {
7679 0 : case CALL_EXPR:
7680 0 : switch (get_call_combined_fn (_q21))
7681 : {
7682 0 : case CFN_BUILT_IN_POPCOUNTLL:
7683 0 : if (call_expr_nargs (_q21) == 1)
7684 : {
7685 0 : tree _q50 = CALL_EXPR_ARG (_q21, 0);
7686 0 : switch (TREE_CODE (_p1))
7687 : {
7688 0 : case CALL_EXPR:
7689 0 : switch (get_call_combined_fn (_p1))
7690 : {
7691 0 : case CFN_BUILT_IN_POPCOUNTLL:
7692 0 : if (call_expr_nargs (_p1) == 1)
7693 : {
7694 0 : tree _q70 = CALL_EXPR_ARG (_p1, 0);
7695 0 : switch (TREE_CODE (_q70))
7696 : {
7697 0 : case BIT_AND_EXPR:
7698 0 : {
7699 0 : tree _q80 = TREE_OPERAND (_q70, 0);
7700 0 : tree _q81 = TREE_OPERAND (_q70, 1);
7701 0 : if ((_q80 == _q30 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q30, 0) && types_match (_q80, _q30)))
7702 : {
7703 0 : if ((_q81 == _q50 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q50, 0) && types_match (_q81, _q50)))
7704 : {
7705 0 : {
7706 0 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q21, _q50, _p1, _q70 };
7707 0 : tree res = generic_simplify_109 (loc, type, _p0, _p1, captures, BIT_AND_EXPR, BIT_IOR_EXPR, CFN_BUILT_IN_POPCOUNTLL);
7708 0 : if (res) return res;
7709 : }
7710 : }
7711 : }
7712 0 : if ((_q80 == _q50 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q50, 0) && types_match (_q80, _q50)))
7713 : {
7714 0 : if ((_q81 == _q30 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q30, 0) && types_match (_q81, _q30)))
7715 : {
7716 0 : {
7717 0 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q21, _q50, _p1, _q70 };
7718 0 : tree res = generic_simplify_109 (loc, type, _p0, _p1, captures, BIT_AND_EXPR, BIT_IOR_EXPR, CFN_BUILT_IN_POPCOUNTLL);
7719 0 : if (res) return res;
7720 : }
7721 : }
7722 : }
7723 : break;
7724 : }
7725 0 : case BIT_IOR_EXPR:
7726 0 : {
7727 0 : tree _q80 = TREE_OPERAND (_q70, 0);
7728 0 : tree _q81 = TREE_OPERAND (_q70, 1);
7729 0 : if ((_q80 == _q30 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q30, 0) && types_match (_q80, _q30)))
7730 : {
7731 0 : if ((_q81 == _q50 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q50, 0) && types_match (_q81, _q50)))
7732 : {
7733 0 : {
7734 0 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q21, _q50, _p1, _q70 };
7735 0 : tree res = generic_simplify_109 (loc, type, _p0, _p1, captures, BIT_IOR_EXPR, BIT_AND_EXPR, CFN_BUILT_IN_POPCOUNTLL);
7736 0 : if (res) return res;
7737 : }
7738 : }
7739 : }
7740 0 : if ((_q80 == _q50 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q50, 0) && types_match (_q80, _q50)))
7741 : {
7742 0 : if ((_q81 == _q30 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q30, 0) && types_match (_q81, _q30)))
7743 : {
7744 0 : {
7745 0 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q21, _q50, _p1, _q70 };
7746 0 : tree res = generic_simplify_109 (loc, type, _p0, _p1, captures, BIT_IOR_EXPR, BIT_AND_EXPR, CFN_BUILT_IN_POPCOUNTLL);
7747 0 : if (res) return res;
7748 : }
7749 : }
7750 : }
7751 : break;
7752 : }
7753 : default:;
7754 : }
7755 : }
7756 : break;
7757 : default:;
7758 : }
7759 : break;
7760 : default:;
7761 : }
7762 : }
7763 : break;
7764 : default:;
7765 : }
7766 : break;
7767 : default:;
7768 : }
7769 : }
7770 : break;
7771 0 : case CFN_POPCOUNT:
7772 0 : if (call_expr_nargs (_q20) == 1)
7773 : {
7774 0 : tree _q30 = CALL_EXPR_ARG (_q20, 0);
7775 0 : switch (TREE_CODE (_q21))
7776 : {
7777 0 : case CALL_EXPR:
7778 0 : switch (get_call_combined_fn (_q21))
7779 : {
7780 0 : case CFN_POPCOUNT:
7781 0 : if (call_expr_nargs (_q21) == 1)
7782 : {
7783 0 : tree _q50 = CALL_EXPR_ARG (_q21, 0);
7784 0 : switch (TREE_CODE (_p1))
7785 : {
7786 0 : case CALL_EXPR:
7787 0 : switch (get_call_combined_fn (_p1))
7788 : {
7789 0 : case CFN_POPCOUNT:
7790 0 : if (call_expr_nargs (_p1) == 1)
7791 : {
7792 0 : tree _q70 = CALL_EXPR_ARG (_p1, 0);
7793 0 : switch (TREE_CODE (_q70))
7794 : {
7795 0 : case BIT_AND_EXPR:
7796 0 : {
7797 0 : tree _q80 = TREE_OPERAND (_q70, 0);
7798 0 : tree _q81 = TREE_OPERAND (_q70, 1);
7799 0 : if ((_q80 == _q30 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q30, 0) && types_match (_q80, _q30)))
7800 : {
7801 0 : if ((_q81 == _q50 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q50, 0) && types_match (_q81, _q50)))
7802 : {
7803 0 : {
7804 0 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q21, _q50, _p1, _q70 };
7805 0 : tree res = generic_simplify_109 (loc, type, _p0, _p1, captures, BIT_AND_EXPR, BIT_IOR_EXPR, CFN_POPCOUNT);
7806 0 : if (res) return res;
7807 : }
7808 : }
7809 : }
7810 0 : if ((_q80 == _q50 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q50, 0) && types_match (_q80, _q50)))
7811 : {
7812 0 : if ((_q81 == _q30 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q30, 0) && types_match (_q81, _q30)))
7813 : {
7814 0 : {
7815 0 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q21, _q50, _p1, _q70 };
7816 0 : tree res = generic_simplify_109 (loc, type, _p0, _p1, captures, BIT_AND_EXPR, BIT_IOR_EXPR, CFN_POPCOUNT);
7817 0 : if (res) return res;
7818 : }
7819 : }
7820 : }
7821 : break;
7822 : }
7823 0 : case BIT_IOR_EXPR:
7824 0 : {
7825 0 : tree _q80 = TREE_OPERAND (_q70, 0);
7826 0 : tree _q81 = TREE_OPERAND (_q70, 1);
7827 0 : if ((_q80 == _q30 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q30, 0) && types_match (_q80, _q30)))
7828 : {
7829 0 : if ((_q81 == _q50 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q50, 0) && types_match (_q81, _q50)))
7830 : {
7831 0 : {
7832 0 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q21, _q50, _p1, _q70 };
7833 0 : tree res = generic_simplify_109 (loc, type, _p0, _p1, captures, BIT_IOR_EXPR, BIT_AND_EXPR, CFN_POPCOUNT);
7834 0 : if (res) return res;
7835 : }
7836 : }
7837 : }
7838 0 : if ((_q80 == _q50 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q50, 0) && types_match (_q80, _q50)))
7839 : {
7840 0 : if ((_q81 == _q30 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q30, 0) && types_match (_q81, _q30)))
7841 : {
7842 0 : {
7843 0 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q21, _q50, _p1, _q70 };
7844 0 : tree res = generic_simplify_109 (loc, type, _p0, _p1, captures, BIT_IOR_EXPR, BIT_AND_EXPR, CFN_POPCOUNT);
7845 0 : if (res) return res;
7846 : }
7847 : }
7848 : }
7849 : break;
7850 : }
7851 : default:;
7852 : }
7853 : }
7854 : break;
7855 : default:;
7856 : }
7857 : break;
7858 : default:;
7859 : }
7860 : }
7861 : break;
7862 : default:;
7863 : }
7864 : break;
7865 : default:;
7866 : }
7867 : }
7868 : break;
7869 0 : case CFN_BUILT_IN_POPCOUNTIMAX:
7870 0 : if (call_expr_nargs (_q20) == 1)
7871 : {
7872 0 : tree _q30 = CALL_EXPR_ARG (_q20, 0);
7873 0 : switch (TREE_CODE (_q21))
7874 : {
7875 0 : case CALL_EXPR:
7876 0 : switch (get_call_combined_fn (_q21))
7877 : {
7878 0 : case CFN_BUILT_IN_POPCOUNTIMAX:
7879 0 : if (call_expr_nargs (_q21) == 1)
7880 : {
7881 0 : tree _q50 = CALL_EXPR_ARG (_q21, 0);
7882 0 : switch (TREE_CODE (_p1))
7883 : {
7884 0 : case CALL_EXPR:
7885 0 : switch (get_call_combined_fn (_p1))
7886 : {
7887 0 : case CFN_BUILT_IN_POPCOUNTIMAX:
7888 0 : if (call_expr_nargs (_p1) == 1)
7889 : {
7890 0 : tree _q70 = CALL_EXPR_ARG (_p1, 0);
7891 0 : switch (TREE_CODE (_q70))
7892 : {
7893 0 : case BIT_AND_EXPR:
7894 0 : {
7895 0 : tree _q80 = TREE_OPERAND (_q70, 0);
7896 0 : tree _q81 = TREE_OPERAND (_q70, 1);
7897 0 : if ((_q80 == _q30 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q30, 0) && types_match (_q80, _q30)))
7898 : {
7899 0 : if ((_q81 == _q50 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q50, 0) && types_match (_q81, _q50)))
7900 : {
7901 0 : {
7902 0 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q21, _q50, _p1, _q70 };
7903 0 : tree res = generic_simplify_109 (loc, type, _p0, _p1, captures, BIT_AND_EXPR, BIT_IOR_EXPR, CFN_BUILT_IN_POPCOUNTIMAX);
7904 0 : if (res) return res;
7905 : }
7906 : }
7907 : }
7908 0 : if ((_q80 == _q50 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q50, 0) && types_match (_q80, _q50)))
7909 : {
7910 0 : if ((_q81 == _q30 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q30, 0) && types_match (_q81, _q30)))
7911 : {
7912 0 : {
7913 0 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q21, _q50, _p1, _q70 };
7914 0 : tree res = generic_simplify_109 (loc, type, _p0, _p1, captures, BIT_AND_EXPR, BIT_IOR_EXPR, CFN_BUILT_IN_POPCOUNTIMAX);
7915 0 : if (res) return res;
7916 : }
7917 : }
7918 : }
7919 : break;
7920 : }
7921 0 : case BIT_IOR_EXPR:
7922 0 : {
7923 0 : tree _q80 = TREE_OPERAND (_q70, 0);
7924 0 : tree _q81 = TREE_OPERAND (_q70, 1);
7925 0 : if ((_q80 == _q30 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q30, 0) && types_match (_q80, _q30)))
7926 : {
7927 0 : if ((_q81 == _q50 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q50, 0) && types_match (_q81, _q50)))
7928 : {
7929 0 : {
7930 0 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q21, _q50, _p1, _q70 };
7931 0 : tree res = generic_simplify_109 (loc, type, _p0, _p1, captures, BIT_IOR_EXPR, BIT_AND_EXPR, CFN_BUILT_IN_POPCOUNTIMAX);
7932 0 : if (res) return res;
7933 : }
7934 : }
7935 : }
7936 0 : if ((_q80 == _q50 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q50, 0) && types_match (_q80, _q50)))
7937 : {
7938 0 : if ((_q81 == _q30 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q30, 0) && types_match (_q81, _q30)))
7939 : {
7940 0 : {
7941 0 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q21, _q50, _p1, _q70 };
7942 0 : tree res = generic_simplify_109 (loc, type, _p0, _p1, captures, BIT_IOR_EXPR, BIT_AND_EXPR, CFN_BUILT_IN_POPCOUNTIMAX);
7943 0 : if (res) return res;
7944 : }
7945 : }
7946 : }
7947 : break;
7948 : }
7949 : default:;
7950 : }
7951 : }
7952 : break;
7953 : default:;
7954 : }
7955 : break;
7956 : default:;
7957 : }
7958 : }
7959 : break;
7960 : default:;
7961 : }
7962 : break;
7963 : default:;
7964 : }
7965 : }
7966 : break;
7967 0 : case CFN_BUILT_IN_POPCOUNTL:
7968 0 : if (call_expr_nargs (_q20) == 1)
7969 : {
7970 0 : tree _q30 = CALL_EXPR_ARG (_q20, 0);
7971 0 : switch (TREE_CODE (_q21))
7972 : {
7973 0 : case CALL_EXPR:
7974 0 : switch (get_call_combined_fn (_q21))
7975 : {
7976 0 : case CFN_BUILT_IN_POPCOUNTL:
7977 0 : if (call_expr_nargs (_q21) == 1)
7978 : {
7979 0 : tree _q50 = CALL_EXPR_ARG (_q21, 0);
7980 0 : switch (TREE_CODE (_p1))
7981 : {
7982 0 : case CALL_EXPR:
7983 0 : switch (get_call_combined_fn (_p1))
7984 : {
7985 0 : case CFN_BUILT_IN_POPCOUNTL:
7986 0 : if (call_expr_nargs (_p1) == 1)
7987 : {
7988 0 : tree _q70 = CALL_EXPR_ARG (_p1, 0);
7989 0 : switch (TREE_CODE (_q70))
7990 : {
7991 0 : case BIT_AND_EXPR:
7992 0 : {
7993 0 : tree _q80 = TREE_OPERAND (_q70, 0);
7994 0 : tree _q81 = TREE_OPERAND (_q70, 1);
7995 0 : if ((_q80 == _q30 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q30, 0) && types_match (_q80, _q30)))
7996 : {
7997 0 : if ((_q81 == _q50 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q50, 0) && types_match (_q81, _q50)))
7998 : {
7999 0 : {
8000 0 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q21, _q50, _p1, _q70 };
8001 0 : tree res = generic_simplify_109 (loc, type, _p0, _p1, captures, BIT_AND_EXPR, BIT_IOR_EXPR, CFN_BUILT_IN_POPCOUNTL);
8002 0 : if (res) return res;
8003 : }
8004 : }
8005 : }
8006 0 : if ((_q80 == _q50 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q50, 0) && types_match (_q80, _q50)))
8007 : {
8008 0 : if ((_q81 == _q30 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q30, 0) && types_match (_q81, _q30)))
8009 : {
8010 0 : {
8011 0 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q21, _q50, _p1, _q70 };
8012 0 : tree res = generic_simplify_109 (loc, type, _p0, _p1, captures, BIT_AND_EXPR, BIT_IOR_EXPR, CFN_BUILT_IN_POPCOUNTL);
8013 0 : if (res) return res;
8014 : }
8015 : }
8016 : }
8017 : break;
8018 : }
8019 0 : case BIT_IOR_EXPR:
8020 0 : {
8021 0 : tree _q80 = TREE_OPERAND (_q70, 0);
8022 0 : tree _q81 = TREE_OPERAND (_q70, 1);
8023 0 : if ((_q80 == _q30 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q30, 0) && types_match (_q80, _q30)))
8024 : {
8025 0 : if ((_q81 == _q50 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q50, 0) && types_match (_q81, _q50)))
8026 : {
8027 0 : {
8028 0 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q21, _q50, _p1, _q70 };
8029 0 : tree res = generic_simplify_109 (loc, type, _p0, _p1, captures, BIT_IOR_EXPR, BIT_AND_EXPR, CFN_BUILT_IN_POPCOUNTL);
8030 0 : if (res) return res;
8031 : }
8032 : }
8033 : }
8034 0 : if ((_q80 == _q50 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q50, 0) && types_match (_q80, _q50)))
8035 : {
8036 0 : if ((_q81 == _q30 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q30, 0) && types_match (_q81, _q30)))
8037 : {
8038 0 : {
8039 0 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q21, _q50, _p1, _q70 };
8040 0 : tree res = generic_simplify_109 (loc, type, _p0, _p1, captures, BIT_IOR_EXPR, BIT_AND_EXPR, CFN_BUILT_IN_POPCOUNTL);
8041 0 : if (res) return res;
8042 : }
8043 : }
8044 : }
8045 : break;
8046 : }
8047 : default:;
8048 : }
8049 : }
8050 : break;
8051 : default:;
8052 : }
8053 : break;
8054 : default:;
8055 : }
8056 : }
8057 : break;
8058 : default:;
8059 : }
8060 : break;
8061 : default:;
8062 : }
8063 : }
8064 : break;
8065 : default:;
8066 : }
8067 : break;
8068 : default:;
8069 : }
8070 : break;
8071 : }
8072 0 : case VEC_PERM_EXPR:
8073 0 : {
8074 0 : tree _q20 = TREE_OPERAND (_p0, 0);
8075 0 : tree _q21 = TREE_OPERAND (_p0, 1);
8076 0 : tree _q22 = TREE_OPERAND (_p0, 2);
8077 0 : switch (TREE_CODE (_q20))
8078 : {
8079 0 : case MULT_EXPR:
8080 0 : {
8081 0 : tree _q30 = TREE_OPERAND (_q20, 0);
8082 0 : tree _q31 = TREE_OPERAND (_q20, 1);
8083 0 : if (tree_vec_same_elem_p (_q31))
8084 : {
8085 0 : if ((_q21 == _q20 && ! TREE_SIDE_EFFECTS (_q21)) || (operand_equal_p (_q21, _q20, 0) && types_match (_q21, _q20)))
8086 : {
8087 0 : {
8088 0 : tree captures[6] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q31, _q22, _p1 };
8089 0 : tree res = generic_simplify_110 (loc, type, _p0, _p1, captures);
8090 0 : if (res) return res;
8091 : }
8092 : }
8093 : }
8094 0 : if (tree_vec_same_elem_p (_q30))
8095 : {
8096 0 : if ((_q21 == _q20 && ! TREE_SIDE_EFFECTS (_q21)) || (operand_equal_p (_q21, _q20, 0) && types_match (_q21, _q20)))
8097 : {
8098 0 : {
8099 0 : tree captures[6] ATTRIBUTE_UNUSED = { _p0, _q20, _q31, _q30, _q22, _p1 };
8100 0 : tree res = generic_simplify_110 (loc, type, _p0, _p1, captures);
8101 0 : if (res) return res;
8102 : }
8103 : }
8104 : }
8105 : break;
8106 : }
8107 : default:;
8108 : }
8109 : break;
8110 : }
8111 714510 : case CALL_EXPR:
8112 714510 : switch (get_call_combined_fn (_p0))
8113 : {
8114 18 : case CFN_BUILT_IN_LOG:
8115 18 : if (call_expr_nargs (_p0) == 1)
8116 : {
8117 18 : tree _q20 = CALL_EXPR_ARG (_p0, 0);
8118 18 : switch (TREE_CODE (_p1))
8119 : {
8120 0 : case CALL_EXPR:
8121 0 : switch (get_call_combined_fn (_p1))
8122 : {
8123 0 : case CFN_BUILT_IN_LOG:
8124 0 : if (call_expr_nargs (_p1) == 1)
8125 : {
8126 0 : tree _q40 = CALL_EXPR_ARG (_p1, 0);
8127 0 : {
8128 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _p1, _q40 };
8129 0 : tree res = generic_simplify_108 (loc, type, _p0, _p1, captures, CFN_BUILT_IN_LOG);
8130 0 : if (res) return res;
8131 : }
8132 : }
8133 : break;
8134 : default:;
8135 : }
8136 : break;
8137 : default:;
8138 : }
8139 : }
8140 : break;
8141 2 : case CFN_BUILT_IN_LOG2:
8142 2 : if (call_expr_nargs (_p0) == 1)
8143 : {
8144 2 : tree _q20 = CALL_EXPR_ARG (_p0, 0);
8145 2 : switch (TREE_CODE (_p1))
8146 : {
8147 0 : case CALL_EXPR:
8148 0 : switch (get_call_combined_fn (_p1))
8149 : {
8150 0 : case CFN_BUILT_IN_LOG2:
8151 0 : if (call_expr_nargs (_p1) == 1)
8152 : {
8153 0 : tree _q40 = CALL_EXPR_ARG (_p1, 0);
8154 0 : {
8155 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _p1, _q40 };
8156 0 : tree res = generic_simplify_108 (loc, type, _p0, _p1, captures, CFN_BUILT_IN_LOG2);
8157 0 : if (res) return res;
8158 : }
8159 : }
8160 : break;
8161 : default:;
8162 : }
8163 : break;
8164 : default:;
8165 : }
8166 : }
8167 : break;
8168 0 : case CFN_BUILT_IN_LOGF:
8169 0 : if (call_expr_nargs (_p0) == 1)
8170 : {
8171 0 : tree _q20 = CALL_EXPR_ARG (_p0, 0);
8172 0 : switch (TREE_CODE (_p1))
8173 : {
8174 0 : case CALL_EXPR:
8175 0 : switch (get_call_combined_fn (_p1))
8176 : {
8177 0 : case CFN_BUILT_IN_LOGF:
8178 0 : if (call_expr_nargs (_p1) == 1)
8179 : {
8180 0 : tree _q40 = CALL_EXPR_ARG (_p1, 0);
8181 0 : {
8182 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _p1, _q40 };
8183 0 : tree res = generic_simplify_108 (loc, type, _p0, _p1, captures, CFN_BUILT_IN_LOGF);
8184 0 : if (res) return res;
8185 : }
8186 : }
8187 : break;
8188 : default:;
8189 : }
8190 : break;
8191 : default:;
8192 : }
8193 : }
8194 : break;
8195 0 : case CFN_BUILT_IN_LOGL:
8196 0 : if (call_expr_nargs (_p0) == 1)
8197 : {
8198 0 : tree _q20 = CALL_EXPR_ARG (_p0, 0);
8199 0 : switch (TREE_CODE (_p1))
8200 : {
8201 0 : case CALL_EXPR:
8202 0 : switch (get_call_combined_fn (_p1))
8203 : {
8204 0 : case CFN_BUILT_IN_LOGL:
8205 0 : if (call_expr_nargs (_p1) == 1)
8206 : {
8207 0 : tree _q40 = CALL_EXPR_ARG (_p1, 0);
8208 0 : {
8209 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _p1, _q40 };
8210 0 : tree res = generic_simplify_108 (loc, type, _p0, _p1, captures, CFN_BUILT_IN_LOGL);
8211 0 : if (res) return res;
8212 : }
8213 : }
8214 : break;
8215 : default:;
8216 : }
8217 : break;
8218 : default:;
8219 : }
8220 : }
8221 : break;
8222 0 : case CFN_BUILT_IN_LOG10F:
8223 0 : if (call_expr_nargs (_p0) == 1)
8224 : {
8225 0 : tree _q20 = CALL_EXPR_ARG (_p0, 0);
8226 0 : switch (TREE_CODE (_p1))
8227 : {
8228 0 : case CALL_EXPR:
8229 0 : switch (get_call_combined_fn (_p1))
8230 : {
8231 0 : case CFN_BUILT_IN_LOG10F:
8232 0 : if (call_expr_nargs (_p1) == 1)
8233 : {
8234 0 : tree _q40 = CALL_EXPR_ARG (_p1, 0);
8235 0 : {
8236 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _p1, _q40 };
8237 0 : tree res = generic_simplify_108 (loc, type, _p0, _p1, captures, CFN_BUILT_IN_LOG10F);
8238 0 : if (res) return res;
8239 : }
8240 : }
8241 : break;
8242 : default:;
8243 : }
8244 : break;
8245 : default:;
8246 : }
8247 : }
8248 : break;
8249 0 : case CFN_BUILT_IN_LOG10L:
8250 0 : if (call_expr_nargs (_p0) == 1)
8251 : {
8252 0 : tree _q20 = CALL_EXPR_ARG (_p0, 0);
8253 0 : switch (TREE_CODE (_p1))
8254 : {
8255 0 : case CALL_EXPR:
8256 0 : switch (get_call_combined_fn (_p1))
8257 : {
8258 0 : case CFN_BUILT_IN_LOG10L:
8259 0 : if (call_expr_nargs (_p1) == 1)
8260 : {
8261 0 : tree _q40 = CALL_EXPR_ARG (_p1, 0);
8262 0 : {
8263 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _p1, _q40 };
8264 0 : tree res = generic_simplify_108 (loc, type, _p0, _p1, captures, CFN_BUILT_IN_LOG10L);
8265 0 : if (res) return res;
8266 : }
8267 : }
8268 : break;
8269 : default:;
8270 : }
8271 : break;
8272 : default:;
8273 : }
8274 : }
8275 : break;
8276 0 : case CFN_LOG:
8277 0 : if (call_expr_nargs (_p0) == 1)
8278 : {
8279 0 : tree _q20 = CALL_EXPR_ARG (_p0, 0);
8280 0 : switch (TREE_CODE (_p1))
8281 : {
8282 0 : case CALL_EXPR:
8283 0 : switch (get_call_combined_fn (_p1))
8284 : {
8285 0 : case CFN_LOG:
8286 0 : if (call_expr_nargs (_p1) == 1)
8287 : {
8288 0 : tree _q40 = CALL_EXPR_ARG (_p1, 0);
8289 0 : {
8290 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _p1, _q40 };
8291 0 : tree res = generic_simplify_108 (loc, type, _p0, _p1, captures, CFN_LOG);
8292 0 : if (res) return res;
8293 : }
8294 : }
8295 : break;
8296 : default:;
8297 : }
8298 : break;
8299 : default:;
8300 : }
8301 : }
8302 : break;
8303 0 : case CFN_LOG2:
8304 0 : if (call_expr_nargs (_p0) == 1)
8305 : {
8306 0 : tree _q20 = CALL_EXPR_ARG (_p0, 0);
8307 0 : switch (TREE_CODE (_p1))
8308 : {
8309 0 : case CALL_EXPR:
8310 0 : switch (get_call_combined_fn (_p1))
8311 : {
8312 0 : case CFN_LOG2:
8313 0 : if (call_expr_nargs (_p1) == 1)
8314 : {
8315 0 : tree _q40 = CALL_EXPR_ARG (_p1, 0);
8316 0 : {
8317 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _p1, _q40 };
8318 0 : tree res = generic_simplify_108 (loc, type, _p0, _p1, captures, CFN_LOG2);
8319 0 : if (res) return res;
8320 : }
8321 : }
8322 : break;
8323 : default:;
8324 : }
8325 : break;
8326 : default:;
8327 : }
8328 : }
8329 : break;
8330 0 : case CFN_LOG10:
8331 0 : if (call_expr_nargs (_p0) == 1)
8332 : {
8333 0 : tree _q20 = CALL_EXPR_ARG (_p0, 0);
8334 0 : switch (TREE_CODE (_p1))
8335 : {
8336 0 : case CALL_EXPR:
8337 0 : switch (get_call_combined_fn (_p1))
8338 : {
8339 0 : case CFN_LOG10:
8340 0 : if (call_expr_nargs (_p1) == 1)
8341 : {
8342 0 : tree _q40 = CALL_EXPR_ARG (_p1, 0);
8343 0 : {
8344 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _p1, _q40 };
8345 0 : tree res = generic_simplify_108 (loc, type, _p0, _p1, captures, CFN_LOG10);
8346 0 : if (res) return res;
8347 : }
8348 : }
8349 : break;
8350 : default:;
8351 : }
8352 : break;
8353 : default:;
8354 : }
8355 : }
8356 : break;
8357 6 : case CFN_BUILT_IN_LOG10:
8358 6 : if (call_expr_nargs (_p0) == 1)
8359 : {
8360 6 : tree _q20 = CALL_EXPR_ARG (_p0, 0);
8361 6 : switch (TREE_CODE (_p1))
8362 : {
8363 2 : case CALL_EXPR:
8364 2 : switch (get_call_combined_fn (_p1))
8365 : {
8366 2 : case CFN_BUILT_IN_LOG10:
8367 2 : if (call_expr_nargs (_p1) == 1)
8368 : {
8369 2 : tree _q40 = CALL_EXPR_ARG (_p1, 0);
8370 2 : {
8371 2 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _p1, _q40 };
8372 2 : tree res = generic_simplify_108 (loc, type, _p0, _p1, captures, CFN_BUILT_IN_LOG10);
8373 2 : if (res) return res;
8374 : }
8375 : }
8376 : break;
8377 : default:;
8378 : }
8379 : break;
8380 : default:;
8381 : }
8382 : }
8383 : break;
8384 0 : case CFN_BUILT_IN_LOG2F:
8385 0 : if (call_expr_nargs (_p0) == 1)
8386 : {
8387 0 : tree _q20 = CALL_EXPR_ARG (_p0, 0);
8388 0 : switch (TREE_CODE (_p1))
8389 : {
8390 0 : case CALL_EXPR:
8391 0 : switch (get_call_combined_fn (_p1))
8392 : {
8393 0 : case CFN_BUILT_IN_LOG2F:
8394 0 : if (call_expr_nargs (_p1) == 1)
8395 : {
8396 0 : tree _q40 = CALL_EXPR_ARG (_p1, 0);
8397 0 : {
8398 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _p1, _q40 };
8399 0 : tree res = generic_simplify_108 (loc, type, _p0, _p1, captures, CFN_BUILT_IN_LOG2F);
8400 0 : if (res) return res;
8401 : }
8402 : }
8403 : break;
8404 : default:;
8405 : }
8406 : break;
8407 : default:;
8408 : }
8409 : }
8410 : break;
8411 0 : case CFN_BUILT_IN_LOG2L:
8412 0 : if (call_expr_nargs (_p0) == 1)
8413 : {
8414 0 : tree _q20 = CALL_EXPR_ARG (_p0, 0);
8415 0 : switch (TREE_CODE (_p1))
8416 : {
8417 0 : case CALL_EXPR:
8418 0 : switch (get_call_combined_fn (_p1))
8419 : {
8420 0 : case CFN_BUILT_IN_LOG2L:
8421 0 : if (call_expr_nargs (_p1) == 1)
8422 : {
8423 0 : tree _q40 = CALL_EXPR_ARG (_p1, 0);
8424 0 : {
8425 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _p1, _q40 };
8426 0 : tree res = generic_simplify_108 (loc, type, _p0, _p1, captures, CFN_BUILT_IN_LOG2L);
8427 0 : if (res) return res;
8428 : }
8429 : }
8430 : break;
8431 : default:;
8432 : }
8433 : break;
8434 : default:;
8435 : }
8436 : }
8437 : break;
8438 : default:;
8439 : }
8440 : break;
8441 20898582 : default:;
8442 : }
8443 20898582 : switch (TREE_CODE (_p1))
8444 : {
8445 7218 : case BIT_AND_EXPR:
8446 7218 : {
8447 7218 : tree _q30 = TREE_OPERAND (_p1, 0);
8448 7218 : tree _q31 = TREE_OPERAND (_p1, 1);
8449 7218 : switch (TREE_CODE (_q30))
8450 : {
8451 80 : case MAX_EXPR:
8452 80 : {
8453 80 : tree _q40 = TREE_OPERAND (_q30, 0);
8454 80 : tree _q41 = TREE_OPERAND (_q30, 1);
8455 80 : if ((_q40 == _p0 && ! TREE_SIDE_EFFECTS (_q40)) || (operand_equal_p (_q40, _p0, 0) && types_match (_q40, _p0)))
8456 : {
8457 80 : switch (TREE_CODE (_q41))
8458 : {
8459 80 : case INTEGER_CST:
8460 80 : {
8461 80 : switch (TREE_CODE (_q31))
8462 : {
8463 72 : case INTEGER_CST:
8464 72 : {
8465 72 : {
8466 72 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q41, _q31 };
8467 72 : {
8468 72 : auto i = wi::neg (wi::to_wide (captures[2]));
8469 72 : if (wi::popcount (i) == 1
8470 200 : && (wi::to_wide (captures[1])) == (i - 1)
8471 : )
8472 : {
8473 40 : if (TYPE_UNSIGNED (TREE_TYPE (captures[0]))
8474 : )
8475 : {
8476 8 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail1310;
8477 8 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1310;
8478 8 : {
8479 8 : tree res_op0;
8480 8 : res_op0 = captures[0];
8481 8 : tree res_op1;
8482 8 : res_op1 = captures[1];
8483 8 : tree _r;
8484 8 : _r = fold_build2_loc (loc, BIT_AND_EXPR, type, res_op0, res_op1);
8485 8 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 944, __FILE__, __LINE__, true);
8486 8 : return _r;
8487 : }
8488 64 : next_after_fail1310:;
8489 : }
8490 : else
8491 : {
8492 32 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail1311;
8493 32 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1311;
8494 32 : {
8495 32 : if (! tree_invariant_p (captures[0])) goto next_after_fail1311;
8496 0 : if (! tree_invariant_p (captures[1])) goto next_after_fail1311;
8497 0 : tree res_op0;
8498 0 : {
8499 0 : tree _o1[2], _r1;
8500 0 : _o1[0] = unshare_expr (captures[0]);
8501 0 : _o1[1] = unshare_expr (captures[1]);
8502 0 : _r1 = fold_build2_loc (loc, LE_EXPR, boolean_type_node, _o1[0], _o1[1]);
8503 0 : res_op0 = _r1;
8504 : }
8505 0 : tree res_op1;
8506 0 : res_op1 = unshare_expr (captures[0]);
8507 0 : tree res_op2;
8508 0 : {
8509 0 : tree _o1[2], _r1;
8510 0 : _o1[0] = captures[0];
8511 0 : _o1[1] = captures[1];
8512 0 : _r1 = fold_build2_loc (loc, BIT_AND_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
8513 0 : res_op2 = _r1;
8514 : }
8515 0 : tree _r;
8516 0 : _r = fold_build3_loc (loc, COND_EXPR, type, res_op0, res_op1, res_op2);
8517 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 945, __FILE__, __LINE__, true);
8518 0 : return _r;
8519 : }
8520 64 : next_after_fail1311:;
8521 : }
8522 : }
8523 8 : }
8524 : }
8525 64 : break;
8526 : }
8527 : default:;
8528 : }
8529 : break;
8530 : }
8531 : default:;
8532 : }
8533 : }
8534 : break;
8535 : }
8536 : default:;
8537 : }
8538 : break;
8539 : }
8540 20898574 : default:;
8541 : }
8542 20898574 : switch (TREE_CODE (_p0))
8543 : {
8544 0 : case VEC_PERM_EXPR:
8545 0 : {
8546 0 : tree _q20 = TREE_OPERAND (_p0, 0);
8547 0 : tree _q21 = TREE_OPERAND (_p0, 1);
8548 0 : tree _q22 = TREE_OPERAND (_p0, 2);
8549 0 : if ((_q21 == _q20 && ! TREE_SIDE_EFFECTS (_q21)) || (operand_equal_p (_q21, _q20, 0) && types_match (_q21, _q20)))
8550 : {
8551 0 : switch (TREE_CODE (_p1))
8552 : {
8553 0 : case VEC_PERM_EXPR:
8554 0 : {
8555 0 : tree _q60 = TREE_OPERAND (_p1, 0);
8556 0 : tree _q61 = TREE_OPERAND (_p1, 1);
8557 0 : tree _q62 = TREE_OPERAND (_p1, 2);
8558 0 : if ((_q61 == _q60 && ! TREE_SIDE_EFFECTS (_q61)) || (operand_equal_p (_q61, _q60, 0) && types_match (_q61, _q60)))
8559 : {
8560 0 : if ((_q62 == _q22 && ! TREE_SIDE_EFFECTS (_q62)) || (operand_equal_p (_q62, _q22, 0) && types_match (_q62, _q22)))
8561 : {
8562 0 : {
8563 0 : tree captures[4] ATTRIBUTE_UNUSED = { _q20, _q22, _q60 };
8564 0 : if (VECTOR_INTEGER_TYPE_P (type)
8565 : )
8566 : {
8567 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1312;
8568 0 : {
8569 0 : tree res_op0;
8570 0 : {
8571 0 : tree _o1[2], _r1;
8572 0 : _o1[0] = captures[0];
8573 0 : _o1[1] = captures[2];
8574 0 : _r1 = fold_build2_loc (loc, MINUS_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
8575 0 : captures[3] = _r1;
8576 : }
8577 0 : res_op0 = unshare_expr (captures[3]);
8578 0 : tree res_op1;
8579 0 : res_op1 = captures[3];
8580 0 : tree res_op2;
8581 0 : res_op2 = captures[1];
8582 0 : tree _r;
8583 0 : _r = fold_build3_loc (loc, VEC_PERM_EXPR, type, res_op0, res_op1, res_op2);
8584 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 902, __FILE__, __LINE__, true);
8585 0 : return _r;
8586 : }
8587 0 : next_after_fail1312:;
8588 : }
8589 : }
8590 : }
8591 : }
8592 : break;
8593 : }
8594 0 : default:;
8595 : }
8596 0 : switch (TREE_CODE (_q22))
8597 : {
8598 0 : case VECTOR_CST:
8599 0 : {
8600 0 : switch (TREE_CODE (_p1))
8601 : {
8602 0 : case VEC_PERM_EXPR:
8603 0 : {
8604 0 : tree _q60 = TREE_OPERAND (_p1, 0);
8605 0 : tree _q61 = TREE_OPERAND (_p1, 1);
8606 0 : tree _q62 = TREE_OPERAND (_p1, 2);
8607 0 : if ((_q61 == _q60 && ! TREE_SIDE_EFFECTS (_q61)) || (operand_equal_p (_q61, _q60, 0) && types_match (_q61, _q60)))
8608 : {
8609 0 : if ((_q62 == _q22 && ! TREE_SIDE_EFFECTS (_q62)) || (operand_equal_p (_q62, _q22, 0) && types_match (_q62, _q22)))
8610 : {
8611 0 : switch (TREE_CODE (_q62))
8612 : {
8613 0 : case VECTOR_CST:
8614 0 : {
8615 0 : {
8616 0 : tree captures[4] ATTRIBUTE_UNUSED = { _q20, _q22, _q60 };
8617 0 : tree res = generic_simplify_85 (loc, type, _p0, _p1, captures, MINUS_EXPR);
8618 0 : if (res) return res;
8619 : }
8620 0 : break;
8621 : }
8622 : default:;
8623 : }
8624 : }
8625 : }
8626 : break;
8627 : }
8628 : default:;
8629 : }
8630 : break;
8631 : }
8632 : default:;
8633 : }
8634 : }
8635 : break;
8636 : }
8637 : default:;
8638 : }
8639 : return NULL_TREE;
8640 : }
8641 :
8642 : tree
8643 1280811 : generic_simplify_LSHIFT_EXPR (location_t ARG_UNUSED (loc), enum tree_code ARG_UNUSED (code), const tree ARG_UNUSED (type), tree _p0, tree _p1)
8644 : {
8645 1280811 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
8646 1280811 : switch (TREE_CODE (_p1))
8647 : {
8648 266 : case TRUNC_MOD_EXPR:
8649 266 : {
8650 266 : tree _q30 = TREE_OPERAND (_p1, 0);
8651 266 : tree _q31 = TREE_OPERAND (_p1, 1);
8652 266 : {
8653 266 : tree _q31_pops[1];
8654 266 : if (tree_power_of_two_cand (_q31, _q31_pops))
8655 : {
8656 260 : tree _q50 = _q31_pops[0];
8657 260 : {
8658 260 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q30, _q31, _q50 };
8659 260 : tree res = generic_simplify_420 (loc, type, _p0, _p1, captures, LSHIFT_EXPR, TRUNC_MOD_EXPR);
8660 260 : if (res) return res;
8661 : }
8662 : }
8663 : }
8664 75 : break;
8665 : }
8666 0 : case FLOOR_MOD_EXPR:
8667 0 : {
8668 0 : tree _q30 = TREE_OPERAND (_p1, 0);
8669 0 : tree _q31 = TREE_OPERAND (_p1, 1);
8670 0 : {
8671 0 : tree _q31_pops[1];
8672 0 : if (tree_power_of_two_cand (_q31, _q31_pops))
8673 : {
8674 0 : tree _q50 = _q31_pops[0];
8675 0 : {
8676 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q30, _q31, _q50 };
8677 0 : tree res = generic_simplify_420 (loc, type, _p0, _p1, captures, LSHIFT_EXPR, FLOOR_MOD_EXPR);
8678 0 : if (res) return res;
8679 : }
8680 : }
8681 : }
8682 0 : break;
8683 : }
8684 1280620 : default:;
8685 : }
8686 1280620 : if (uniform_integer_cst_p (_p1))
8687 : {
8688 870839 : {
8689 870839 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
8690 870839 : tree res = generic_simplify_421 (loc, type, _p0, _p1, captures, LSHIFT_EXPR);
8691 870839 : if (res) return res;
8692 : }
8693 : }
8694 1280155 : switch (TREE_CODE (_p0))
8695 : {
8696 715665 : CASE_CONVERT:
8697 715665 : {
8698 715665 : tree _q20 = TREE_OPERAND (_p0, 0);
8699 715665 : switch (TREE_CODE (_q20))
8700 : {
8701 4 : case LT_EXPR:
8702 4 : {
8703 4 : tree _q30 = TREE_OPERAND (_q20, 0);
8704 4 : tree _q31 = TREE_OPERAND (_q20, 1);
8705 4 : if (integer_zerop (_q31))
8706 : {
8707 4 : switch (TREE_CODE (_p1))
8708 : {
8709 4 : case INTEGER_CST:
8710 4 : {
8711 4 : {
8712 4 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _q31, _p1 };
8713 4 : if (TYPE_SIGN (TREE_TYPE (captures[0])) == SIGNED
8714 4 : && wi::eq_p (wi::to_wide (captures[2]), TYPE_PRECISION (TREE_TYPE (captures[0])) - 1)
8715 : )
8716 : {
8717 0 : {
8718 0 : wide_int wone = wi::one (TYPE_PRECISION (type));
8719 0 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail1667;
8720 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1667;
8721 0 : {
8722 0 : tree res_op0;
8723 0 : {
8724 0 : tree _o1[1], _r1;
8725 0 : _o1[0] = captures[0];
8726 0 : if (TREE_TYPE (_o1[0]) != type)
8727 : {
8728 0 : _r1 = fold_build1_loc (loc, NOP_EXPR, type, _o1[0]);
8729 : }
8730 : else
8731 : _r1 = _o1[0];
8732 0 : res_op0 = _r1;
8733 : }
8734 0 : tree res_op1;
8735 0 : res_op1 = wide_int_to_tree (type,
8736 0 : wi::lshift (wone, wi::to_wide (captures[2])));
8737 0 : tree _r;
8738 0 : _r = fold_build2_loc (loc, BIT_AND_EXPR, type, res_op0, res_op1);
8739 0 : if (TREE_SIDE_EFFECTS (captures[1]))
8740 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
8741 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 1011, __FILE__, __LINE__, true);
8742 0 : return _r;
8743 : }
8744 0 : next_after_fail1667:;
8745 0 : }
8746 : }
8747 : }
8748 4 : break;
8749 : }
8750 : default:;
8751 : }
8752 : }
8753 : break;
8754 : }
8755 869 : CASE_CONVERT:
8756 869 : {
8757 869 : tree _q30 = TREE_OPERAND (_q20, 0);
8758 869 : switch (TREE_CODE (_q30))
8759 : {
8760 0 : case RSHIFT_EXPR:
8761 0 : {
8762 0 : tree _q40 = TREE_OPERAND (_q30, 0);
8763 0 : tree _q41 = TREE_OPERAND (_q30, 1);
8764 0 : switch (TREE_CODE (_q41))
8765 : {
8766 0 : case INTEGER_CST:
8767 0 : {
8768 0 : if ((_p1 == _q41 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q41, 0) && types_match (_p1, _q41)))
8769 : {
8770 0 : {
8771 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q40, _q41 };
8772 0 : if (wi::ltu_p (wi::to_wide (captures[2]), element_precision (type))
8773 0 : && INTEGRAL_TYPE_P (type)
8774 0 : && INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
8775 0 : && INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
8776 0 : && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (captures[1]))
8777 0 : && (TYPE_PRECISION (TREE_TYPE (captures[0])) >= TYPE_PRECISION (type)
8778 0 : || wi::geu_p (wi::to_wide (captures[2]),
8779 0 : TYPE_PRECISION (type)
8780 0 : - TYPE_PRECISION (TREE_TYPE (captures[0]))))
8781 : )
8782 : {
8783 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1668;
8784 0 : {
8785 0 : tree res_op0;
8786 0 : {
8787 0 : tree _o1[1], _r1;
8788 0 : _o1[0] = captures[1];
8789 0 : if (TREE_TYPE (_o1[0]) != type)
8790 : {
8791 0 : _r1 = fold_build1_loc (loc, NOP_EXPR, type, _o1[0]);
8792 : }
8793 : else
8794 : _r1 = _o1[0];
8795 0 : res_op0 = _r1;
8796 : }
8797 0 : tree res_op1;
8798 0 : {
8799 0 : tree _o1[2], _r1;
8800 0 : _o1[0] = build_minus_one_cst (type);
8801 0 : _o1[1] = captures[2];
8802 0 : _r1 = fold_build2_loc (loc, LSHIFT_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
8803 0 : res_op1 = _r1;
8804 : }
8805 0 : tree _r;
8806 0 : _r = fold_build2_loc (loc, BIT_AND_EXPR, type, res_op0, res_op1);
8807 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 1012, __FILE__, __LINE__, true);
8808 0 : return _r;
8809 : }
8810 0 : next_after_fail1668:;
8811 : }
8812 : }
8813 : }
8814 : break;
8815 : }
8816 : default:;
8817 : }
8818 : break;
8819 : }
8820 : default:;
8821 : }
8822 : break;
8823 : }
8824 : default:;
8825 : }
8826 : break;
8827 : }
8828 19916 : case RSHIFT_EXPR:
8829 19916 : {
8830 19916 : tree _q20 = TREE_OPERAND (_p0, 0);
8831 19916 : tree _q21 = TREE_OPERAND (_p0, 1);
8832 19916 : switch (TREE_CODE (_q21))
8833 : {
8834 48 : case INTEGER_CST:
8835 48 : {
8836 48 : if ((_p1 == _q21 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q21, 0) && types_match (_p1, _q21)))
8837 : {
8838 3 : {
8839 3 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
8840 3 : tree res = generic_simplify_422 (loc, type, _p0, _p1, captures);
8841 3 : if (res) return res;
8842 : }
8843 : }
8844 : break;
8845 : }
8846 : default:;
8847 : }
8848 : break;
8849 : }
8850 1280152 : default:;
8851 : }
8852 1280152 : {
8853 1280152 : tree _p0_pops[1];
8854 1280152 : if (tree_nop_convert (_p0, _p0_pops))
8855 : {
8856 680362 : tree _q20 = _p0_pops[0];
8857 680362 : switch (TREE_CODE (_q20))
8858 : {
8859 73 : case RSHIFT_EXPR:
8860 73 : {
8861 73 : tree _q30 = TREE_OPERAND (_q20, 0);
8862 73 : tree _q31 = TREE_OPERAND (_q20, 1);
8863 73 : switch (TREE_CODE (_q31))
8864 : {
8865 67 : case INTEGER_CST:
8866 67 : {
8867 67 : if ((_p1 == _q31 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q31, 0) && types_match (_p1, _q31)))
8868 : {
8869 8 : {
8870 8 : tree captures[2] ATTRIBUTE_UNUSED = { _q30, _q31 };
8871 8 : tree res = generic_simplify_422 (loc, type, _p0, _p1, captures);
8872 8 : if (res) return res;
8873 : }
8874 : }
8875 : break;
8876 : }
8877 : default:;
8878 : }
8879 : break;
8880 : }
8881 : default:;
8882 : }
8883 : }
8884 : }
8885 1280144 : if (integer_onep (_p0))
8886 : {
8887 332408 : switch (TREE_CODE (_p1))
8888 : {
8889 52271 : case MINUS_EXPR:
8890 52271 : {
8891 52271 : tree _q30 = TREE_OPERAND (_p1, 0);
8892 52271 : tree _q31 = TREE_OPERAND (_p1, 1);
8893 52271 : switch (TREE_CODE (_q30))
8894 : {
8895 52268 : case INTEGER_CST:
8896 52268 : {
8897 52268 : {
8898 52268 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _p1, _q30, _q31 };
8899 52268 : if (INTEGRAL_TYPE_P (type)
8900 52268 : && wi::eq_p (wi::to_wide (captures[2]), TYPE_PRECISION (type) - 1)
8901 52268 : && single_use (captures[1])
8902 : )
8903 : {
8904 29511 : if (TYPE_UNSIGNED (type)
8905 : )
8906 : {
8907 29505 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1669;
8908 29505 : {
8909 29505 : tree res_op0;
8910 29505 : {
8911 29505 : tree _o1[2], _r1;
8912 29505 : _o1[0] = captures[0];
8913 29505 : _o1[1] = captures[2];
8914 29505 : _r1 = fold_build2_loc (loc, LSHIFT_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
8915 29505 : res_op0 = _r1;
8916 : }
8917 29505 : tree res_op1;
8918 29505 : res_op1 = captures[3];
8919 29505 : tree _r;
8920 29505 : _r = fold_build2_loc (loc, RSHIFT_EXPR, type, res_op0, res_op1);
8921 29505 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 1013, __FILE__, __LINE__, true);
8922 29505 : return _r;
8923 : }
8924 0 : next_after_fail1669:;
8925 : }
8926 : else
8927 : {
8928 6 : {
8929 6 : tree utype = unsigned_type_for (type);
8930 6 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1670;
8931 6 : {
8932 6 : tree res_op0;
8933 6 : {
8934 6 : tree _o1[2], _r1;
8935 6 : {
8936 6 : tree _o2[2], _r2;
8937 6 : {
8938 6 : tree _o3[1], _r3;
8939 6 : _o3[0] = captures[0];
8940 6 : if (TREE_TYPE (_o3[0]) != utype)
8941 : {
8942 6 : _r3 = fold_build1_loc (loc, NOP_EXPR, utype, _o3[0]);
8943 : }
8944 : else
8945 : _r3 = _o3[0];
8946 6 : _o2[0] = _r3;
8947 : }
8948 6 : _o2[1] = captures[2];
8949 6 : _r2 = fold_build2_loc (loc, LSHIFT_EXPR, TREE_TYPE (_o2[0]), _o2[0], _o2[1]);
8950 6 : _o1[0] = _r2;
8951 : }
8952 6 : _o1[1] = captures[3];
8953 6 : _r1 = fold_build2_loc (loc, RSHIFT_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
8954 6 : res_op0 = _r1;
8955 : }
8956 6 : tree _r;
8957 6 : _r = fold_build1_loc (loc, NOP_EXPR, type, res_op0);
8958 6 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 1014, __FILE__, __LINE__, true);
8959 6 : return _r;
8960 : }
8961 0 : next_after_fail1670:;
8962 : }
8963 : }
8964 : }
8965 : }
8966 22757 : break;
8967 : }
8968 : default:;
8969 : }
8970 : break;
8971 : }
8972 : default:;
8973 : }
8974 : }
8975 1250633 : if (integer_zerop (_p1))
8976 : {
8977 1514 : {
8978 1514 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
8979 1514 : tree res = generic_simplify_423 (loc, type, _p0, _p1, captures, LSHIFT_EXPR);
8980 1514 : if (res) return res;
8981 : }
8982 : }
8983 1249119 : if (integer_zerop (_p0))
8984 : {
8985 178 : {
8986 178 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
8987 178 : tree res = generic_simplify_424 (loc, type, _p0, _p1, captures, LSHIFT_EXPR);
8988 178 : if (res) return res;
8989 : }
8990 : }
8991 1248941 : switch (TREE_CODE (_p1))
8992 : {
8993 0 : case VECTOR_CST:
8994 0 : {
8995 0 : {
8996 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
8997 0 : tree res = generic_simplify_425 (loc, type, _p0, _p1, captures, LSHIFT_EXPR);
8998 0 : if (res) return res;
8999 : }
9000 0 : break;
9001 : }
9002 0 : case CONSTRUCTOR:
9003 0 : {
9004 0 : {
9005 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
9006 0 : tree res = generic_simplify_426 (loc, type, _p0, _p1, captures, LSHIFT_EXPR);
9007 0 : if (res) return res;
9008 : }
9009 0 : break;
9010 : }
9011 1248941 : default:;
9012 : }
9013 1248941 : switch (TREE_CODE (_p0))
9014 : {
9015 280 : case LSHIFT_EXPR:
9016 280 : {
9017 280 : tree _q20 = TREE_OPERAND (_p0, 0);
9018 280 : tree _q21 = TREE_OPERAND (_p0, 1);
9019 280 : switch (TREE_CODE (_q21))
9020 : {
9021 39 : case INTEGER_CST:
9022 39 : {
9023 39 : switch (TREE_CODE (_p1))
9024 : {
9025 39 : case INTEGER_CST:
9026 39 : {
9027 39 : {
9028 39 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
9029 39 : tree res = generic_simplify_427 (loc, type, _p0, _p1, captures, LSHIFT_EXPR);
9030 39 : if (res) return res;
9031 : }
9032 0 : break;
9033 : }
9034 : default:;
9035 : }
9036 : break;
9037 : }
9038 : default:;
9039 : }
9040 : break;
9041 : }
9042 715042 : CASE_CONVERT:
9043 715042 : {
9044 715042 : tree _q20 = TREE_OPERAND (_p0, 0);
9045 715042 : switch (TREE_CODE (_q20))
9046 : {
9047 0 : case BIT_AND_EXPR:
9048 0 : {
9049 0 : tree _q30 = TREE_OPERAND (_q20, 0);
9050 0 : tree _q31 = TREE_OPERAND (_q20, 1);
9051 0 : switch (TREE_CODE (_q31))
9052 : {
9053 0 : case INTEGER_CST:
9054 0 : {
9055 0 : switch (TREE_CODE (_p1))
9056 : {
9057 0 : case INTEGER_CST:
9058 0 : {
9059 0 : {
9060 0 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q31, _p1 };
9061 0 : tree res = generic_simplify_428 (loc, type, _p0, _p1, captures, BIT_AND_EXPR, LSHIFT_EXPR);
9062 0 : if (res) return res;
9063 : }
9064 0 : break;
9065 : }
9066 : default:;
9067 : }
9068 : break;
9069 : }
9070 : default:;
9071 : }
9072 : break;
9073 : }
9074 11 : case BIT_XOR_EXPR:
9075 11 : {
9076 11 : tree _q30 = TREE_OPERAND (_q20, 0);
9077 11 : tree _q31 = TREE_OPERAND (_q20, 1);
9078 11 : switch (TREE_CODE (_q31))
9079 : {
9080 0 : case INTEGER_CST:
9081 0 : {
9082 0 : switch (TREE_CODE (_p1))
9083 : {
9084 0 : case INTEGER_CST:
9085 0 : {
9086 0 : {
9087 0 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q31, _p1 };
9088 0 : tree res = generic_simplify_428 (loc, type, _p0, _p1, captures, BIT_XOR_EXPR, LSHIFT_EXPR);
9089 0 : if (res) return res;
9090 : }
9091 0 : break;
9092 : }
9093 : default:;
9094 : }
9095 : break;
9096 : }
9097 : default:;
9098 : }
9099 : break;
9100 : }
9101 18 : case BIT_IOR_EXPR:
9102 18 : {
9103 18 : tree _q30 = TREE_OPERAND (_q20, 0);
9104 18 : tree _q31 = TREE_OPERAND (_q20, 1);
9105 18 : switch (TREE_CODE (_q31))
9106 : {
9107 11 : case INTEGER_CST:
9108 11 : {
9109 11 : switch (TREE_CODE (_p1))
9110 : {
9111 11 : case INTEGER_CST:
9112 11 : {
9113 11 : {
9114 11 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q31, _p1 };
9115 11 : tree res = generic_simplify_428 (loc, type, _p0, _p1, captures, BIT_IOR_EXPR, LSHIFT_EXPR);
9116 11 : if (res) return res;
9117 : }
9118 2 : break;
9119 : }
9120 : default:;
9121 : }
9122 : break;
9123 : }
9124 : default:;
9125 : }
9126 : break;
9127 : }
9128 : default:;
9129 : }
9130 : break;
9131 : }
9132 14326 : case BIT_AND_EXPR:
9133 14326 : {
9134 14326 : tree _q20 = TREE_OPERAND (_p0, 0);
9135 14326 : tree _q21 = TREE_OPERAND (_p0, 1);
9136 14326 : switch (TREE_CODE (_q21))
9137 : {
9138 14231 : case INTEGER_CST:
9139 14231 : {
9140 14231 : switch (TREE_CODE (_p1))
9141 : {
9142 14092 : case INTEGER_CST:
9143 14092 : {
9144 14092 : {
9145 14092 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _p0, _q20, _q21, _p1 };
9146 14092 : tree res = generic_simplify_429 (loc, type, _p0, _p1, captures, BIT_AND_EXPR, LSHIFT_EXPR);
9147 14092 : if (res) return res;
9148 : }
9149 7 : break;
9150 : }
9151 : default:;
9152 : }
9153 : break;
9154 : }
9155 : default:;
9156 : }
9157 : break;
9158 : }
9159 76 : case BIT_XOR_EXPR:
9160 76 : {
9161 76 : tree _q20 = TREE_OPERAND (_p0, 0);
9162 76 : tree _q21 = TREE_OPERAND (_p0, 1);
9163 76 : switch (TREE_CODE (_q21))
9164 : {
9165 7 : case INTEGER_CST:
9166 7 : {
9167 7 : switch (TREE_CODE (_p1))
9168 : {
9169 7 : case INTEGER_CST:
9170 7 : {
9171 7 : {
9172 7 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _p0, _q20, _q21, _p1 };
9173 7 : tree res = generic_simplify_429 (loc, type, _p0, _p1, captures, BIT_XOR_EXPR, LSHIFT_EXPR);
9174 7 : if (res) return res;
9175 : }
9176 0 : break;
9177 : }
9178 : default:;
9179 : }
9180 : break;
9181 : }
9182 : default:;
9183 : }
9184 : break;
9185 : }
9186 78 : case BIT_IOR_EXPR:
9187 78 : {
9188 78 : tree _q20 = TREE_OPERAND (_p0, 0);
9189 78 : tree _q21 = TREE_OPERAND (_p0, 1);
9190 78 : switch (TREE_CODE (_q21))
9191 : {
9192 2 : case INTEGER_CST:
9193 2 : {
9194 2 : switch (TREE_CODE (_p1))
9195 : {
9196 2 : case INTEGER_CST:
9197 2 : {
9198 2 : {
9199 2 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _p0, _q20, _q21, _p1 };
9200 2 : tree res = generic_simplify_429 (loc, type, _p0, _p1, captures, BIT_IOR_EXPR, LSHIFT_EXPR);
9201 2 : if (res) return res;
9202 : }
9203 0 : break;
9204 : }
9205 : default:;
9206 : }
9207 : break;
9208 : }
9209 : default:;
9210 : }
9211 : break;
9212 : }
9213 1 : case VEC_COND_EXPR:
9214 1 : {
9215 1 : tree _q20 = TREE_OPERAND (_p0, 0);
9216 1 : tree _q21 = TREE_OPERAND (_p0, 1);
9217 1 : tree _q22 = TREE_OPERAND (_p0, 2);
9218 1 : switch (TREE_CODE (_p1))
9219 : {
9220 0 : case VEC_COND_EXPR:
9221 0 : {
9222 0 : tree _q60 = TREE_OPERAND (_p1, 0);
9223 0 : tree _q61 = TREE_OPERAND (_p1, 1);
9224 0 : tree _q62 = TREE_OPERAND (_p1, 2);
9225 0 : if ((_q60 == _q20 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _q20, 0) && types_match (_q60, _q20)))
9226 : {
9227 0 : {
9228 0 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q22, _p1, _q61, _q62 };
9229 0 : if (VECTOR_TYPE_P (type)
9230 0 : && (TREE_CODE_CLASS (LSHIFT_EXPR) != tcc_comparison
9231 : || types_match (type, TREE_TYPE (captures[2]))
9232 : || expand_vec_cond_expr_p (type, TREE_TYPE (captures[1]))
9233 : || (optimize_vectors_before_lowering_p ()
9234 : && !expand_vec_cond_expr_p (TREE_TYPE (captures[2]), TREE_TYPE (captures[1]))))
9235 : )
9236 : {
9237 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1671;
9238 0 : {
9239 0 : tree res_op0;
9240 0 : res_op0 = captures[1];
9241 0 : tree res_op1;
9242 0 : {
9243 0 : tree _o1[2], _r1;
9244 0 : _o1[0] = captures[2];
9245 0 : _o1[1] = captures[5];
9246 0 : _r1 = fold_build2_loc (loc, LSHIFT_EXPR, type, _o1[0], _o1[1]);
9247 0 : if (EXPR_P (_r1))
9248 0 : goto next_after_fail1671;
9249 0 : res_op1 = _r1;
9250 : }
9251 0 : tree res_op2;
9252 0 : {
9253 0 : tree _o1[2], _r1;
9254 0 : _o1[0] = captures[3];
9255 0 : _o1[1] = captures[6];
9256 0 : _r1 = fold_build2_loc (loc, LSHIFT_EXPR, type, _o1[0], _o1[1]);
9257 0 : if (EXPR_P (_r1))
9258 0 : goto next_after_fail1671;
9259 0 : res_op2 = _r1;
9260 : }
9261 0 : tree _r;
9262 0 : _r = fold_build3_loc (loc, VEC_COND_EXPR, type, res_op0, res_op1, res_op2);
9263 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 898, __FILE__, __LINE__, true);
9264 0 : return _r;
9265 : }
9266 0 : next_after_fail1671:;
9267 : }
9268 : }
9269 : }
9270 : break;
9271 : }
9272 1 : default:;
9273 : }
9274 1 : {
9275 1 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q22, _p1 };
9276 1 : if (VECTOR_TYPE_P (type)
9277 1 : && (TREE_CODE_CLASS (LSHIFT_EXPR) != tcc_comparison
9278 : || types_match (type, TREE_TYPE (captures[2]))
9279 : || expand_vec_cond_expr_p (type, TREE_TYPE (captures[1]))
9280 : || (optimize_vectors_before_lowering_p ()
9281 : && !expand_vec_cond_expr_p (TREE_TYPE (captures[2]), TREE_TYPE (captures[1]))))
9282 : )
9283 : {
9284 1 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1672;
9285 1 : {
9286 1 : if (! tree_invariant_p (captures[4])) goto next_after_fail1672;
9287 0 : tree res_op0;
9288 0 : res_op0 = captures[1];
9289 0 : tree res_op1;
9290 0 : {
9291 0 : tree _o1[2], _r1;
9292 0 : _o1[0] = captures[2];
9293 0 : _o1[1] = unshare_expr (captures[4]);
9294 0 : _r1 = fold_build2_loc (loc, LSHIFT_EXPR, type, _o1[0], _o1[1]);
9295 0 : if (EXPR_P (_r1))
9296 0 : goto next_after_fail1672;
9297 0 : res_op1 = _r1;
9298 : }
9299 0 : tree res_op2;
9300 0 : {
9301 0 : tree _o1[2], _r1;
9302 0 : _o1[0] = captures[3];
9303 0 : _o1[1] = captures[4];
9304 0 : _r1 = fold_build2_loc (loc, LSHIFT_EXPR, type, _o1[0], _o1[1]);
9305 0 : if (EXPR_P (_r1))
9306 0 : goto next_after_fail1672;
9307 0 : res_op2 = _r1;
9308 : }
9309 0 : tree _r;
9310 0 : _r = fold_build3_loc (loc, VEC_COND_EXPR, type, res_op0, res_op1, res_op2);
9311 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 900, __FILE__, __LINE__, true);
9312 0 : return _r;
9313 : }
9314 1 : next_after_fail1672:;
9315 : }
9316 : }
9317 1 : break;
9318 : }
9319 1234799 : default:;
9320 : }
9321 1234799 : switch (TREE_CODE (_p1))
9322 : {
9323 3 : case VEC_COND_EXPR:
9324 3 : {
9325 3 : tree _q30 = TREE_OPERAND (_p1, 0);
9326 3 : tree _q31 = TREE_OPERAND (_p1, 1);
9327 3 : tree _q32 = TREE_OPERAND (_p1, 2);
9328 3 : {
9329 3 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _p1, _q30, _q31, _q32 };
9330 3 : if (VECTOR_TYPE_P (type)
9331 3 : && (TREE_CODE_CLASS (LSHIFT_EXPR) != tcc_comparison
9332 : || types_match (type, TREE_TYPE (captures[3]))
9333 : || expand_vec_cond_expr_p (type, TREE_TYPE (captures[2]))
9334 : || (optimize_vectors_before_lowering_p ()
9335 : && !expand_vec_cond_expr_p (TREE_TYPE (captures[3]), TREE_TYPE (captures[2]))))
9336 : )
9337 : {
9338 3 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1673;
9339 3 : {
9340 3 : if (! tree_invariant_p (captures[0])) goto next_after_fail1673;
9341 1 : tree res_op0;
9342 1 : res_op0 = captures[2];
9343 1 : tree res_op1;
9344 1 : {
9345 1 : tree _o1[2], _r1;
9346 1 : _o1[0] = unshare_expr (captures[0]);
9347 1 : _o1[1] = captures[3];
9348 1 : _r1 = fold_build2_loc (loc, LSHIFT_EXPR, type, _o1[0], _o1[1]);
9349 1 : if (EXPR_P (_r1))
9350 0 : goto next_after_fail1673;
9351 1 : res_op1 = _r1;
9352 : }
9353 1 : tree res_op2;
9354 1 : {
9355 1 : tree _o1[2], _r1;
9356 1 : _o1[0] = captures[0];
9357 1 : _o1[1] = captures[4];
9358 1 : _r1 = fold_build2_loc (loc, LSHIFT_EXPR, type, _o1[0], _o1[1]);
9359 1 : if (EXPR_P (_r1))
9360 0 : goto next_after_fail1673;
9361 1 : res_op2 = _r1;
9362 : }
9363 1 : tree _r;
9364 1 : _r = fold_build3_loc (loc, VEC_COND_EXPR, type, res_op0, res_op1, res_op2);
9365 1 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 901, __FILE__, __LINE__, true);
9366 1 : return _r;
9367 : }
9368 2 : next_after_fail1673:;
9369 : }
9370 : }
9371 2 : break;
9372 : }
9373 1234798 : default:;
9374 : }
9375 1234798 : switch (TREE_CODE (_p0))
9376 : {
9377 0 : case VEC_PERM_EXPR:
9378 0 : {
9379 0 : tree _q20 = TREE_OPERAND (_p0, 0);
9380 0 : tree _q21 = TREE_OPERAND (_p0, 1);
9381 0 : tree _q22 = TREE_OPERAND (_p0, 2);
9382 0 : if ((_q21 == _q20 && ! TREE_SIDE_EFFECTS (_q21)) || (operand_equal_p (_q21, _q20, 0) && types_match (_q21, _q20)))
9383 : {
9384 0 : switch (TREE_CODE (_p1))
9385 : {
9386 0 : case VEC_PERM_EXPR:
9387 0 : {
9388 0 : tree _q60 = TREE_OPERAND (_p1, 0);
9389 0 : tree _q61 = TREE_OPERAND (_p1, 1);
9390 0 : tree _q62 = TREE_OPERAND (_p1, 2);
9391 0 : if ((_q61 == _q60 && ! TREE_SIDE_EFFECTS (_q61)) || (operand_equal_p (_q61, _q60, 0) && types_match (_q61, _q60)))
9392 : {
9393 0 : if ((_q62 == _q22 && ! TREE_SIDE_EFFECTS (_q62)) || (operand_equal_p (_q62, _q22, 0) && types_match (_q62, _q22)))
9394 : {
9395 0 : {
9396 0 : tree captures[4] ATTRIBUTE_UNUSED = { _q20, _q22, _q60 };
9397 0 : if (VECTOR_INTEGER_TYPE_P (type)
9398 : )
9399 : {
9400 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1674;
9401 0 : {
9402 0 : tree res_op0;
9403 0 : {
9404 0 : tree _o1[2], _r1;
9405 0 : _o1[0] = captures[0];
9406 0 : _o1[1] = captures[2];
9407 0 : _r1 = fold_build2_loc (loc, LSHIFT_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
9408 0 : captures[3] = _r1;
9409 : }
9410 0 : res_op0 = unshare_expr (captures[3]);
9411 0 : tree res_op1;
9412 0 : res_op1 = captures[3];
9413 0 : tree res_op2;
9414 0 : res_op2 = captures[1];
9415 0 : tree _r;
9416 0 : _r = fold_build3_loc (loc, VEC_PERM_EXPR, type, res_op0, res_op1, res_op2);
9417 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 902, __FILE__, __LINE__, true);
9418 0 : return _r;
9419 : }
9420 0 : next_after_fail1674:;
9421 : }
9422 : }
9423 : }
9424 : }
9425 : break;
9426 : }
9427 : default:;
9428 : }
9429 : }
9430 : break;
9431 : }
9432 : default:;
9433 : }
9434 : return NULL_TREE;
9435 : }
9436 :
9437 : tree
9438 10809702 : generic_simplify_TRUTH_AND_EXPR (location_t ARG_UNUSED (loc), enum tree_code ARG_UNUSED (code), const tree ARG_UNUSED (type), tree _p0, tree _p1)
9439 : {
9440 10809702 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
9441 10809702 : switch (TREE_CODE (_p0))
9442 : {
9443 976588 : case GE_EXPR:
9444 976588 : {
9445 976588 : tree _q20 = TREE_OPERAND (_p0, 0);
9446 976588 : tree _q21 = TREE_OPERAND (_p0, 1);
9447 976588 : {
9448 976588 : tree _q20_pops[1];
9449 976588 : if (tree_nop_convert (_q20, _q20_pops))
9450 : {
9451 13022 : tree _q30 = _q20_pops[0];
9452 13022 : if (integer_zerop (_q21))
9453 : {
9454 5923 : switch (TREE_CODE (_p1))
9455 : {
9456 548 : case NE_EXPR:
9457 548 : {
9458 548 : tree _q60 = TREE_OPERAND (_p1, 0);
9459 548 : tree _q61 = TREE_OPERAND (_p1, 1);
9460 548 : switch (TREE_CODE (_q60))
9461 : {
9462 0 : case BIT_AND_EXPR:
9463 0 : {
9464 0 : tree _q70 = TREE_OPERAND (_q60, 0);
9465 0 : tree _q71 = TREE_OPERAND (_q60, 1);
9466 0 : if ((_q70 == _q30 && ! TREE_SIDE_EFFECTS (_q70)) || (operand_equal_p (_q70, _q30, 0) && types_match (_q70, _q30)))
9467 : {
9468 0 : switch (TREE_CODE (_q71))
9469 : {
9470 0 : case INTEGER_CST:
9471 0 : {
9472 0 : if (integer_zerop (_q61))
9473 : {
9474 0 : {
9475 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q30, _q71 };
9476 0 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
9477 0 : && !TYPE_UNSIGNED (TREE_TYPE (captures[0]))
9478 0 : && wi::eq_p (wi::to_wide (captures[2]),
9479 0 : wi::max_value (TYPE_PRECISION (TREE_TYPE (captures[1])), SIGNED))
9480 : )
9481 : {
9482 0 : if (TREE_SIDE_EFFECTS (_p0)) goto next_after_fail1742;
9483 0 : if (TREE_SIDE_EFFECTS (_p1)) goto next_after_fail1742;
9484 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1742;
9485 0 : {
9486 0 : tree res_op0;
9487 0 : res_op0 = captures[0];
9488 0 : tree res_op1;
9489 0 : res_op1 = build_zero_cst (TREE_TYPE (captures[0]));
9490 0 : tree _r;
9491 0 : _r = fold_build2_loc (loc, GT_EXPR, type, res_op0, res_op1);
9492 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 946, __FILE__, __LINE__, true);
9493 0 : return _r;
9494 : }
9495 0 : next_after_fail1742:;
9496 : }
9497 : }
9498 : }
9499 : break;
9500 : }
9501 : default:;
9502 : }
9503 : }
9504 : break;
9505 : }
9506 : default:;
9507 : }
9508 : break;
9509 : }
9510 : default:;
9511 : }
9512 : }
9513 : }
9514 : }
9515 976588 : if (integer_zerop (_q21))
9516 : {
9517 352078 : switch (TREE_CODE (_p1))
9518 : {
9519 34689 : case NE_EXPR:
9520 34689 : {
9521 34689 : tree _q50 = TREE_OPERAND (_p1, 0);
9522 34689 : tree _q51 = TREE_OPERAND (_p1, 1);
9523 34689 : switch (TREE_CODE (_q50))
9524 : {
9525 1 : case BIT_AND_EXPR:
9526 1 : {
9527 1 : tree _q60 = TREE_OPERAND (_q50, 0);
9528 1 : tree _q61 = TREE_OPERAND (_q50, 1);
9529 1 : if ((_q60 == _q20 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _q20, 0) && types_match (_q60, _q20)))
9530 : {
9531 0 : switch (TREE_CODE (_q61))
9532 : {
9533 0 : case INTEGER_CST:
9534 0 : {
9535 0 : if (integer_zerop (_q51))
9536 : {
9537 0 : {
9538 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q20, _q61 };
9539 0 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
9540 0 : && !TYPE_UNSIGNED (TREE_TYPE (captures[0]))
9541 0 : && wi::eq_p (wi::to_wide (captures[2]),
9542 0 : wi::max_value (TYPE_PRECISION (TREE_TYPE (captures[1])), SIGNED))
9543 : )
9544 : {
9545 0 : if (TREE_SIDE_EFFECTS (_p0)) goto next_after_fail1743;
9546 0 : if (TREE_SIDE_EFFECTS (_p1)) goto next_after_fail1743;
9547 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1743;
9548 0 : {
9549 0 : tree res_op0;
9550 0 : res_op0 = captures[0];
9551 0 : tree res_op1;
9552 0 : res_op1 = build_zero_cst (TREE_TYPE (captures[0]));
9553 0 : tree _r;
9554 0 : _r = fold_build2_loc (loc, GT_EXPR, type, res_op0, res_op1);
9555 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 946, __FILE__, __LINE__, true);
9556 0 : return _r;
9557 : }
9558 0 : next_after_fail1743:;
9559 : }
9560 : }
9561 : }
9562 : break;
9563 : }
9564 : default:;
9565 : }
9566 : }
9567 : break;
9568 : }
9569 : default:;
9570 : }
9571 : break;
9572 : }
9573 : default:;
9574 : }
9575 : }
9576 : break;
9577 : }
9578 2466013 : case NE_EXPR:
9579 2466013 : {
9580 2466013 : tree _q20 = TREE_OPERAND (_p0, 0);
9581 2466013 : tree _q21 = TREE_OPERAND (_p0, 1);
9582 2466013 : switch (TREE_CODE (_q20))
9583 : {
9584 0 : case BIT_AND_EXPR:
9585 0 : {
9586 0 : tree _q30 = TREE_OPERAND (_q20, 0);
9587 0 : tree _q31 = TREE_OPERAND (_q20, 1);
9588 0 : switch (TREE_CODE (_q31))
9589 : {
9590 0 : case INTEGER_CST:
9591 0 : {
9592 0 : if (integer_zerop (_q21))
9593 : {
9594 0 : switch (TREE_CODE (_p1))
9595 : {
9596 0 : case GE_EXPR:
9597 0 : {
9598 0 : tree _q70 = TREE_OPERAND (_p1, 0);
9599 0 : tree _q71 = TREE_OPERAND (_p1, 1);
9600 0 : {
9601 0 : tree _q70_pops[1];
9602 0 : if (tree_nop_convert (_q70, _q70_pops))
9603 : {
9604 0 : tree _q80 = _q70_pops[0];
9605 0 : if ((_q80 == _q30 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q30, 0) && types_match (_q80, _q30)))
9606 : {
9607 0 : if (integer_zerop (_q71))
9608 : {
9609 0 : {
9610 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q70, _q30, _q31 };
9611 0 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
9612 0 : && !TYPE_UNSIGNED (TREE_TYPE (captures[0]))
9613 0 : && wi::eq_p (wi::to_wide (captures[2]),
9614 0 : wi::max_value (TYPE_PRECISION (TREE_TYPE (captures[1])), SIGNED))
9615 : )
9616 : {
9617 0 : if (TREE_SIDE_EFFECTS (_p0)) goto next_after_fail1744;
9618 0 : if (TREE_SIDE_EFFECTS (_p1)) goto next_after_fail1744;
9619 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1744;
9620 0 : {
9621 0 : tree res_op0;
9622 0 : res_op0 = captures[0];
9623 0 : tree res_op1;
9624 0 : res_op1 = build_zero_cst (TREE_TYPE (captures[0]));
9625 0 : tree _r;
9626 0 : _r = fold_build2_loc (loc, GT_EXPR, type, res_op0, res_op1);
9627 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 946, __FILE__, __LINE__, true);
9628 0 : return _r;
9629 : }
9630 0 : next_after_fail1744:;
9631 : }
9632 : }
9633 : }
9634 : }
9635 : }
9636 : }
9637 0 : if ((_q70 == _q30 && ! TREE_SIDE_EFFECTS (_q70)) || (operand_equal_p (_q70, _q30, 0) && types_match (_q70, _q30)))
9638 : {
9639 0 : if (integer_zerop (_q71))
9640 : {
9641 0 : {
9642 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q70, _q30, _q31 };
9643 0 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
9644 0 : && !TYPE_UNSIGNED (TREE_TYPE (captures[0]))
9645 0 : && wi::eq_p (wi::to_wide (captures[2]),
9646 0 : wi::max_value (TYPE_PRECISION (TREE_TYPE (captures[1])), SIGNED))
9647 : )
9648 : {
9649 0 : if (TREE_SIDE_EFFECTS (_p0)) goto next_after_fail1745;
9650 0 : if (TREE_SIDE_EFFECTS (_p1)) goto next_after_fail1745;
9651 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1745;
9652 0 : {
9653 0 : tree res_op0;
9654 0 : res_op0 = captures[0];
9655 0 : tree res_op1;
9656 0 : res_op1 = build_zero_cst (TREE_TYPE (captures[0]));
9657 0 : tree _r;
9658 0 : _r = fold_build2_loc (loc, GT_EXPR, type, res_op0, res_op1);
9659 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 946, __FILE__, __LINE__, true);
9660 0 : return _r;
9661 : }
9662 0 : next_after_fail1745:;
9663 : }
9664 : }
9665 : }
9666 : }
9667 : break;
9668 : }
9669 : default:;
9670 : }
9671 : }
9672 : break;
9673 : }
9674 : default:;
9675 : }
9676 : break;
9677 : }
9678 : default:;
9679 : }
9680 : break;
9681 : }
9682 : default:;
9683 : }
9684 : return NULL_TREE;
9685 : }
9686 :
9687 : tree
9688 9475877 : generic_simplify_TRUTH_OR_EXPR (location_t ARG_UNUSED (loc), enum tree_code ARG_UNUSED (code), const tree ARG_UNUSED (type), tree _p0, tree _p1)
9689 : {
9690 9475877 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
9691 9475877 : switch (TREE_CODE (_p0))
9692 : {
9693 1065610 : case LT_EXPR:
9694 1065610 : {
9695 1065610 : tree _q20 = TREE_OPERAND (_p0, 0);
9696 1065610 : tree _q21 = TREE_OPERAND (_p0, 1);
9697 1065610 : {
9698 1065610 : tree _q20_pops[1];
9699 1065610 : if (tree_nop_convert (_q20, _q20_pops))
9700 : {
9701 15037 : tree _q30 = _q20_pops[0];
9702 15037 : if (integer_zerop (_q21))
9703 : {
9704 4865 : switch (TREE_CODE (_p1))
9705 : {
9706 1133 : case EQ_EXPR:
9707 1133 : {
9708 1133 : tree _q60 = TREE_OPERAND (_p1, 0);
9709 1133 : tree _q61 = TREE_OPERAND (_p1, 1);
9710 1133 : switch (TREE_CODE (_q60))
9711 : {
9712 862 : case BIT_AND_EXPR:
9713 862 : {
9714 862 : tree _q70 = TREE_OPERAND (_q60, 0);
9715 862 : tree _q71 = TREE_OPERAND (_q60, 1);
9716 862 : if ((_q70 == _q30 && ! TREE_SIDE_EFFECTS (_q70)) || (operand_equal_p (_q70, _q30, 0) && types_match (_q70, _q30)))
9717 : {
9718 0 : switch (TREE_CODE (_q71))
9719 : {
9720 0 : case INTEGER_CST:
9721 0 : {
9722 0 : if (integer_zerop (_q61))
9723 : {
9724 0 : {
9725 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q30, _q71 };
9726 0 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
9727 0 : && !TYPE_UNSIGNED (TREE_TYPE (captures[0]))
9728 0 : && wi::eq_p (wi::to_wide (captures[2]),
9729 0 : wi::max_value (TYPE_PRECISION (TREE_TYPE (captures[1])), SIGNED))
9730 : )
9731 : {
9732 0 : if (TREE_SIDE_EFFECTS (_p0)) goto next_after_fail1746;
9733 0 : if (TREE_SIDE_EFFECTS (_p1)) goto next_after_fail1746;
9734 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1746;
9735 0 : {
9736 0 : tree res_op0;
9737 0 : res_op0 = captures[0];
9738 0 : tree res_op1;
9739 0 : res_op1 = build_zero_cst (TREE_TYPE (captures[0]));
9740 0 : tree _r;
9741 0 : _r = fold_build2_loc (loc, LE_EXPR, type, res_op0, res_op1);
9742 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 946, __FILE__, __LINE__, true);
9743 0 : return _r;
9744 : }
9745 0 : next_after_fail1746:;
9746 : }
9747 : }
9748 : }
9749 : break;
9750 : }
9751 : default:;
9752 : }
9753 : }
9754 : break;
9755 : }
9756 : default:;
9757 : }
9758 : break;
9759 : }
9760 : default:;
9761 : }
9762 : }
9763 : }
9764 : }
9765 1065610 : if (integer_zerop (_q21))
9766 : {
9767 324878 : switch (TREE_CODE (_p1))
9768 : {
9769 126799 : case EQ_EXPR:
9770 126799 : {
9771 126799 : tree _q50 = TREE_OPERAND (_p1, 0);
9772 126799 : tree _q51 = TREE_OPERAND (_p1, 1);
9773 126799 : switch (TREE_CODE (_q50))
9774 : {
9775 105528 : case BIT_AND_EXPR:
9776 105528 : {
9777 105528 : tree _q60 = TREE_OPERAND (_q50, 0);
9778 105528 : tree _q61 = TREE_OPERAND (_q50, 1);
9779 105528 : if ((_q60 == _q20 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _q20, 0) && types_match (_q60, _q20)))
9780 : {
9781 0 : switch (TREE_CODE (_q61))
9782 : {
9783 0 : case INTEGER_CST:
9784 0 : {
9785 0 : if (integer_zerop (_q51))
9786 : {
9787 0 : {
9788 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q20, _q61 };
9789 0 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
9790 0 : && !TYPE_UNSIGNED (TREE_TYPE (captures[0]))
9791 0 : && wi::eq_p (wi::to_wide (captures[2]),
9792 0 : wi::max_value (TYPE_PRECISION (TREE_TYPE (captures[1])), SIGNED))
9793 : )
9794 : {
9795 0 : if (TREE_SIDE_EFFECTS (_p0)) goto next_after_fail1747;
9796 0 : if (TREE_SIDE_EFFECTS (_p1)) goto next_after_fail1747;
9797 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1747;
9798 0 : {
9799 0 : tree res_op0;
9800 0 : res_op0 = captures[0];
9801 0 : tree res_op1;
9802 0 : res_op1 = build_zero_cst (TREE_TYPE (captures[0]));
9803 0 : tree _r;
9804 0 : _r = fold_build2_loc (loc, LE_EXPR, type, res_op0, res_op1);
9805 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 946, __FILE__, __LINE__, true);
9806 0 : return _r;
9807 : }
9808 0 : next_after_fail1747:;
9809 : }
9810 : }
9811 : }
9812 : break;
9813 : }
9814 : default:;
9815 : }
9816 : }
9817 : break;
9818 : }
9819 : default:;
9820 : }
9821 : break;
9822 : }
9823 : default:;
9824 : }
9825 : }
9826 1065610 : switch (TREE_CODE (_q20))
9827 : {
9828 2278 : case POINTER_PLUS_EXPR:
9829 2278 : {
9830 2278 : tree _q30 = TREE_OPERAND (_q20, 0);
9831 2278 : tree _q31 = TREE_OPERAND (_q20, 1);
9832 2278 : switch (TREE_CODE (_q31))
9833 : {
9834 2094 : case INTEGER_CST:
9835 2094 : {
9836 2094 : switch (TREE_CODE (_p1))
9837 : {
9838 143 : case LT_EXPR:
9839 143 : {
9840 143 : tree _q70 = TREE_OPERAND (_p1, 0);
9841 143 : tree _q71 = TREE_OPERAND (_p1, 1);
9842 143 : switch (TREE_CODE (_q70))
9843 : {
9844 10 : case POINTER_PLUS_EXPR:
9845 10 : {
9846 10 : tree _q80 = TREE_OPERAND (_q70, 0);
9847 10 : tree _q81 = TREE_OPERAND (_q70, 1);
9848 10 : if ((_q80 == _q21 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q21, 0) && types_match (_q80, _q21)))
9849 : {
9850 1 : if ((_q81 == _q31 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q31, 0) && types_match (_q81, _q31)))
9851 : {
9852 1 : if ((_q71 == _q30 && ! TREE_SIDE_EFFECTS (_q71)) || (operand_equal_p (_q71, _q30, 0) && types_match (_q71, _q30)))
9853 : {
9854 1 : {
9855 1 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q31, _q21, _p1, _q70 };
9856 1 : const enum tree_code cmp = LT_EXPR;
9857 1 : if (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[2]))
9858 0 : && TYPE_OVERFLOW_WRAPS (sizetype)
9859 1 : && TYPE_PRECISION (TREE_TYPE (captures[2])) == TYPE_PRECISION (sizetype)
9860 : )
9861 : {
9862 0 : {
9863 0 : offset_int off = wi::to_offset (captures[3]) - (cmp == LE_EXPR ? 1 : 0);
9864 0 : offset_int rhs = off * 2;
9865 0 : if (wi::min_precision (rhs, UNSIGNED) <= TYPE_PRECISION (sizetype)
9866 : )
9867 : {
9868 0 : {
9869 0 : bool swap_p = tree_swap_operands_p (captures[2], captures[4]);
9870 0 : tree rhs_tree = wide_int_to_tree (sizetype, rhs);
9871 0 : if (cmp == LT_EXPR
9872 : )
9873 : {
9874 0 : if (TREE_SIDE_EFFECTS (captures[1])) goto next_after_fail1748;
9875 0 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail1748;
9876 0 : if (TREE_SIDE_EFFECTS (captures[3])) goto next_after_fail1748;
9877 0 : if (TREE_SIDE_EFFECTS (captures[4])) goto next_after_fail1748;
9878 0 : if (TREE_SIDE_EFFECTS (captures[6])) goto next_after_fail1748;
9879 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1748;
9880 0 : {
9881 0 : tree res_op0;
9882 0 : {
9883 0 : tree _o1[1], _r1;
9884 0 : {
9885 0 : tree _o2[2], _r2;
9886 0 : _o2[0] = swap_p ? captures[6] : captures[1];
9887 0 : _o2[1] = swap_p ? captures[2] : captures[4];
9888 0 : _r2 = fold_build2_loc (loc, POINTER_DIFF_EXPR, ssizetype, _o2[0], _o2[1]);
9889 0 : _o1[0] = _r2;
9890 : }
9891 0 : if (TREE_TYPE (_o1[0]) != sizetype)
9892 : {
9893 0 : _r1 = fold_build1_loc (loc, NOP_EXPR, sizetype, _o1[0]);
9894 : }
9895 : else
9896 : _r1 = _o1[0];
9897 0 : res_op0 = _r1;
9898 : }
9899 0 : tree res_op1;
9900 0 : res_op1 = rhs_tree;
9901 0 : tree _r;
9902 0 : _r = fold_build2_loc (loc, GT_EXPR, type, res_op0, res_op1);
9903 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 950, __FILE__, __LINE__, true);
9904 0 : return _r;
9905 : }
9906 0 : next_after_fail1748:;
9907 : }
9908 : else
9909 : {
9910 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail1749;
9911 : if (TREE_SIDE_EFFECTS (captures[3])) goto next_after_fail1749;
9912 : if (TREE_SIDE_EFFECTS (captures[4])) goto next_after_fail1749;
9913 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1749;
9914 : {
9915 : tree res_op0;
9916 : {
9917 : tree _o1[1], _r1;
9918 : {
9919 : tree _o2[2], _r2;
9920 : {
9921 : tree _o3[2], _r3;
9922 : _o3[0] = swap_p ? captures[4] : captures[2];
9923 : _o3[1] = wide_int_to_tree (sizetype, off);
9924 : _r3 = fold_build2_loc (loc, POINTER_PLUS_EXPR, TREE_TYPE (_o3[0]), _o3[0], _o3[1]);
9925 : _o2[0] = _r3;
9926 : }
9927 : _o2[1] = swap_p ? captures[2] : captures[4];
9928 : _r2 = fold_build2_loc (loc, POINTER_DIFF_EXPR, ssizetype, _o2[0], _o2[1]);
9929 : _o1[0] = _r2;
9930 : }
9931 : if (TREE_TYPE (_o1[0]) != sizetype)
9932 : {
9933 : _r1 = fold_build1_loc (loc, NOP_EXPR, sizetype, _o1[0]);
9934 : }
9935 : else
9936 : _r1 = _o1[0];
9937 : res_op0 = _r1;
9938 : }
9939 : tree res_op1;
9940 : res_op1 = rhs_tree;
9941 : tree _r;
9942 : _r = fold_build2_loc (loc, GT_EXPR, type, res_op0, res_op1);
9943 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 951, __FILE__, __LINE__, true);
9944 : return _r;
9945 : }
9946 : next_after_fail1749:;
9947 : }
9948 : }
9949 : }
9950 : }
9951 : }
9952 : }
9953 : }
9954 : }
9955 : }
9956 : break;
9957 : }
9958 : default:;
9959 : }
9960 : break;
9961 : }
9962 756 : case GT_EXPR:
9963 756 : {
9964 756 : tree _q70 = TREE_OPERAND (_p1, 0);
9965 756 : tree _q71 = TREE_OPERAND (_p1, 1);
9966 756 : if ((_q70 == _q30 && ! TREE_SIDE_EFFECTS (_q70)) || (operand_equal_p (_q70, _q30, 0) && types_match (_q70, _q30)))
9967 : {
9968 0 : switch (TREE_CODE (_q71))
9969 : {
9970 0 : case POINTER_PLUS_EXPR:
9971 0 : {
9972 0 : tree _q90 = TREE_OPERAND (_q71, 0);
9973 0 : tree _q91 = TREE_OPERAND (_q71, 1);
9974 0 : if ((_q90 == _q21 && ! TREE_SIDE_EFFECTS (_q90)) || (operand_equal_p (_q90, _q21, 0) && types_match (_q90, _q21)))
9975 : {
9976 0 : if ((_q91 == _q31 && ! TREE_SIDE_EFFECTS (_q91)) || (operand_equal_p (_q91, _q31, 0) && types_match (_q91, _q31)))
9977 : {
9978 0 : {
9979 0 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q31, _q21, _p1, _q71 };
9980 0 : const enum tree_code cmp = LT_EXPR;
9981 0 : if (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[2]))
9982 0 : && TYPE_OVERFLOW_WRAPS (sizetype)
9983 0 : && TYPE_PRECISION (TREE_TYPE (captures[2])) == TYPE_PRECISION (sizetype)
9984 : )
9985 : {
9986 0 : {
9987 0 : offset_int off = wi::to_offset (captures[3]) - (cmp == LE_EXPR ? 1 : 0);
9988 0 : offset_int rhs = off * 2;
9989 0 : if (wi::min_precision (rhs, UNSIGNED) <= TYPE_PRECISION (sizetype)
9990 : )
9991 : {
9992 0 : {
9993 0 : bool swap_p = tree_swap_operands_p (captures[2], captures[4]);
9994 0 : tree rhs_tree = wide_int_to_tree (sizetype, rhs);
9995 0 : if (cmp == LT_EXPR
9996 : )
9997 : {
9998 0 : if (TREE_SIDE_EFFECTS (captures[1])) goto next_after_fail1750;
9999 0 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail1750;
10000 0 : if (TREE_SIDE_EFFECTS (captures[3])) goto next_after_fail1750;
10001 0 : if (TREE_SIDE_EFFECTS (captures[4])) goto next_after_fail1750;
10002 0 : if (TREE_SIDE_EFFECTS (captures[6])) goto next_after_fail1750;
10003 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1750;
10004 0 : {
10005 0 : tree res_op0;
10006 0 : {
10007 0 : tree _o1[1], _r1;
10008 0 : {
10009 0 : tree _o2[2], _r2;
10010 0 : _o2[0] = swap_p ? captures[6] : captures[1];
10011 0 : _o2[1] = swap_p ? captures[2] : captures[4];
10012 0 : _r2 = fold_build2_loc (loc, POINTER_DIFF_EXPR, ssizetype, _o2[0], _o2[1]);
10013 0 : _o1[0] = _r2;
10014 : }
10015 0 : if (TREE_TYPE (_o1[0]) != sizetype)
10016 : {
10017 0 : _r1 = fold_build1_loc (loc, NOP_EXPR, sizetype, _o1[0]);
10018 : }
10019 : else
10020 : _r1 = _o1[0];
10021 0 : res_op0 = _r1;
10022 : }
10023 0 : tree res_op1;
10024 0 : res_op1 = rhs_tree;
10025 0 : tree _r;
10026 0 : _r = fold_build2_loc (loc, GT_EXPR, type, res_op0, res_op1);
10027 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 950, __FILE__, __LINE__, true);
10028 0 : return _r;
10029 : }
10030 0 : next_after_fail1750:;
10031 : }
10032 : else
10033 : {
10034 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail1751;
10035 : if (TREE_SIDE_EFFECTS (captures[3])) goto next_after_fail1751;
10036 : if (TREE_SIDE_EFFECTS (captures[4])) goto next_after_fail1751;
10037 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1751;
10038 : {
10039 : tree res_op0;
10040 : {
10041 : tree _o1[1], _r1;
10042 : {
10043 : tree _o2[2], _r2;
10044 : {
10045 : tree _o3[2], _r3;
10046 : _o3[0] = swap_p ? captures[4] : captures[2];
10047 : _o3[1] = wide_int_to_tree (sizetype, off);
10048 : _r3 = fold_build2_loc (loc, POINTER_PLUS_EXPR, TREE_TYPE (_o3[0]), _o3[0], _o3[1]);
10049 : _o2[0] = _r3;
10050 : }
10051 : _o2[1] = swap_p ? captures[2] : captures[4];
10052 : _r2 = fold_build2_loc (loc, POINTER_DIFF_EXPR, ssizetype, _o2[0], _o2[1]);
10053 : _o1[0] = _r2;
10054 : }
10055 : if (TREE_TYPE (_o1[0]) != sizetype)
10056 : {
10057 : _r1 = fold_build1_loc (loc, NOP_EXPR, sizetype, _o1[0]);
10058 : }
10059 : else
10060 : _r1 = _o1[0];
10061 : res_op0 = _r1;
10062 : }
10063 : tree res_op1;
10064 : res_op1 = rhs_tree;
10065 : tree _r;
10066 : _r = fold_build2_loc (loc, GT_EXPR, type, res_op0, res_op1);
10067 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 951, __FILE__, __LINE__, true);
10068 : return _r;
10069 : }
10070 : next_after_fail1751:;
10071 : }
10072 : }
10073 : }
10074 : }
10075 : }
10076 : }
10077 : }
10078 : }
10079 : break;
10080 : }
10081 : default:;
10082 : }
10083 : }
10084 : break;
10085 : }
10086 : default:;
10087 : }
10088 : break;
10089 : }
10090 : default:;
10091 : }
10092 : break;
10093 : }
10094 : default:;
10095 : }
10096 : break;
10097 : }
10098 2066306 : case EQ_EXPR:
10099 2066306 : {
10100 2066306 : tree _q20 = TREE_OPERAND (_p0, 0);
10101 2066306 : tree _q21 = TREE_OPERAND (_p0, 1);
10102 2066306 : switch (TREE_CODE (_q20))
10103 : {
10104 56425 : case BIT_AND_EXPR:
10105 56425 : {
10106 56425 : tree _q30 = TREE_OPERAND (_q20, 0);
10107 56425 : tree _q31 = TREE_OPERAND (_q20, 1);
10108 56425 : switch (TREE_CODE (_q31))
10109 : {
10110 56425 : case INTEGER_CST:
10111 56425 : {
10112 56425 : if (integer_zerop (_q21))
10113 : {
10114 56406 : switch (TREE_CODE (_p1))
10115 : {
10116 0 : case LT_EXPR:
10117 0 : {
10118 0 : tree _q70 = TREE_OPERAND (_p1, 0);
10119 0 : tree _q71 = TREE_OPERAND (_p1, 1);
10120 0 : {
10121 0 : tree _q70_pops[1];
10122 0 : if (tree_nop_convert (_q70, _q70_pops))
10123 : {
10124 0 : tree _q80 = _q70_pops[0];
10125 0 : if ((_q80 == _q30 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q30, 0) && types_match (_q80, _q30)))
10126 : {
10127 0 : if (integer_zerop (_q71))
10128 : {
10129 0 : {
10130 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q70, _q30, _q31 };
10131 0 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
10132 0 : && !TYPE_UNSIGNED (TREE_TYPE (captures[0]))
10133 0 : && wi::eq_p (wi::to_wide (captures[2]),
10134 0 : wi::max_value (TYPE_PRECISION (TREE_TYPE (captures[1])), SIGNED))
10135 : )
10136 : {
10137 0 : if (TREE_SIDE_EFFECTS (_p0)) goto next_after_fail1752;
10138 0 : if (TREE_SIDE_EFFECTS (_p1)) goto next_after_fail1752;
10139 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1752;
10140 0 : {
10141 0 : tree res_op0;
10142 0 : res_op0 = captures[0];
10143 0 : tree res_op1;
10144 0 : res_op1 = build_zero_cst (TREE_TYPE (captures[0]));
10145 0 : tree _r;
10146 0 : _r = fold_build2_loc (loc, LE_EXPR, type, res_op0, res_op1);
10147 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 946, __FILE__, __LINE__, true);
10148 0 : return _r;
10149 : }
10150 0 : next_after_fail1752:;
10151 : }
10152 : }
10153 : }
10154 : }
10155 : }
10156 : }
10157 0 : if ((_q70 == _q30 && ! TREE_SIDE_EFFECTS (_q70)) || (operand_equal_p (_q70, _q30, 0) && types_match (_q70, _q30)))
10158 : {
10159 0 : if (integer_zerop (_q71))
10160 : {
10161 0 : {
10162 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q70, _q30, _q31 };
10163 0 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
10164 0 : && !TYPE_UNSIGNED (TREE_TYPE (captures[0]))
10165 0 : && wi::eq_p (wi::to_wide (captures[2]),
10166 0 : wi::max_value (TYPE_PRECISION (TREE_TYPE (captures[1])), SIGNED))
10167 : )
10168 : {
10169 0 : if (TREE_SIDE_EFFECTS (_p0)) goto next_after_fail1753;
10170 0 : if (TREE_SIDE_EFFECTS (_p1)) goto next_after_fail1753;
10171 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1753;
10172 0 : {
10173 0 : tree res_op0;
10174 0 : res_op0 = captures[0];
10175 0 : tree res_op1;
10176 0 : res_op1 = build_zero_cst (TREE_TYPE (captures[0]));
10177 0 : tree _r;
10178 0 : _r = fold_build2_loc (loc, LE_EXPR, type, res_op0, res_op1);
10179 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 946, __FILE__, __LINE__, true);
10180 0 : return _r;
10181 : }
10182 0 : next_after_fail1753:;
10183 : }
10184 : }
10185 : }
10186 : }
10187 : break;
10188 : }
10189 : default:;
10190 : }
10191 : }
10192 : break;
10193 : }
10194 : default:;
10195 : }
10196 : break;
10197 : }
10198 : default:;
10199 : }
10200 : break;
10201 : }
10202 1338301 : case LE_EXPR:
10203 1338301 : {
10204 1338301 : tree _q20 = TREE_OPERAND (_p0, 0);
10205 1338301 : tree _q21 = TREE_OPERAND (_p0, 1);
10206 1338301 : switch (TREE_CODE (_q20))
10207 : {
10208 3927 : case POINTER_PLUS_EXPR:
10209 3927 : {
10210 3927 : tree _q30 = TREE_OPERAND (_q20, 0);
10211 3927 : tree _q31 = TREE_OPERAND (_q20, 1);
10212 3927 : switch (TREE_CODE (_q31))
10213 : {
10214 3689 : case INTEGER_CST:
10215 3689 : {
10216 3689 : switch (TREE_CODE (_p1))
10217 : {
10218 1090 : case LE_EXPR:
10219 1090 : {
10220 1090 : tree _q70 = TREE_OPERAND (_p1, 0);
10221 1090 : tree _q71 = TREE_OPERAND (_p1, 1);
10222 1090 : switch (TREE_CODE (_q70))
10223 : {
10224 804 : case POINTER_PLUS_EXPR:
10225 804 : {
10226 804 : tree _q80 = TREE_OPERAND (_q70, 0);
10227 804 : tree _q81 = TREE_OPERAND (_q70, 1);
10228 804 : if ((_q80 == _q21 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q21, 0) && types_match (_q80, _q21)))
10229 : {
10230 518 : if ((_q81 == _q31 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q31, 0) && types_match (_q81, _q31)))
10231 : {
10232 399 : if ((_q71 == _q30 && ! TREE_SIDE_EFFECTS (_q71)) || (operand_equal_p (_q71, _q30, 0) && types_match (_q71, _q30)))
10233 : {
10234 399 : {
10235 399 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q31, _q21, _p1, _q70 };
10236 399 : const enum tree_code cmp = LE_EXPR;
10237 399 : if (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[2]))
10238 398 : && TYPE_OVERFLOW_WRAPS (sizetype)
10239 797 : && TYPE_PRECISION (TREE_TYPE (captures[2])) == TYPE_PRECISION (sizetype)
10240 : )
10241 : {
10242 398 : {
10243 398 : offset_int off = wi::to_offset (captures[3]) - (cmp == LE_EXPR ? 1 : 0);
10244 398 : offset_int rhs = off * 2;
10245 398 : if (wi::min_precision (rhs, UNSIGNED) <= TYPE_PRECISION (sizetype)
10246 : )
10247 : {
10248 398 : {
10249 398 : bool swap_p = tree_swap_operands_p (captures[2], captures[4]);
10250 398 : tree rhs_tree = wide_int_to_tree (sizetype, rhs);
10251 398 : if (cmp == LT_EXPR
10252 : )
10253 : {
10254 : if (TREE_SIDE_EFFECTS (captures[1])) goto next_after_fail1754;
10255 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail1754;
10256 : if (TREE_SIDE_EFFECTS (captures[3])) goto next_after_fail1754;
10257 : if (TREE_SIDE_EFFECTS (captures[4])) goto next_after_fail1754;
10258 : if (TREE_SIDE_EFFECTS (captures[6])) goto next_after_fail1754;
10259 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1754;
10260 : {
10261 : tree res_op0;
10262 : {
10263 : tree _o1[1], _r1;
10264 : {
10265 : tree _o2[2], _r2;
10266 : _o2[0] = swap_p ? captures[6] : captures[1];
10267 : _o2[1] = swap_p ? captures[2] : captures[4];
10268 : _r2 = fold_build2_loc (loc, POINTER_DIFF_EXPR, ssizetype, _o2[0], _o2[1]);
10269 : _o1[0] = _r2;
10270 : }
10271 : if (TREE_TYPE (_o1[0]) != sizetype)
10272 : {
10273 : _r1 = fold_build1_loc (loc, NOP_EXPR, sizetype, _o1[0]);
10274 : }
10275 : else
10276 : _r1 = _o1[0];
10277 : res_op0 = _r1;
10278 : }
10279 : tree res_op1;
10280 : res_op1 = rhs_tree;
10281 : tree _r;
10282 : _r = fold_build2_loc (loc, GT_EXPR, type, res_op0, res_op1);
10283 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 950, __FILE__, __LINE__, true);
10284 398 : return _r;
10285 : }
10286 : next_after_fail1754:;
10287 : }
10288 : else
10289 : {
10290 398 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail1755;
10291 398 : if (TREE_SIDE_EFFECTS (captures[3])) goto next_after_fail1755;
10292 398 : if (TREE_SIDE_EFFECTS (captures[4])) goto next_after_fail1755;
10293 398 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1755;
10294 398 : {
10295 398 : tree res_op0;
10296 398 : {
10297 398 : tree _o1[1], _r1;
10298 398 : {
10299 398 : tree _o2[2], _r2;
10300 398 : {
10301 398 : tree _o3[2], _r3;
10302 398 : _o3[0] = swap_p ? captures[4] : captures[2];
10303 398 : _o3[1] = wide_int_to_tree (sizetype, off);
10304 398 : _r3 = fold_build2_loc (loc, POINTER_PLUS_EXPR, TREE_TYPE (_o3[0]), _o3[0], _o3[1]);
10305 398 : _o2[0] = _r3;
10306 : }
10307 398 : _o2[1] = swap_p ? captures[2] : captures[4];
10308 398 : _r2 = fold_build2_loc (loc, POINTER_DIFF_EXPR, ssizetype, _o2[0], _o2[1]);
10309 398 : _o1[0] = _r2;
10310 : }
10311 398 : if (TREE_TYPE (_o1[0]) != sizetype)
10312 : {
10313 398 : _r1 = fold_build1_loc (loc, NOP_EXPR, sizetype, _o1[0]);
10314 : }
10315 : else
10316 : _r1 = _o1[0];
10317 398 : res_op0 = _r1;
10318 : }
10319 398 : tree res_op1;
10320 398 : res_op1 = rhs_tree;
10321 398 : tree _r;
10322 398 : _r = fold_build2_loc (loc, GT_EXPR, type, res_op0, res_op1);
10323 398 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 951, __FILE__, __LINE__, true);
10324 398 : return _r;
10325 : }
10326 0 : next_after_fail1755:;
10327 : }
10328 : }
10329 : }
10330 : }
10331 : }
10332 : }
10333 : }
10334 : }
10335 : }
10336 : break;
10337 : }
10338 : default:;
10339 : }
10340 : break;
10341 : }
10342 117 : case GE_EXPR:
10343 117 : {
10344 117 : tree _q70 = TREE_OPERAND (_p1, 0);
10345 117 : tree _q71 = TREE_OPERAND (_p1, 1);
10346 117 : if ((_q70 == _q30 && ! TREE_SIDE_EFFECTS (_q70)) || (operand_equal_p (_q70, _q30, 0) && types_match (_q70, _q30)))
10347 : {
10348 18 : switch (TREE_CODE (_q71))
10349 : {
10350 18 : case POINTER_PLUS_EXPR:
10351 18 : {
10352 18 : tree _q90 = TREE_OPERAND (_q71, 0);
10353 18 : tree _q91 = TREE_OPERAND (_q71, 1);
10354 18 : if ((_q90 == _q21 && ! TREE_SIDE_EFFECTS (_q90)) || (operand_equal_p (_q90, _q21, 0) && types_match (_q90, _q21)))
10355 : {
10356 16 : if ((_q91 == _q31 && ! TREE_SIDE_EFFECTS (_q91)) || (operand_equal_p (_q91, _q31, 0) && types_match (_q91, _q31)))
10357 : {
10358 11 : {
10359 11 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q31, _q21, _p1, _q71 };
10360 11 : const enum tree_code cmp = LE_EXPR;
10361 11 : if (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[2]))
10362 11 : && TYPE_OVERFLOW_WRAPS (sizetype)
10363 22 : && TYPE_PRECISION (TREE_TYPE (captures[2])) == TYPE_PRECISION (sizetype)
10364 : )
10365 : {
10366 11 : {
10367 11 : offset_int off = wi::to_offset (captures[3]) - (cmp == LE_EXPR ? 1 : 0);
10368 11 : offset_int rhs = off * 2;
10369 11 : if (wi::min_precision (rhs, UNSIGNED) <= TYPE_PRECISION (sizetype)
10370 : )
10371 : {
10372 11 : {
10373 11 : bool swap_p = tree_swap_operands_p (captures[2], captures[4]);
10374 11 : tree rhs_tree = wide_int_to_tree (sizetype, rhs);
10375 11 : if (cmp == LT_EXPR
10376 : )
10377 : {
10378 : if (TREE_SIDE_EFFECTS (captures[1])) goto next_after_fail1756;
10379 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail1756;
10380 : if (TREE_SIDE_EFFECTS (captures[3])) goto next_after_fail1756;
10381 : if (TREE_SIDE_EFFECTS (captures[4])) goto next_after_fail1756;
10382 : if (TREE_SIDE_EFFECTS (captures[6])) goto next_after_fail1756;
10383 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1756;
10384 : {
10385 : tree res_op0;
10386 : {
10387 : tree _o1[1], _r1;
10388 : {
10389 : tree _o2[2], _r2;
10390 : _o2[0] = swap_p ? captures[6] : captures[1];
10391 : _o2[1] = swap_p ? captures[2] : captures[4];
10392 : _r2 = fold_build2_loc (loc, POINTER_DIFF_EXPR, ssizetype, _o2[0], _o2[1]);
10393 : _o1[0] = _r2;
10394 : }
10395 : if (TREE_TYPE (_o1[0]) != sizetype)
10396 : {
10397 : _r1 = fold_build1_loc (loc, NOP_EXPR, sizetype, _o1[0]);
10398 : }
10399 : else
10400 : _r1 = _o1[0];
10401 : res_op0 = _r1;
10402 : }
10403 : tree res_op1;
10404 : res_op1 = rhs_tree;
10405 : tree _r;
10406 : _r = fold_build2_loc (loc, GT_EXPR, type, res_op0, res_op1);
10407 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 950, __FILE__, __LINE__, true);
10408 11 : return _r;
10409 : }
10410 : next_after_fail1756:;
10411 : }
10412 : else
10413 : {
10414 11 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail1757;
10415 11 : if (TREE_SIDE_EFFECTS (captures[3])) goto next_after_fail1757;
10416 11 : if (TREE_SIDE_EFFECTS (captures[4])) goto next_after_fail1757;
10417 11 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1757;
10418 11 : {
10419 11 : tree res_op0;
10420 11 : {
10421 11 : tree _o1[1], _r1;
10422 11 : {
10423 11 : tree _o2[2], _r2;
10424 11 : {
10425 11 : tree _o3[2], _r3;
10426 11 : _o3[0] = swap_p ? captures[4] : captures[2];
10427 11 : _o3[1] = wide_int_to_tree (sizetype, off);
10428 11 : _r3 = fold_build2_loc (loc, POINTER_PLUS_EXPR, TREE_TYPE (_o3[0]), _o3[0], _o3[1]);
10429 11 : _o2[0] = _r3;
10430 : }
10431 11 : _o2[1] = swap_p ? captures[2] : captures[4];
10432 11 : _r2 = fold_build2_loc (loc, POINTER_DIFF_EXPR, ssizetype, _o2[0], _o2[1]);
10433 11 : _o1[0] = _r2;
10434 : }
10435 11 : if (TREE_TYPE (_o1[0]) != sizetype)
10436 : {
10437 11 : _r1 = fold_build1_loc (loc, NOP_EXPR, sizetype, _o1[0]);
10438 : }
10439 : else
10440 : _r1 = _o1[0];
10441 11 : res_op0 = _r1;
10442 : }
10443 11 : tree res_op1;
10444 11 : res_op1 = rhs_tree;
10445 11 : tree _r;
10446 11 : _r = fold_build2_loc (loc, GT_EXPR, type, res_op0, res_op1);
10447 11 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 951, __FILE__, __LINE__, true);
10448 11 : return _r;
10449 : }
10450 0 : next_after_fail1757:;
10451 : }
10452 : }
10453 : }
10454 : }
10455 : }
10456 : }
10457 : }
10458 : }
10459 : break;
10460 : }
10461 : default:;
10462 : }
10463 : }
10464 : break;
10465 : }
10466 : default:;
10467 : }
10468 : break;
10469 : }
10470 : default:;
10471 : }
10472 : break;
10473 : }
10474 : default:;
10475 : }
10476 : break;
10477 : }
10478 794286 : case GE_EXPR:
10479 794286 : {
10480 794286 : tree _q20 = TREE_OPERAND (_p0, 0);
10481 794286 : tree _q21 = TREE_OPERAND (_p0, 1);
10482 794286 : switch (TREE_CODE (_q21))
10483 : {
10484 56 : case POINTER_PLUS_EXPR:
10485 56 : {
10486 56 : tree _q40 = TREE_OPERAND (_q21, 0);
10487 56 : tree _q41 = TREE_OPERAND (_q21, 1);
10488 56 : switch (TREE_CODE (_q41))
10489 : {
10490 56 : case INTEGER_CST:
10491 56 : {
10492 56 : switch (TREE_CODE (_p1))
10493 : {
10494 54 : case LE_EXPR:
10495 54 : {
10496 54 : tree _q70 = TREE_OPERAND (_p1, 0);
10497 54 : tree _q71 = TREE_OPERAND (_p1, 1);
10498 54 : switch (TREE_CODE (_q70))
10499 : {
10500 44 : case POINTER_PLUS_EXPR:
10501 44 : {
10502 44 : tree _q80 = TREE_OPERAND (_q70, 0);
10503 44 : tree _q81 = TREE_OPERAND (_q70, 1);
10504 44 : if ((_q80 == _q20 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q20, 0) && types_match (_q80, _q20)))
10505 : {
10506 29 : if ((_q81 == _q41 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q41, 0) && types_match (_q81, _q41)))
10507 : {
10508 3 : if ((_q71 == _q40 && ! TREE_SIDE_EFFECTS (_q71)) || (operand_equal_p (_q71, _q40, 0) && types_match (_q71, _q40)))
10509 : {
10510 3 : {
10511 3 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q21, _q40, _q41, _q20, _p1, _q70 };
10512 3 : const enum tree_code cmp = LE_EXPR;
10513 3 : if (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[2]))
10514 3 : && TYPE_OVERFLOW_WRAPS (sizetype)
10515 6 : && TYPE_PRECISION (TREE_TYPE (captures[2])) == TYPE_PRECISION (sizetype)
10516 : )
10517 : {
10518 3 : {
10519 3 : offset_int off = wi::to_offset (captures[3]) - (cmp == LE_EXPR ? 1 : 0);
10520 3 : offset_int rhs = off * 2;
10521 3 : if (wi::min_precision (rhs, UNSIGNED) <= TYPE_PRECISION (sizetype)
10522 : )
10523 : {
10524 3 : {
10525 3 : bool swap_p = tree_swap_operands_p (captures[2], captures[4]);
10526 3 : tree rhs_tree = wide_int_to_tree (sizetype, rhs);
10527 3 : if (cmp == LT_EXPR
10528 : )
10529 : {
10530 : if (TREE_SIDE_EFFECTS (captures[1])) goto next_after_fail1758;
10531 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail1758;
10532 : if (TREE_SIDE_EFFECTS (captures[3])) goto next_after_fail1758;
10533 : if (TREE_SIDE_EFFECTS (captures[4])) goto next_after_fail1758;
10534 : if (TREE_SIDE_EFFECTS (captures[6])) goto next_after_fail1758;
10535 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1758;
10536 : {
10537 : tree res_op0;
10538 : {
10539 : tree _o1[1], _r1;
10540 : {
10541 : tree _o2[2], _r2;
10542 : _o2[0] = swap_p ? captures[6] : captures[1];
10543 : _o2[1] = swap_p ? captures[2] : captures[4];
10544 : _r2 = fold_build2_loc (loc, POINTER_DIFF_EXPR, ssizetype, _o2[0], _o2[1]);
10545 : _o1[0] = _r2;
10546 : }
10547 : if (TREE_TYPE (_o1[0]) != sizetype)
10548 : {
10549 : _r1 = fold_build1_loc (loc, NOP_EXPR, sizetype, _o1[0]);
10550 : }
10551 : else
10552 : _r1 = _o1[0];
10553 : res_op0 = _r1;
10554 : }
10555 : tree res_op1;
10556 : res_op1 = rhs_tree;
10557 : tree _r;
10558 : _r = fold_build2_loc (loc, GT_EXPR, type, res_op0, res_op1);
10559 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 950, __FILE__, __LINE__, true);
10560 3 : return _r;
10561 : }
10562 : next_after_fail1758:;
10563 : }
10564 : else
10565 : {
10566 3 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail1759;
10567 3 : if (TREE_SIDE_EFFECTS (captures[3])) goto next_after_fail1759;
10568 3 : if (TREE_SIDE_EFFECTS (captures[4])) goto next_after_fail1759;
10569 3 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1759;
10570 3 : {
10571 3 : tree res_op0;
10572 3 : {
10573 3 : tree _o1[1], _r1;
10574 3 : {
10575 3 : tree _o2[2], _r2;
10576 3 : {
10577 3 : tree _o3[2], _r3;
10578 3 : _o3[0] = swap_p ? captures[4] : captures[2];
10579 3 : _o3[1] = wide_int_to_tree (sizetype, off);
10580 3 : _r3 = fold_build2_loc (loc, POINTER_PLUS_EXPR, TREE_TYPE (_o3[0]), _o3[0], _o3[1]);
10581 3 : _o2[0] = _r3;
10582 : }
10583 3 : _o2[1] = swap_p ? captures[2] : captures[4];
10584 3 : _r2 = fold_build2_loc (loc, POINTER_DIFF_EXPR, ssizetype, _o2[0], _o2[1]);
10585 3 : _o1[0] = _r2;
10586 : }
10587 3 : if (TREE_TYPE (_o1[0]) != sizetype)
10588 : {
10589 3 : _r1 = fold_build1_loc (loc, NOP_EXPR, sizetype, _o1[0]);
10590 : }
10591 : else
10592 : _r1 = _o1[0];
10593 3 : res_op0 = _r1;
10594 : }
10595 3 : tree res_op1;
10596 3 : res_op1 = rhs_tree;
10597 3 : tree _r;
10598 3 : _r = fold_build2_loc (loc, GT_EXPR, type, res_op0, res_op1);
10599 3 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 951, __FILE__, __LINE__, true);
10600 3 : return _r;
10601 : }
10602 0 : next_after_fail1759:;
10603 : }
10604 : }
10605 : }
10606 : }
10607 : }
10608 : }
10609 : }
10610 : }
10611 : }
10612 : break;
10613 : }
10614 : default:;
10615 : }
10616 : break;
10617 : }
10618 0 : case GE_EXPR:
10619 0 : {
10620 0 : tree _q70 = TREE_OPERAND (_p1, 0);
10621 0 : tree _q71 = TREE_OPERAND (_p1, 1);
10622 0 : if ((_q70 == _q40 && ! TREE_SIDE_EFFECTS (_q70)) || (operand_equal_p (_q70, _q40, 0) && types_match (_q70, _q40)))
10623 : {
10624 0 : switch (TREE_CODE (_q71))
10625 : {
10626 0 : case POINTER_PLUS_EXPR:
10627 0 : {
10628 0 : tree _q90 = TREE_OPERAND (_q71, 0);
10629 0 : tree _q91 = TREE_OPERAND (_q71, 1);
10630 0 : if ((_q90 == _q20 && ! TREE_SIDE_EFFECTS (_q90)) || (operand_equal_p (_q90, _q20, 0) && types_match (_q90, _q20)))
10631 : {
10632 0 : if ((_q91 == _q41 && ! TREE_SIDE_EFFECTS (_q91)) || (operand_equal_p (_q91, _q41, 0) && types_match (_q91, _q41)))
10633 : {
10634 0 : {
10635 0 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q21, _q40, _q41, _q20, _p1, _q71 };
10636 0 : const enum tree_code cmp = LE_EXPR;
10637 0 : if (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[2]))
10638 0 : && TYPE_OVERFLOW_WRAPS (sizetype)
10639 0 : && TYPE_PRECISION (TREE_TYPE (captures[2])) == TYPE_PRECISION (sizetype)
10640 : )
10641 : {
10642 0 : {
10643 0 : offset_int off = wi::to_offset (captures[3]) - (cmp == LE_EXPR ? 1 : 0);
10644 0 : offset_int rhs = off * 2;
10645 0 : if (wi::min_precision (rhs, UNSIGNED) <= TYPE_PRECISION (sizetype)
10646 : )
10647 : {
10648 0 : {
10649 0 : bool swap_p = tree_swap_operands_p (captures[2], captures[4]);
10650 0 : tree rhs_tree = wide_int_to_tree (sizetype, rhs);
10651 0 : if (cmp == LT_EXPR
10652 : )
10653 : {
10654 : if (TREE_SIDE_EFFECTS (captures[1])) goto next_after_fail1760;
10655 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail1760;
10656 : if (TREE_SIDE_EFFECTS (captures[3])) goto next_after_fail1760;
10657 : if (TREE_SIDE_EFFECTS (captures[4])) goto next_after_fail1760;
10658 : if (TREE_SIDE_EFFECTS (captures[6])) goto next_after_fail1760;
10659 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1760;
10660 : {
10661 : tree res_op0;
10662 : {
10663 : tree _o1[1], _r1;
10664 : {
10665 : tree _o2[2], _r2;
10666 : _o2[0] = swap_p ? captures[6] : captures[1];
10667 : _o2[1] = swap_p ? captures[2] : captures[4];
10668 : _r2 = fold_build2_loc (loc, POINTER_DIFF_EXPR, ssizetype, _o2[0], _o2[1]);
10669 : _o1[0] = _r2;
10670 : }
10671 : if (TREE_TYPE (_o1[0]) != sizetype)
10672 : {
10673 : _r1 = fold_build1_loc (loc, NOP_EXPR, sizetype, _o1[0]);
10674 : }
10675 : else
10676 : _r1 = _o1[0];
10677 : res_op0 = _r1;
10678 : }
10679 : tree res_op1;
10680 : res_op1 = rhs_tree;
10681 : tree _r;
10682 : _r = fold_build2_loc (loc, GT_EXPR, type, res_op0, res_op1);
10683 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 950, __FILE__, __LINE__, true);
10684 0 : return _r;
10685 : }
10686 : next_after_fail1760:;
10687 : }
10688 : else
10689 : {
10690 0 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail1761;
10691 0 : if (TREE_SIDE_EFFECTS (captures[3])) goto next_after_fail1761;
10692 0 : if (TREE_SIDE_EFFECTS (captures[4])) goto next_after_fail1761;
10693 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1761;
10694 0 : {
10695 0 : tree res_op0;
10696 0 : {
10697 0 : tree _o1[1], _r1;
10698 0 : {
10699 0 : tree _o2[2], _r2;
10700 0 : {
10701 0 : tree _o3[2], _r3;
10702 0 : _o3[0] = swap_p ? captures[4] : captures[2];
10703 0 : _o3[1] = wide_int_to_tree (sizetype, off);
10704 0 : _r3 = fold_build2_loc (loc, POINTER_PLUS_EXPR, TREE_TYPE (_o3[0]), _o3[0], _o3[1]);
10705 0 : _o2[0] = _r3;
10706 : }
10707 0 : _o2[1] = swap_p ? captures[2] : captures[4];
10708 0 : _r2 = fold_build2_loc (loc, POINTER_DIFF_EXPR, ssizetype, _o2[0], _o2[1]);
10709 0 : _o1[0] = _r2;
10710 : }
10711 0 : if (TREE_TYPE (_o1[0]) != sizetype)
10712 : {
10713 0 : _r1 = fold_build1_loc (loc, NOP_EXPR, sizetype, _o1[0]);
10714 : }
10715 : else
10716 : _r1 = _o1[0];
10717 0 : res_op0 = _r1;
10718 : }
10719 0 : tree res_op1;
10720 0 : res_op1 = rhs_tree;
10721 0 : tree _r;
10722 0 : _r = fold_build2_loc (loc, GT_EXPR, type, res_op0, res_op1);
10723 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 951, __FILE__, __LINE__, true);
10724 0 : return _r;
10725 : }
10726 0 : next_after_fail1761:;
10727 : }
10728 : }
10729 : }
10730 : }
10731 : }
10732 : }
10733 : }
10734 : }
10735 : break;
10736 : }
10737 : default:;
10738 : }
10739 : }
10740 : break;
10741 : }
10742 : default:;
10743 : }
10744 : break;
10745 : }
10746 : default:;
10747 : }
10748 : break;
10749 : }
10750 : default:;
10751 : }
10752 : break;
10753 : }
10754 1187283 : case GT_EXPR:
10755 1187283 : {
10756 1187283 : tree _q20 = TREE_OPERAND (_p0, 0);
10757 1187283 : tree _q21 = TREE_OPERAND (_p0, 1);
10758 1187283 : switch (TREE_CODE (_q21))
10759 : {
10760 46 : case POINTER_PLUS_EXPR:
10761 46 : {
10762 46 : tree _q40 = TREE_OPERAND (_q21, 0);
10763 46 : tree _q41 = TREE_OPERAND (_q21, 1);
10764 46 : switch (TREE_CODE (_q41))
10765 : {
10766 46 : case INTEGER_CST:
10767 46 : {
10768 46 : switch (TREE_CODE (_p1))
10769 : {
10770 0 : case LT_EXPR:
10771 0 : {
10772 0 : tree _q70 = TREE_OPERAND (_p1, 0);
10773 0 : tree _q71 = TREE_OPERAND (_p1, 1);
10774 0 : switch (TREE_CODE (_q70))
10775 : {
10776 0 : case POINTER_PLUS_EXPR:
10777 0 : {
10778 0 : tree _q80 = TREE_OPERAND (_q70, 0);
10779 0 : tree _q81 = TREE_OPERAND (_q70, 1);
10780 0 : if ((_q80 == _q20 && ! TREE_SIDE_EFFECTS (_q80)) || (operand_equal_p (_q80, _q20, 0) && types_match (_q80, _q20)))
10781 : {
10782 0 : if ((_q81 == _q41 && ! TREE_SIDE_EFFECTS (_q81)) || (operand_equal_p (_q81, _q41, 0) && types_match (_q81, _q41)))
10783 : {
10784 0 : if ((_q71 == _q40 && ! TREE_SIDE_EFFECTS (_q71)) || (operand_equal_p (_q71, _q40, 0) && types_match (_q71, _q40)))
10785 : {
10786 0 : {
10787 0 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q21, _q40, _q41, _q20, _p1, _q70 };
10788 0 : const enum tree_code cmp = LT_EXPR;
10789 0 : if (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[2]))
10790 0 : && TYPE_OVERFLOW_WRAPS (sizetype)
10791 0 : && TYPE_PRECISION (TREE_TYPE (captures[2])) == TYPE_PRECISION (sizetype)
10792 : )
10793 : {
10794 0 : {
10795 0 : offset_int off = wi::to_offset (captures[3]) - (cmp == LE_EXPR ? 1 : 0);
10796 0 : offset_int rhs = off * 2;
10797 0 : if (wi::min_precision (rhs, UNSIGNED) <= TYPE_PRECISION (sizetype)
10798 : )
10799 : {
10800 0 : {
10801 0 : bool swap_p = tree_swap_operands_p (captures[2], captures[4]);
10802 0 : tree rhs_tree = wide_int_to_tree (sizetype, rhs);
10803 0 : if (cmp == LT_EXPR
10804 : )
10805 : {
10806 0 : if (TREE_SIDE_EFFECTS (captures[1])) goto next_after_fail1762;
10807 0 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail1762;
10808 0 : if (TREE_SIDE_EFFECTS (captures[3])) goto next_after_fail1762;
10809 0 : if (TREE_SIDE_EFFECTS (captures[4])) goto next_after_fail1762;
10810 0 : if (TREE_SIDE_EFFECTS (captures[6])) goto next_after_fail1762;
10811 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1762;
10812 0 : {
10813 0 : tree res_op0;
10814 0 : {
10815 0 : tree _o1[1], _r1;
10816 0 : {
10817 0 : tree _o2[2], _r2;
10818 0 : _o2[0] = swap_p ? captures[6] : captures[1];
10819 0 : _o2[1] = swap_p ? captures[2] : captures[4];
10820 0 : _r2 = fold_build2_loc (loc, POINTER_DIFF_EXPR, ssizetype, _o2[0], _o2[1]);
10821 0 : _o1[0] = _r2;
10822 : }
10823 0 : if (TREE_TYPE (_o1[0]) != sizetype)
10824 : {
10825 0 : _r1 = fold_build1_loc (loc, NOP_EXPR, sizetype, _o1[0]);
10826 : }
10827 : else
10828 : _r1 = _o1[0];
10829 0 : res_op0 = _r1;
10830 : }
10831 0 : tree res_op1;
10832 0 : res_op1 = rhs_tree;
10833 0 : tree _r;
10834 0 : _r = fold_build2_loc (loc, GT_EXPR, type, res_op0, res_op1);
10835 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 950, __FILE__, __LINE__, true);
10836 0 : return _r;
10837 : }
10838 0 : next_after_fail1762:;
10839 : }
10840 : else
10841 : {
10842 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail1763;
10843 : if (TREE_SIDE_EFFECTS (captures[3])) goto next_after_fail1763;
10844 : if (TREE_SIDE_EFFECTS (captures[4])) goto next_after_fail1763;
10845 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1763;
10846 : {
10847 : tree res_op0;
10848 : {
10849 : tree _o1[1], _r1;
10850 : {
10851 : tree _o2[2], _r2;
10852 : {
10853 : tree _o3[2], _r3;
10854 : _o3[0] = swap_p ? captures[4] : captures[2];
10855 : _o3[1] = wide_int_to_tree (sizetype, off);
10856 : _r3 = fold_build2_loc (loc, POINTER_PLUS_EXPR, TREE_TYPE (_o3[0]), _o3[0], _o3[1]);
10857 : _o2[0] = _r3;
10858 : }
10859 : _o2[1] = swap_p ? captures[2] : captures[4];
10860 : _r2 = fold_build2_loc (loc, POINTER_DIFF_EXPR, ssizetype, _o2[0], _o2[1]);
10861 : _o1[0] = _r2;
10862 : }
10863 : if (TREE_TYPE (_o1[0]) != sizetype)
10864 : {
10865 : _r1 = fold_build1_loc (loc, NOP_EXPR, sizetype, _o1[0]);
10866 : }
10867 : else
10868 : _r1 = _o1[0];
10869 : res_op0 = _r1;
10870 : }
10871 : tree res_op1;
10872 : res_op1 = rhs_tree;
10873 : tree _r;
10874 : _r = fold_build2_loc (loc, GT_EXPR, type, res_op0, res_op1);
10875 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 951, __FILE__, __LINE__, true);
10876 : return _r;
10877 : }
10878 : next_after_fail1763:;
10879 : }
10880 : }
10881 : }
10882 : }
10883 : }
10884 : }
10885 : }
10886 : }
10887 : }
10888 : break;
10889 : }
10890 : default:;
10891 : }
10892 : break;
10893 : }
10894 18 : case GT_EXPR:
10895 18 : {
10896 18 : tree _q70 = TREE_OPERAND (_p1, 0);
10897 18 : tree _q71 = TREE_OPERAND (_p1, 1);
10898 18 : if ((_q70 == _q40 && ! TREE_SIDE_EFFECTS (_q70)) || (operand_equal_p (_q70, _q40, 0) && types_match (_q70, _q40)))
10899 : {
10900 0 : switch (TREE_CODE (_q71))
10901 : {
10902 0 : case POINTER_PLUS_EXPR:
10903 0 : {
10904 0 : tree _q90 = TREE_OPERAND (_q71, 0);
10905 0 : tree _q91 = TREE_OPERAND (_q71, 1);
10906 0 : if ((_q90 == _q20 && ! TREE_SIDE_EFFECTS (_q90)) || (operand_equal_p (_q90, _q20, 0) && types_match (_q90, _q20)))
10907 : {
10908 0 : if ((_q91 == _q41 && ! TREE_SIDE_EFFECTS (_q91)) || (operand_equal_p (_q91, _q41, 0) && types_match (_q91, _q41)))
10909 : {
10910 0 : {
10911 0 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q21, _q40, _q41, _q20, _p1, _q71 };
10912 0 : const enum tree_code cmp = LT_EXPR;
10913 0 : if (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[2]))
10914 0 : && TYPE_OVERFLOW_WRAPS (sizetype)
10915 0 : && TYPE_PRECISION (TREE_TYPE (captures[2])) == TYPE_PRECISION (sizetype)
10916 : )
10917 : {
10918 0 : {
10919 0 : offset_int off = wi::to_offset (captures[3]) - (cmp == LE_EXPR ? 1 : 0);
10920 0 : offset_int rhs = off * 2;
10921 0 : if (wi::min_precision (rhs, UNSIGNED) <= TYPE_PRECISION (sizetype)
10922 : )
10923 : {
10924 0 : {
10925 0 : bool swap_p = tree_swap_operands_p (captures[2], captures[4]);
10926 0 : tree rhs_tree = wide_int_to_tree (sizetype, rhs);
10927 0 : if (cmp == LT_EXPR
10928 : )
10929 : {
10930 0 : if (TREE_SIDE_EFFECTS (captures[1])) goto next_after_fail1764;
10931 0 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail1764;
10932 0 : if (TREE_SIDE_EFFECTS (captures[3])) goto next_after_fail1764;
10933 0 : if (TREE_SIDE_EFFECTS (captures[4])) goto next_after_fail1764;
10934 0 : if (TREE_SIDE_EFFECTS (captures[6])) goto next_after_fail1764;
10935 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1764;
10936 0 : {
10937 0 : tree res_op0;
10938 0 : {
10939 0 : tree _o1[1], _r1;
10940 0 : {
10941 0 : tree _o2[2], _r2;
10942 0 : _o2[0] = swap_p ? captures[6] : captures[1];
10943 0 : _o2[1] = swap_p ? captures[2] : captures[4];
10944 0 : _r2 = fold_build2_loc (loc, POINTER_DIFF_EXPR, ssizetype, _o2[0], _o2[1]);
10945 0 : _o1[0] = _r2;
10946 : }
10947 0 : if (TREE_TYPE (_o1[0]) != sizetype)
10948 : {
10949 0 : _r1 = fold_build1_loc (loc, NOP_EXPR, sizetype, _o1[0]);
10950 : }
10951 : else
10952 : _r1 = _o1[0];
10953 0 : res_op0 = _r1;
10954 : }
10955 0 : tree res_op1;
10956 0 : res_op1 = rhs_tree;
10957 0 : tree _r;
10958 0 : _r = fold_build2_loc (loc, GT_EXPR, type, res_op0, res_op1);
10959 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 950, __FILE__, __LINE__, true);
10960 0 : return _r;
10961 : }
10962 0 : next_after_fail1764:;
10963 : }
10964 : else
10965 : {
10966 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail1765;
10967 : if (TREE_SIDE_EFFECTS (captures[3])) goto next_after_fail1765;
10968 : if (TREE_SIDE_EFFECTS (captures[4])) goto next_after_fail1765;
10969 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1765;
10970 : {
10971 : tree res_op0;
10972 : {
10973 : tree _o1[1], _r1;
10974 : {
10975 : tree _o2[2], _r2;
10976 : {
10977 : tree _o3[2], _r3;
10978 : _o3[0] = swap_p ? captures[4] : captures[2];
10979 : _o3[1] = wide_int_to_tree (sizetype, off);
10980 : _r3 = fold_build2_loc (loc, POINTER_PLUS_EXPR, TREE_TYPE (_o3[0]), _o3[0], _o3[1]);
10981 : _o2[0] = _r3;
10982 : }
10983 : _o2[1] = swap_p ? captures[2] : captures[4];
10984 : _r2 = fold_build2_loc (loc, POINTER_DIFF_EXPR, ssizetype, _o2[0], _o2[1]);
10985 : _o1[0] = _r2;
10986 : }
10987 : if (TREE_TYPE (_o1[0]) != sizetype)
10988 : {
10989 : _r1 = fold_build1_loc (loc, NOP_EXPR, sizetype, _o1[0]);
10990 : }
10991 : else
10992 : _r1 = _o1[0];
10993 : res_op0 = _r1;
10994 : }
10995 : tree res_op1;
10996 : res_op1 = rhs_tree;
10997 : tree _r;
10998 : _r = fold_build2_loc (loc, GT_EXPR, type, res_op0, res_op1);
10999 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 951, __FILE__, __LINE__, true);
11000 : return _r;
11001 : }
11002 : next_after_fail1765:;
11003 : }
11004 : }
11005 : }
11006 : }
11007 : }
11008 : }
11009 : }
11010 : }
11011 : break;
11012 : }
11013 : default:;
11014 : }
11015 : }
11016 : break;
11017 : }
11018 : default:;
11019 : }
11020 : break;
11021 : }
11022 : default:;
11023 : }
11024 : break;
11025 : }
11026 : default:;
11027 : }
11028 : break;
11029 : }
11030 : default:;
11031 : }
11032 : return NULL_TREE;
11033 : }
11034 :
11035 : tree
11036 833421 : generic_simplify_VEC_PERM_EXPR (location_t ARG_UNUSED (loc), enum tree_code ARG_UNUSED (code), const tree ARG_UNUSED (type), tree _p0, tree _p1, tree _p2)
11037 : {
11038 833421 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
11039 833421 : switch (TREE_CODE (_p0))
11040 : {
11041 0 : case PLUS_EXPR:
11042 0 : {
11043 0 : tree _q20 = TREE_OPERAND (_p0, 0);
11044 0 : tree _q21 = TREE_OPERAND (_p0, 1);
11045 0 : switch (TREE_CODE (_p1))
11046 : {
11047 0 : case MINUS_EXPR:
11048 0 : {
11049 0 : tree _q50 = TREE_OPERAND (_p1, 0);
11050 0 : tree _q51 = TREE_OPERAND (_p1, 1);
11051 0 : switch (TREE_CODE (_p2))
11052 : {
11053 0 : case VECTOR_CST:
11054 0 : {
11055 0 : {
11056 0 : tree captures[5] ATTRIBUTE_UNUSED = { _q20, _q21, _q50, _q51, _p2 };
11057 0 : tree res = generic_simplify_629 (loc, type, _p0, _p1, _p2, captures, PLUS_EXPR, MINUS_EXPR);
11058 0 : if (res) return res;
11059 : }
11060 0 : break;
11061 : }
11062 : default:;
11063 : }
11064 : break;
11065 : }
11066 : default:;
11067 : }
11068 : break;
11069 : }
11070 0 : case MINUS_EXPR:
11071 0 : {
11072 0 : tree _q20 = TREE_OPERAND (_p0, 0);
11073 0 : tree _q21 = TREE_OPERAND (_p0, 1);
11074 0 : switch (TREE_CODE (_p1))
11075 : {
11076 0 : case PLUS_EXPR:
11077 0 : {
11078 0 : tree _q50 = TREE_OPERAND (_p1, 0);
11079 0 : tree _q51 = TREE_OPERAND (_p1, 1);
11080 0 : switch (TREE_CODE (_p2))
11081 : {
11082 0 : case VECTOR_CST:
11083 0 : {
11084 0 : {
11085 0 : tree captures[5] ATTRIBUTE_UNUSED = { _q20, _q21, _q50, _q51, _p2 };
11086 0 : tree res = generic_simplify_629 (loc, type, _p0, _p1, _p2, captures, MINUS_EXPR, PLUS_EXPR);
11087 0 : if (res) return res;
11088 : }
11089 0 : break;
11090 : }
11091 : default:;
11092 : }
11093 : break;
11094 : }
11095 : default:;
11096 : }
11097 : break;
11098 : }
11099 833421 : default:;
11100 : }
11101 833421 : switch (TREE_CODE (_p2))
11102 : {
11103 821947 : case VECTOR_CST:
11104 821947 : {
11105 821947 : {
11106 821947 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p1, _p2 };
11107 821947 : {
11108 821947 : tree op0 = captures[0], op1 = captures[1], op2 = captures[2];
11109 821947 : machine_mode result_mode = TYPE_MODE (type);
11110 821947 : machine_mode op_mode = TYPE_MODE (TREE_TYPE (op0));
11111 821947 : vec_perm_builder builder;
11112 821947 : if (tree_to_vec_perm_builder (&builder, op2)
11113 : )
11114 : {
11115 821935 : {
11116 821935 : poly_uint64 nelts = TYPE_VECTOR_SUBPARTS (type);
11117 821935 : poly_uint64 nelts_in = TYPE_VECTOR_SUBPARTS (TREE_TYPE (op0));
11118 821935 : bool single_arg = (op0 == op1);
11119 1435374 : vec_perm_indices sel (builder, single_arg ? 1 : 2, nelts_in);
11120 821935 : if (known_eq (nelts, nelts_in) && sel.series_p (0, 1, 0, 1)
11121 : )
11122 : {
11123 21766 : if (TREE_SIDE_EFFECTS (captures[0])) goto next_after_fail1996;
11124 21766 : if (TREE_SIDE_EFFECTS (captures[1])) goto next_after_fail1996;
11125 21766 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail1996;
11126 21766 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1996;
11127 21766 : {
11128 21766 : tree res_op0;
11129 21766 : res_op0 = captures[0];
11130 21766 : tree _r;
11131 21766 : _r = fold_build1_loc (loc, VIEW_CONVERT_EXPR, type, res_op0);
11132 21766 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 1108, __FILE__, __LINE__, true);
11133 21766 : return _r;
11134 : }
11135 768694 : next_after_fail1996:;
11136 : }
11137 : else
11138 : {
11139 800169 : if (known_eq (nelts, nelts_in) && sel.series_p (0, 1, nelts_in, 1)
11140 : )
11141 : {
11142 13 : if (TREE_SIDE_EFFECTS (captures[0])) goto next_after_fail1997;
11143 13 : if (TREE_SIDE_EFFECTS (captures[1])) goto next_after_fail1997;
11144 13 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail1997;
11145 13 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1997;
11146 13 : {
11147 13 : tree res_op0;
11148 13 : res_op0 = captures[1];
11149 13 : tree _r;
11150 13 : _r = fold_build1_loc (loc, VIEW_CONVERT_EXPR, type, res_op0);
11151 13 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 1109, __FILE__, __LINE__, true);
11152 13 : return _r;
11153 : }
11154 768694 : next_after_fail1997:;
11155 : }
11156 : else
11157 : {
11158 800156 : {
11159 800156 : if (!single_arg)
11160 : {
11161 592336 : if (sel.all_from_input_p (0))
11162 : op1 = op0;
11163 572128 : else if (sel.all_from_input_p (1))
11164 : {
11165 33 : op0 = op1;
11166 33 : sel.rotate_inputs (1);
11167 : }
11168 572095 : else if (known_ge (poly_uint64 (sel[0]), nelts_in))
11169 : {
11170 169 : std::swap (op0, op1);
11171 169 : sel.rotate_inputs (1);
11172 : }
11173 : }
11174 800156 : gassign *def;
11175 800156 : tree cop0 = op0, cop1 = op1;
11176 800156 : if (TREE_CODE (op0) == SSA_NAME
11177 752095 : && (def = dyn_cast <gassign *> (SSA_NAME_DEF_STMT (op0)))
11178 1516332 : && gimple_assign_rhs_code (def) == CONSTRUCTOR)
11179 14235 : cop0 = gimple_assign_rhs1 (def);
11180 800156 : if (TREE_CODE (op1) == SSA_NAME
11181 731189 : && (def = dyn_cast <gassign *> (SSA_NAME_DEF_STMT (op1)))
11182 1497345 : && gimple_assign_rhs_code (def) == CONSTRUCTOR)
11183 21146 : cop1 = gimple_assign_rhs1 (def);
11184 800156 : tree t;
11185 800156 : if ((TREE_CODE (cop0) == VECTOR_CST
11186 756639 : || TREE_CODE (cop0) == CONSTRUCTOR)
11187 59584 : && (TREE_CODE (cop1) == VECTOR_CST
11188 25892 : || TREE_CODE (cop1) == CONSTRUCTOR)
11189 846921 : && (t = fold_vec_perm (type, cop0, cop1, sel))
11190 : )
11191 : {
11192 28997 : if (TREE_SIDE_EFFECTS (captures[0])) goto next_after_fail1998;
11193 28997 : if (TREE_SIDE_EFFECTS (captures[1])) goto next_after_fail1998;
11194 28997 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail1998;
11195 28997 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1998;
11196 28997 : {
11197 28997 : tree _r;
11198 28997 : _r = t;
11199 28997 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 1110, __FILE__, __LINE__, true);
11200 28997 : return _r;
11201 : }
11202 768694 : next_after_fail1998:;
11203 : }
11204 : else
11205 : {
11206 771159 : {
11207 771159 : bool changed = (op0 == op1 && !single_arg);
11208 771159 : tree ins = NULL_TREE;
11209 771159 : unsigned at = 0;
11210 771159 : if (op_mode != BLKmode
11211 758918 : && known_eq (nelts, nelts_in)
11212 1529924 : && (TREE_CODE (cop0) == VECTOR_CST
11213 743276 : || TREE_CODE (cop0) == CONSTRUCTOR
11214 733590 : || TREE_CODE (cop1) == VECTOR_CST
11215 702649 : || TREE_CODE (cop1) == CONSTRUCTOR))
11216 : {
11217 65219 : bool insert_first_p = sel.series_p (1, 1, nelts + 1, 1);
11218 65219 : if (insert_first_p)
11219 : {
11220 777 : at = 0;
11221 777 : if ((ins = fold_read_from_vector (cop0, sel[0])))
11222 115 : op0 = op1;
11223 : }
11224 777 : if (!insert_first_p || (!ins && maybe_eq (nelts, 2u)))
11225 : {
11226 64904 : unsigned int encoded_nelts = sel.encoding ().encoded_nelts ();
11227 140685 : for (at = 0; at < encoded_nelts; ++at)
11228 140538 : if (maybe_ne (sel[at], at))
11229 : break;
11230 64904 : if (at < encoded_nelts
11231 64904 : && (known_eq (at + 1, nelts)
11232 63407 : || sel.series_p (at + 1, 1, at + 1, 1)))
11233 : {
11234 2078 : if (known_lt (poly_uint64 (sel[at]), nelts))
11235 0 : ins = fold_read_from_vector (cop0, sel[at]);
11236 : else
11237 2078 : ins = fold_read_from_vector (cop1, sel[at] - nelts);
11238 : }
11239 : }
11240 : }
11241 771159 : if (!ins && sel.encoding () != builder)
11242 : {
11243 1048 : tree oldop2 = op2;
11244 1048 : if (sel.ninputs () == 2
11245 1048 : || can_vec_perm_const_p (result_mode, op_mode, sel, false))
11246 713 : op2 = vec_perm_indices_to_tree (TREE_TYPE (op2), sel);
11247 : else
11248 : {
11249 335 : vec_perm_indices sel2 (builder, 2, nelts);
11250 335 : if (can_vec_perm_const_p (result_mode, op_mode, sel2, false))
11251 60 : op2 = vec_perm_indices_to_tree (TREE_TYPE (op2), sel2);
11252 : else
11253 275 : op2 = vec_perm_indices_to_tree (TREE_TYPE (op2), sel);
11254 335 : }
11255 1048 : if (!operand_equal_p (op2, oldop2, 0))
11256 988 : changed = true;
11257 : }
11258 771159 : if (ins
11259 : )
11260 : {
11261 1476 : if (TREE_SIDE_EFFECTS (captures[0])) goto next_after_fail1999;
11262 1476 : if (TREE_SIDE_EFFECTS (captures[1])) goto next_after_fail1999;
11263 1476 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail1999;
11264 1476 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1999;
11265 1476 : {
11266 1476 : tree res_op0;
11267 1476 : res_op0 = op0;
11268 1476 : tree res_op1;
11269 1476 : res_op1 = ins;
11270 1476 : tree res_op2;
11271 1476 : res_op2 = bitsize_int (at * vector_element_bits (type));
11272 1476 : tree _r;
11273 1476 : _r = fold_build3_loc (loc, BIT_INSERT_EXPR, type, res_op0, res_op1, res_op2);
11274 1476 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 1111, __FILE__, __LINE__, true);
11275 53241 : return _r;
11276 : }
11277 : next_after_fail1999:;
11278 : }
11279 : else
11280 : {
11281 769683 : if (changed
11282 : )
11283 : {
11284 989 : if (TREE_SIDE_EFFECTS (captures[0])) goto next_after_fail2000;
11285 989 : if (TREE_SIDE_EFFECTS (captures[1])) goto next_after_fail2000;
11286 989 : if (TREE_SIDE_EFFECTS (captures[2])) goto next_after_fail2000;
11287 989 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2000;
11288 989 : {
11289 989 : tree res_op0;
11290 989 : res_op0 = op0;
11291 989 : tree res_op1;
11292 989 : res_op1 = op1;
11293 989 : tree res_op2;
11294 989 : res_op2 = op2;
11295 989 : tree _r;
11296 989 : _r = fold_build3_loc (loc, VEC_PERM_EXPR, type, res_op0, res_op1, res_op2);
11297 989 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 1112, __FILE__, __LINE__, true);
11298 989 : return _r;
11299 : }
11300 : next_after_fail2000:;
11301 : }
11302 : }
11303 : }
11304 : }
11305 : }
11306 : }
11307 : }
11308 821935 : }
11309 : }
11310 53241 : }
11311 : }
11312 768706 : break;
11313 : }
11314 780180 : default:;
11315 : }
11316 780180 : switch (TREE_CODE (_p0))
11317 : {
11318 0 : case VIEW_CONVERT_EXPR:
11319 0 : {
11320 0 : tree _q20 = TREE_OPERAND (_p0, 0);
11321 0 : switch (TREE_CODE (_q20))
11322 : {
11323 0 : case VEC_PERM_EXPR:
11324 0 : {
11325 0 : tree _q30 = TREE_OPERAND (_q20, 0);
11326 0 : tree _q31 = TREE_OPERAND (_q20, 1);
11327 0 : tree _q32 = TREE_OPERAND (_q20, 2);
11328 0 : switch (TREE_CODE (_q32))
11329 : {
11330 0 : case VECTOR_CST:
11331 0 : {
11332 0 : if ((_p1 == _p0 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _p0, 0) && types_match (_p1, _p0)))
11333 : {
11334 0 : switch (TREE_CODE (_p2))
11335 : {
11336 0 : case VECTOR_CST:
11337 0 : {
11338 0 : {
11339 0 : tree captures[6] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q31, _q32, _p2 };
11340 0 : if (TYPE_VECTOR_SUBPARTS (type).is_constant ()
11341 : )
11342 : {
11343 0 : {
11344 0 : machine_mode result_mode = TYPE_MODE (type);
11345 0 : machine_mode op_mode = TYPE_MODE (TREE_TYPE (captures[2]));
11346 0 : int nelts = TYPE_VECTOR_SUBPARTS (type).to_constant ();
11347 0 : vec_perm_indices sel0, sel1;
11348 0 : if (tree_to_vec_perm_indices (&sel0, captures[2], captures[3], captures[4])
11349 0 : && tree_to_vec_perm_indices (&sel1, captures[0], captures[0], captures[5])
11350 0 : && TYPE_SIZE (TREE_TYPE (TREE_TYPE (captures[0])))
11351 0 : == TYPE_SIZE (TREE_TYPE (TREE_TYPE (captures[1])))
11352 : )
11353 : {
11354 0 : {
11355 0 : vec_perm_builder builder2 (nelts, nelts, 1);
11356 0 : for (int i = 0; i < nelts; i++)
11357 0 : builder2.quick_push (sel0[sel1[i].to_constant ()]);
11358 0 : vec_perm_indices sel2 (builder2, 2, nelts);
11359 0 : tree op0 = NULL_TREE;
11360 0 : if (can_vec_perm_const_p (result_mode, op_mode, sel2, false)
11361 0 : || (single_use (captures[0])
11362 0 : ? (!can_vec_perm_const_p (result_mode, op_mode, sel0, true)
11363 0 : || !can_vec_perm_const_p (result_mode, op_mode, sel1, true))
11364 : : !can_vec_perm_const_p (result_mode, op_mode, sel1, true)))
11365 0 : op0 = vec_perm_indices_to_tree (TREE_TYPE (captures[5]), sel2);
11366 0 : if (op0
11367 : )
11368 : {
11369 0 : if (TREE_SIDE_EFFECTS (captures[0])) goto next_after_fail2001;
11370 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2001;
11371 0 : {
11372 0 : tree res_op0;
11373 0 : {
11374 0 : tree _o1[3], _r1;
11375 0 : _o1[0] = captures[2];
11376 0 : _o1[1] = captures[3];
11377 0 : _o1[2] = op0;
11378 0 : _r1 = fold_build3_loc (loc, VEC_PERM_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1], _o1[2]);
11379 0 : res_op0 = _r1;
11380 : }
11381 0 : tree _r;
11382 0 : _r = fold_build1_loc (loc, VIEW_CONVERT_EXPR, type, res_op0);
11383 0 : if (TREE_SIDE_EFFECTS (captures[4]))
11384 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[4]), _r);
11385 0 : if (TREE_SIDE_EFFECTS (captures[5]))
11386 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[5]), _r);
11387 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 1113, __FILE__, __LINE__, true);
11388 0 : return _r;
11389 : }
11390 0 : next_after_fail2001:;
11391 : }
11392 0 : }
11393 : }
11394 0 : }
11395 : }
11396 : }
11397 0 : break;
11398 : }
11399 : default:;
11400 : }
11401 : }
11402 : break;
11403 : }
11404 : default:;
11405 : }
11406 : break;
11407 : }
11408 : default:;
11409 : }
11410 : break;
11411 : }
11412 0 : case VEC_PERM_EXPR:
11413 0 : {
11414 0 : tree _q20 = TREE_OPERAND (_p0, 0);
11415 0 : tree _q21 = TREE_OPERAND (_p0, 1);
11416 0 : tree _q22 = TREE_OPERAND (_p0, 2);
11417 0 : switch (TREE_CODE (_q22))
11418 : {
11419 0 : case VECTOR_CST:
11420 0 : {
11421 0 : if ((_p1 == _p0 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _p0, 0) && types_match (_p1, _p0)))
11422 : {
11423 0 : switch (TREE_CODE (_p2))
11424 : {
11425 0 : case VECTOR_CST:
11426 0 : {
11427 0 : {
11428 0 : tree captures[6] ATTRIBUTE_UNUSED = { _p0, _p0, _q20, _q21, _q22, _p2 };
11429 0 : if (TYPE_VECTOR_SUBPARTS (type).is_constant ()
11430 : )
11431 : {
11432 0 : {
11433 0 : machine_mode result_mode = TYPE_MODE (type);
11434 0 : machine_mode op_mode = TYPE_MODE (TREE_TYPE (captures[2]));
11435 0 : int nelts = TYPE_VECTOR_SUBPARTS (type).to_constant ();
11436 0 : vec_perm_indices sel0, sel1;
11437 0 : if (tree_to_vec_perm_indices (&sel0, captures[2], captures[3], captures[4])
11438 0 : && tree_to_vec_perm_indices (&sel1, captures[0], captures[0], captures[5])
11439 0 : && TYPE_SIZE (TREE_TYPE (TREE_TYPE (captures[0])))
11440 0 : == TYPE_SIZE (TREE_TYPE (TREE_TYPE (captures[1])))
11441 : )
11442 : {
11443 0 : {
11444 0 : vec_perm_builder builder2 (nelts, nelts, 1);
11445 0 : for (int i = 0; i < nelts; i++)
11446 0 : builder2.quick_push (sel0[sel1[i].to_constant ()]);
11447 0 : vec_perm_indices sel2 (builder2, 2, nelts);
11448 0 : tree op0 = NULL_TREE;
11449 0 : if (can_vec_perm_const_p (result_mode, op_mode, sel2, false)
11450 0 : || (single_use (captures[0])
11451 0 : ? (!can_vec_perm_const_p (result_mode, op_mode, sel0, true)
11452 0 : || !can_vec_perm_const_p (result_mode, op_mode, sel1, true))
11453 : : !can_vec_perm_const_p (result_mode, op_mode, sel1, true)))
11454 0 : op0 = vec_perm_indices_to_tree (TREE_TYPE (captures[5]), sel2);
11455 0 : if (op0
11456 : )
11457 : {
11458 0 : if (TREE_SIDE_EFFECTS (captures[0])) goto next_after_fail2002;
11459 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2002;
11460 0 : {
11461 0 : tree res_op0;
11462 0 : {
11463 0 : tree _o1[3], _r1;
11464 0 : _o1[0] = captures[2];
11465 0 : _o1[1] = captures[3];
11466 0 : _o1[2] = op0;
11467 0 : _r1 = fold_build3_loc (loc, VEC_PERM_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1], _o1[2]);
11468 0 : res_op0 = _r1;
11469 : }
11470 0 : tree _r;
11471 0 : _r = fold_build1_loc (loc, VIEW_CONVERT_EXPR, type, res_op0);
11472 0 : if (TREE_SIDE_EFFECTS (captures[4]))
11473 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[4]), _r);
11474 0 : if (TREE_SIDE_EFFECTS (captures[5]))
11475 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[5]), _r);
11476 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 1113, __FILE__, __LINE__, true);
11477 0 : return _r;
11478 : }
11479 0 : next_after_fail2002:;
11480 : }
11481 0 : }
11482 : }
11483 0 : }
11484 : }
11485 : }
11486 0 : break;
11487 : }
11488 : default:;
11489 : }
11490 : }
11491 : break;
11492 : }
11493 : default:;
11494 : }
11495 : break;
11496 : }
11497 780180 : default:;
11498 : }
11499 780180 : if (tree_vec_same_elem_p (_p0))
11500 : {
11501 13981 : if ((_p1 == _p0 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _p0, 0) && types_match (_p1, _p0)))
11502 : {
11503 0 : {
11504 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p2 };
11505 0 : if (types_match (type, TREE_TYPE (captures[0]))
11506 : )
11507 : {
11508 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2003;
11509 0 : {
11510 0 : tree _r;
11511 0 : _r = captures[0];
11512 0 : if (TREE_SIDE_EFFECTS (captures[1]))
11513 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
11514 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 1114, __FILE__, __LINE__, true);
11515 0 : return _r;
11516 : }
11517 0 : next_after_fail2003:;
11518 : }
11519 : else
11520 : {
11521 0 : {
11522 0 : tree elem = uniform_vector_p (captures[0]);
11523 0 : if (elem
11524 : )
11525 : {
11526 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2004;
11527 0 : {
11528 0 : tree _r;
11529 0 : _r = build_vector_from_val (type, elem);
11530 0 : if (TREE_SIDE_EFFECTS (captures[0]))
11531 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[0]), _r);
11532 0 : if (TREE_SIDE_EFFECTS (captures[1]))
11533 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
11534 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 1115, __FILE__, __LINE__, true);
11535 0 : return _r;
11536 : }
11537 0 : next_after_fail2004:;
11538 : }
11539 : }
11540 : }
11541 : }
11542 : }
11543 : }
11544 780180 : switch (TREE_CODE (_p1))
11545 : {
11546 0 : case VEC_PERM_EXPR:
11547 0 : {
11548 0 : tree _q30 = TREE_OPERAND (_p1, 0);
11549 0 : tree _q31 = TREE_OPERAND (_p1, 1);
11550 0 : tree _q32 = TREE_OPERAND (_p1, 2);
11551 0 : switch (TREE_CODE (_q32))
11552 : {
11553 0 : case VECTOR_CST:
11554 0 : {
11555 0 : switch (TREE_CODE (_p2))
11556 : {
11557 0 : case VECTOR_CST:
11558 0 : {
11559 0 : {
11560 0 : tree captures[6] ATTRIBUTE_UNUSED = { _p0, _p1, _q30, _q31, _q32, _p2 };
11561 0 : if (TYPE_VECTOR_SUBPARTS (type).is_constant ()
11562 : )
11563 : {
11564 0 : {
11565 0 : machine_mode result_mode = TYPE_MODE (type);
11566 0 : machine_mode op_mode = TYPE_MODE (TREE_TYPE (captures[2]));
11567 0 : int nelts = TYPE_VECTOR_SUBPARTS (type).to_constant ();
11568 0 : vec_perm_indices sel0, sel1;
11569 0 : if (tree_to_vec_perm_indices (&sel0, captures[2], captures[3], captures[4])
11570 0 : && tree_to_vec_perm_indices (&sel1, captures[0], captures[1], captures[5])
11571 : )
11572 : {
11573 0 : {
11574 0 : bool use_1 = false, use_2 = false;
11575 0 : vec_perm_builder builder2 (nelts, nelts, 2);
11576 0 : for (int i = 0; i < nelts; i++)
11577 : {
11578 0 : if (known_lt ((poly_uint64)sel1[i], sel1.nelts_per_input ()))
11579 0 : builder2.quick_push (sel1[i]);
11580 : else
11581 : {
11582 0 : poly_uint64 j = sel0[(sel1[i] - sel1.nelts_per_input ())
11583 0 : .to_constant ()];
11584 0 : if (known_lt (j, sel0.nelts_per_input ()))
11585 : use_1 = true;
11586 : else
11587 : {
11588 0 : use_2 = true;
11589 0 : j -= sel0.nelts_per_input ();
11590 : }
11591 0 : builder2.quick_push (j + sel1.nelts_per_input ());
11592 : }
11593 : }
11594 0 : if (use_1 ^ use_2
11595 : )
11596 : {
11597 0 : {
11598 0 : vec_perm_indices sel2 (builder2, 2, nelts);
11599 0 : tree op0 = NULL_TREE;
11600 0 : if (can_vec_perm_const_p (result_mode, op_mode, sel2, false)
11601 0 : || (single_use (captures[1])
11602 0 : ? (!can_vec_perm_const_p (result_mode, op_mode, sel0, true)
11603 0 : || !can_vec_perm_const_p (result_mode, op_mode, sel1, true))
11604 : : !can_vec_perm_const_p (result_mode, op_mode, sel1, true)))
11605 0 : op0 = vec_perm_indices_to_tree (TREE_TYPE (captures[5]), sel2);
11606 0 : if (op0
11607 : )
11608 : {
11609 0 : if (use_1
11610 : )
11611 : {
11612 0 : if (TREE_SIDE_EFFECTS (captures[1])) goto next_after_fail2005;
11613 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2005;
11614 0 : {
11615 0 : tree res_op0;
11616 0 : res_op0 = captures[0];
11617 0 : tree res_op1;
11618 0 : res_op1 = captures[2];
11619 0 : tree res_op2;
11620 0 : res_op2 = op0;
11621 0 : tree _r;
11622 0 : _r = fold_build3_loc (loc, VEC_PERM_EXPR, type, res_op0, res_op1, res_op2);
11623 0 : if (TREE_SIDE_EFFECTS (captures[3]))
11624 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[3]), _r);
11625 0 : if (TREE_SIDE_EFFECTS (captures[4]))
11626 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[4]), _r);
11627 0 : if (TREE_SIDE_EFFECTS (captures[5]))
11628 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[5]), _r);
11629 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 1116, __FILE__, __LINE__, true);
11630 0 : return _r;
11631 : }
11632 0 : next_after_fail2005:;
11633 : }
11634 : else
11635 : {
11636 0 : if (use_2
11637 : )
11638 : {
11639 0 : if (TREE_SIDE_EFFECTS (captures[1])) goto next_after_fail2006;
11640 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2006;
11641 0 : {
11642 0 : tree res_op0;
11643 0 : res_op0 = captures[0];
11644 0 : tree res_op1;
11645 0 : res_op1 = captures[3];
11646 0 : tree res_op2;
11647 0 : res_op2 = op0;
11648 0 : tree _r;
11649 0 : _r = fold_build3_loc (loc, VEC_PERM_EXPR, type, res_op0, res_op1, res_op2);
11650 0 : if (TREE_SIDE_EFFECTS (captures[2]))
11651 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[2]), _r);
11652 0 : if (TREE_SIDE_EFFECTS (captures[4]))
11653 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[4]), _r);
11654 0 : if (TREE_SIDE_EFFECTS (captures[5]))
11655 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[5]), _r);
11656 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 1117, __FILE__, __LINE__, true);
11657 0 : return _r;
11658 : }
11659 0 : next_after_fail2006:;
11660 : }
11661 : }
11662 : }
11663 0 : }
11664 : }
11665 0 : }
11666 : }
11667 0 : }
11668 : }
11669 : }
11670 0 : break;
11671 : }
11672 : default:;
11673 : }
11674 : break;
11675 : }
11676 : default:;
11677 : }
11678 : break;
11679 : }
11680 780180 : default:;
11681 : }
11682 780180 : switch (TREE_CODE (_p0))
11683 : {
11684 0 : case VEC_PERM_EXPR:
11685 0 : {
11686 0 : tree _q20 = TREE_OPERAND (_p0, 0);
11687 0 : tree _q21 = TREE_OPERAND (_p0, 1);
11688 0 : tree _q22 = TREE_OPERAND (_p0, 2);
11689 0 : switch (TREE_CODE (_q22))
11690 : {
11691 0 : case VECTOR_CST:
11692 0 : {
11693 0 : switch (TREE_CODE (_p2))
11694 : {
11695 0 : case VECTOR_CST:
11696 0 : {
11697 0 : {
11698 0 : tree captures[6] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q22, _p1, _p2 };
11699 0 : if (TYPE_VECTOR_SUBPARTS (type).is_constant ()
11700 : )
11701 : {
11702 0 : {
11703 0 : machine_mode result_mode = TYPE_MODE (type);
11704 0 : machine_mode op_mode = TYPE_MODE (TREE_TYPE (captures[1]));
11705 0 : int nelts = TYPE_VECTOR_SUBPARTS (type).to_constant ();
11706 0 : vec_perm_indices sel0, sel1;
11707 0 : if (tree_to_vec_perm_indices (&sel0, captures[1], captures[2], captures[3])
11708 0 : && tree_to_vec_perm_indices (&sel1, captures[0], captures[4], captures[5])
11709 : )
11710 : {
11711 0 : {
11712 0 : bool use_1 = false, use_2 = false;
11713 0 : vec_perm_builder builder2 (nelts, nelts, 2);
11714 0 : for (int i = 0; i < nelts; i++)
11715 : {
11716 0 : if (known_ge ((poly_uint64)sel1[i], sel1.nelts_per_input ()))
11717 0 : builder2.quick_push (sel1[i]);
11718 : else
11719 : {
11720 0 : poly_uint64 j = sel0[sel1[i].to_constant ()];
11721 0 : if (known_lt (j, sel0.nelts_per_input ()))
11722 : use_1 = true;
11723 : else
11724 : {
11725 0 : use_2 = true;
11726 0 : j -= sel0.nelts_per_input ();
11727 : }
11728 0 : builder2.quick_push (j);
11729 : }
11730 : }
11731 0 : if (use_1 ^ use_2
11732 : )
11733 : {
11734 0 : {
11735 0 : vec_perm_indices sel2 (builder2, 2, nelts);
11736 0 : tree op0 = NULL_TREE;
11737 0 : if (can_vec_perm_const_p (result_mode, op_mode, sel2, false)
11738 0 : || (single_use (captures[0])
11739 0 : ? (!can_vec_perm_const_p (result_mode, op_mode, sel0, true)
11740 0 : || !can_vec_perm_const_p (result_mode, op_mode, sel1, true))
11741 : : !can_vec_perm_const_p (result_mode, op_mode, sel1, true)))
11742 0 : op0 = vec_perm_indices_to_tree (TREE_TYPE (captures[5]), sel2);
11743 0 : if (op0
11744 : )
11745 : {
11746 0 : if (use_1
11747 : )
11748 : {
11749 0 : if (TREE_SIDE_EFFECTS (captures[0])) goto next_after_fail2007;
11750 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2007;
11751 0 : {
11752 0 : tree res_op0;
11753 0 : res_op0 = captures[1];
11754 0 : tree res_op1;
11755 0 : res_op1 = captures[4];
11756 0 : tree res_op2;
11757 0 : res_op2 = op0;
11758 0 : tree _r;
11759 0 : _r = fold_build3_loc (loc, VEC_PERM_EXPR, type, res_op0, res_op1, res_op2);
11760 0 : if (TREE_SIDE_EFFECTS (captures[2]))
11761 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[2]), _r);
11762 0 : if (TREE_SIDE_EFFECTS (captures[3]))
11763 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[3]), _r);
11764 0 : if (TREE_SIDE_EFFECTS (captures[5]))
11765 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[5]), _r);
11766 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 1118, __FILE__, __LINE__, true);
11767 0 : return _r;
11768 : }
11769 0 : next_after_fail2007:;
11770 : }
11771 : else
11772 : {
11773 0 : if (use_2
11774 : )
11775 : {
11776 0 : if (TREE_SIDE_EFFECTS (captures[0])) goto next_after_fail2008;
11777 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2008;
11778 0 : {
11779 0 : tree res_op0;
11780 0 : res_op0 = captures[2];
11781 0 : tree res_op1;
11782 0 : res_op1 = captures[4];
11783 0 : tree res_op2;
11784 0 : res_op2 = op0;
11785 0 : tree _r;
11786 0 : _r = fold_build3_loc (loc, VEC_PERM_EXPR, type, res_op0, res_op1, res_op2);
11787 0 : if (TREE_SIDE_EFFECTS (captures[1]))
11788 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[1]), _r);
11789 0 : if (TREE_SIDE_EFFECTS (captures[3]))
11790 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[3]), _r);
11791 0 : if (TREE_SIDE_EFFECTS (captures[5]))
11792 0 : _r = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result (captures[5]), _r);
11793 0 : if (UNLIKELY (debug_dump)) generic_dump_logs ("match.pd", 1119, __FILE__, __LINE__, true);
11794 0 : return _r;
11795 : }
11796 0 : next_after_fail2008:;
11797 : }
11798 : }
11799 : }
11800 0 : }
11801 : }
11802 0 : }
11803 : }
11804 0 : }
11805 : }
11806 : }
11807 0 : break;
11808 : }
11809 0 : default:;
11810 : }
11811 0 : switch (TREE_CODE (_p1))
11812 : {
11813 0 : case VEC_PERM_EXPR:
11814 0 : {
11815 0 : tree _q60 = TREE_OPERAND (_p1, 0);
11816 0 : tree _q61 = TREE_OPERAND (_p1, 1);
11817 0 : tree _q62 = TREE_OPERAND (_p1, 2);
11818 0 : if ((_q62 == _q22 && ! TREE_SIDE_EFFECTS (_q62)) || (operand_equal_p (_q62, _q22, 0) && types_match (_q62, _q22)))
11819 : {
11820 0 : switch (TREE_CODE (_q62))
11821 : {
11822 0 : case VECTOR_CST:
11823 0 : {
11824 0 : switch (TREE_CODE (_p2))
11825 : {
11826 0 : case VECTOR_CST:
11827 0 : {
11828 0 : {
11829 0 : tree captures[6] ATTRIBUTE_UNUSED = { _q20, _q21, _q22, _q60, _q61, _p2 };
11830 0 : tree res = generic_simplify_630 (loc, type, _p0, _p1, _p2, captures);
11831 0 : if (res) return res;
11832 : }
11833 0 : break;
11834 : }
11835 : default:;
11836 : }
11837 : break;
11838 : }
11839 : default:;
11840 : }
11841 : }
11842 : break;
11843 : }
11844 : default:;
11845 : }
11846 : break;
11847 : }
11848 : default:;
11849 : }
11850 : break;
11851 : }
11852 0 : case VIEW_CONVERT_EXPR:
11853 0 : {
11854 0 : tree _q20 = TREE_OPERAND (_p0, 0);
11855 0 : switch (TREE_CODE (_q20))
11856 : {
11857 0 : case VEC_PERM_EXPR:
11858 0 : {
11859 0 : tree _q30 = TREE_OPERAND (_q20, 0);
11860 0 : tree _q31 = TREE_OPERAND (_q20, 1);
11861 0 : tree _q32 = TREE_OPERAND (_q20, 2);
11862 0 : switch (TREE_CODE (_q32))
11863 : {
11864 0 : case VECTOR_CST:
11865 0 : {
11866 0 : switch (TREE_CODE (_p1))
11867 : {
11868 0 : case VIEW_CONVERT_EXPR:
11869 0 : {
11870 0 : tree _q70 = TREE_OPERAND (_p1, 0);
11871 0 : switch (TREE_CODE (_q70))
11872 : {
11873 0 : case VEC_PERM_EXPR:
11874 0 : {
11875 0 : tree _q80 = TREE_OPERAND (_q70, 0);
11876 0 : tree _q81 = TREE_OPERAND (_q70, 1);
11877 0 : tree _q82 = TREE_OPERAND (_q70, 2);
11878 0 : if ((_q82 == _q32 && ! TREE_SIDE_EFFECTS (_q82)) || (operand_equal_p (_q82, _q32, 0) && types_match (_q82, _q32)))
11879 : {
11880 0 : switch (TREE_CODE (_q82))
11881 : {
11882 0 : case VECTOR_CST:
11883 0 : {
11884 0 : switch (TREE_CODE (_p2))
11885 : {
11886 0 : case VECTOR_CST:
11887 0 : {
11888 0 : {
11889 0 : tree captures[6] ATTRIBUTE_UNUSED = { _q30, _q31, _q32, _q80, _q81, _p2 };
11890 0 : tree res = generic_simplify_630 (loc, type, _p0, _p1, _p2, captures);
11891 0 : if (res) return res;
11892 : }
11893 0 : break;
11894 : }
11895 : default:;
11896 : }
11897 : break;
11898 : }
11899 : default:;
11900 : }
11901 : }
11902 : break;
11903 : }
11904 : default:;
11905 : }
11906 : break;
11907 : }
11908 : default:;
11909 : }
11910 : break;
11911 : }
11912 : default:;
11913 : }
11914 : break;
11915 : }
11916 : default:;
11917 : }
11918 : break;
11919 : }
11920 : default:;
11921 : }
11922 : return NULL_TREE;
11923 : }
11924 : #pragma GCC diagnostic pop
|