Branch data 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 "gimple-match-auto.h"
8 : :
9 : : bool
10 : 623483156 : gimple_bit_not_with_nop (tree t, tree *res_ops, tree (*valueize)(tree) ATTRIBUTE_UNUSED)
11 : : {
12 : 623483156 : const tree type = TREE_TYPE (t);
13 : 623483156 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
14 : 623483156 : switch (TREE_CODE (t))
15 : : {
16 : 438981921 : case SSA_NAME:
17 : 438981921 : if (gimple *_d1 = get_def (valueize, t))
18 : : {
19 : 173952185 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
20 : 191743290 : switch (gimple_assign_rhs_code (_a1))
21 : : {
22 : 1828262 : case BIT_NOT_EXPR:
23 : 1828262 : {
24 : 1828262 : tree _p0 = gimple_assign_rhs1 (_a1);
25 : 1828262 : _p0 = do_valueize (valueize, _p0);
26 : 1828262 : {
27 : 1828262 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
28 : 1828262 : {
29 : 1828262 : res_ops[0] = captures[0];
30 : 1828262 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 2, __FILE__, __LINE__, false);
31 : 1828262 : return true;
32 : : }
33 : : }
34 : 8039378 : break;
35 : : }
36 : 8039378 : CASE_CONVERT:
37 : 8039378 : {
38 : 8039378 : tree _p0 = gimple_assign_rhs1 (_a1);
39 : 8039378 : _p0 = do_valueize (valueize, _p0);
40 : 8039378 : switch (TREE_CODE (_p0))
41 : : {
42 : 7972841 : case SSA_NAME:
43 : 7972841 : if (gimple *_d2 = get_def (valueize, _p0))
44 : : {
45 : 7778291 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
46 : 8719792 : switch (gimple_assign_rhs_code (_a2))
47 : : {
48 : 86640 : case BIT_NOT_EXPR:
49 : 86640 : {
50 : 86640 : tree _q20 = gimple_assign_rhs1 (_a2);
51 : 86640 : _q20 = do_valueize (valueize, _q20);
52 : 86640 : {
53 : 86640 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
54 : 86640 : if (tree_nop_conversion_p (type, TREE_TYPE (captures[0]))
55 : : )
56 : : {
57 : 24855 : {
58 : 24855 : res_ops[0] = captures[0];
59 : 24855 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 3, __FILE__, __LINE__, false);
60 : 24855 : return true;
61 : : }
62 : : }
63 : : }
64 : : break;
65 : : }
66 : : default:;
67 : : }
68 : : }
69 : : break;
70 : : default:;
71 : : }
72 : : break;
73 : : }
74 : : default:;
75 : : }
76 : : }
77 : : break;
78 : : default:;
79 : : }
80 : : return false;
81 : : }
82 : :
83 : : bool
84 : 1446750 : gimple_max_value (tree t, tree (*valueize)(tree) ATTRIBUTE_UNUSED)
85 : : {
86 : 1446750 : const tree type = TREE_TYPE (t);
87 : 1446750 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
88 : 1446750 : if (uniform_integer_cst_p (t))
89 : : {
90 : 977217 : {
91 : 977217 : {
92 : 977217 : tree int_cst = uniform_integer_cst_p (t);
93 : 977217 : tree itype = TREE_TYPE (int_cst);
94 : 1954434 : if ((INTEGRAL_TYPE_P (itype)
95 : 175124 : || POINTER_TYPE_P (itype))
96 : 2129495 : && wi::eq_p (wi::to_wide (int_cst), wi::max_value (itype))
97 : : )
98 : : {
99 : 24429 : {
100 : 24429 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 41, __FILE__, __LINE__, false);
101 : 24429 : return true;
102 : : }
103 : : }
104 : : }
105 : : }
106 : : }
107 : : return false;
108 : : }
109 : :
110 : : bool
111 : 21722 : gimple_signed_integer_sat_val (tree t, tree *res_ops, tree (*valueize)(tree) ATTRIBUTE_UNUSED)
112 : : {
113 : 21722 : const tree type = TREE_TYPE (t);
114 : 21722 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
115 : 21722 : switch (TREE_CODE (t))
116 : : {
117 : 21564 : case SSA_NAME:
118 : 21564 : if (gimple *_d1 = get_def (valueize, t))
119 : : {
120 : 21564 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
121 : 26 : switch (gimple_assign_rhs_code (_a1))
122 : : {
123 : 20 : case BIT_XOR_EXPR:
124 : 20 : {
125 : 20 : tree _p0 = gimple_assign_rhs1 (_a1);
126 : 20 : _p0 = do_valueize (valueize, _p0);
127 : 20 : tree _p1 = gimple_assign_rhs2 (_a1);
128 : 20 : _p1 = do_valueize (valueize, _p1);
129 : 20 : if (tree_swap_operands_p (_p0, _p1))
130 : 0 : std::swap (_p0, _p1);
131 : 20 : switch (TREE_CODE (_p0))
132 : : {
133 : 20 : case SSA_NAME:
134 : 20 : if (gimple *_d2 = get_def (valueize, _p0))
135 : : {
136 : 20 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
137 : 20 : switch (gimple_assign_rhs_code (_a2))
138 : : {
139 : 8 : case NEGATE_EXPR:
140 : 8 : {
141 : 8 : tree _q20 = gimple_assign_rhs1 (_a2);
142 : 8 : _q20 = do_valueize (valueize, _q20);
143 : 8 : switch (TREE_CODE (_q20))
144 : : {
145 : 8 : case SSA_NAME:
146 : 8 : if (gimple *_d3 = get_def (valueize, _q20))
147 : : {
148 : 8 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
149 : 8 : switch (gimple_assign_rhs_code (_a3))
150 : : {
151 : 8 : CASE_CONVERT:
152 : 8 : {
153 : 8 : tree _q30 = gimple_assign_rhs1 (_a3);
154 : 8 : _q30 = do_valueize (valueize, _q30);
155 : 8 : switch (TREE_CODE (_q30))
156 : : {
157 : 8 : case SSA_NAME:
158 : 8 : if (gimple *_d4 = get_def (valueize, _q30))
159 : : {
160 : 8 : if (gassign *_a4 = dyn_cast <gassign *> (_d4))
161 : 8 : switch (gimple_assign_rhs_code (_a4))
162 : : {
163 : 8 : case LT_EXPR:
164 : 8 : {
165 : 8 : tree _q40 = gimple_assign_rhs1 (_a4);
166 : 8 : _q40 = do_valueize (valueize, _q40);
167 : 8 : tree _q41 = gimple_assign_rhs2 (_a4);
168 : 8 : _q41 = do_valueize (valueize, _q41);
169 : 8 : if (integer_zerop (_q41))
170 : : {
171 : 8 : if (gimple_max_value (_p1, valueize))
172 : : {
173 : 8 : {
174 : 8 : tree captures[1] ATTRIBUTE_UNUSED = { _q40 };
175 : 8 : if (INTEGRAL_TYPE_P (type) && !TYPE_UNSIGNED (type)
176 : : )
177 : : {
178 : 8 : {
179 : 8 : res_ops[0] = captures[0];
180 : 8 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 71, __FILE__, __LINE__, false);
181 : 8 : return true;
182 : : }
183 : : }
184 : : }
185 : : }
186 : : }
187 : : break;
188 : : }
189 : : default:;
190 : : }
191 : : }
192 : : break;
193 : : default:;
194 : : }
195 : : break;
196 : : }
197 : : default:;
198 : : }
199 : : }
200 : : break;
201 : : default:;
202 : : }
203 : : break;
204 : : }
205 : : default:;
206 : : }
207 : : }
208 : : break;
209 : 12 : default:;
210 : : }
211 : 12 : {
212 : 12 : tree _p0_pops[1];
213 : 12 : if (gimple_nop_convert (_p0, _p0_pops, valueize))
214 : : {
215 : 12 : tree _q20 = _p0_pops[0];
216 : 12 : switch (TREE_CODE (_q20))
217 : : {
218 : 12 : case SSA_NAME:
219 : 12 : if (gimple *_d2 = get_def (valueize, _q20))
220 : : {
221 : 12 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
222 : 12 : switch (gimple_assign_rhs_code (_a2))
223 : : {
224 : 12 : case NEGATE_EXPR:
225 : 12 : {
226 : 12 : tree _q30 = gimple_assign_rhs1 (_a2);
227 : 12 : _q30 = do_valueize (valueize, _q30);
228 : 12 : {
229 : 12 : tree _q30_pops[1];
230 : 12 : if (gimple_nop_convert (_q30, _q30_pops, valueize))
231 : : {
232 : 12 : tree _q40 = _q30_pops[0];
233 : 12 : switch (TREE_CODE (_q40))
234 : : {
235 : 12 : case SSA_NAME:
236 : 12 : if (gimple *_d3 = get_def (valueize, _q40))
237 : : {
238 : 12 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
239 : 12 : switch (gimple_assign_rhs_code (_a3))
240 : : {
241 : 12 : CASE_CONVERT:
242 : 12 : {
243 : 12 : tree _q50 = gimple_assign_rhs1 (_a3);
244 : 12 : _q50 = do_valueize (valueize, _q50);
245 : 12 : switch (TREE_CODE (_q50))
246 : : {
247 : 12 : case SSA_NAME:
248 : 12 : if (gimple *_d4 = get_def (valueize, _q50))
249 : : {
250 : 12 : if (gassign *_a4 = dyn_cast <gassign *> (_d4))
251 : 12 : switch (gimple_assign_rhs_code (_a4))
252 : : {
253 : 12 : case LT_EXPR:
254 : 12 : {
255 : 12 : tree _q60 = gimple_assign_rhs1 (_a4);
256 : 12 : _q60 = do_valueize (valueize, _q60);
257 : 12 : tree _q61 = gimple_assign_rhs2 (_a4);
258 : 12 : _q61 = do_valueize (valueize, _q61);
259 : 12 : if (integer_zerop (_q61))
260 : : {
261 : 12 : if (gimple_max_value (_p1, valueize))
262 : : {
263 : 12 : {
264 : 12 : tree captures[1] ATTRIBUTE_UNUSED = { _q60 };
265 : 12 : if (INTEGRAL_TYPE_P (type) && !TYPE_UNSIGNED (type)
266 : : )
267 : : {
268 : 12 : {
269 : 12 : res_ops[0] = captures[0];
270 : 12 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 71, __FILE__, __LINE__, false);
271 : 12 : return true;
272 : : }
273 : : }
274 : : }
275 : : }
276 : : }
277 : : break;
278 : : }
279 : : default:;
280 : : }
281 : : }
282 : : break;
283 : : default:;
284 : : }
285 : : break;
286 : : }
287 : : default:;
288 : : }
289 : : }
290 : : break;
291 : : default:;
292 : : }
293 : : }
294 : : }
295 : 0 : break;
296 : : }
297 : : default:;
298 : : }
299 : : }
300 : : break;
301 : : default:;
302 : : }
303 : : }
304 : : }
305 : 0 : if (gimple_max_value (_p0, valueize))
306 : : {
307 : 0 : switch (TREE_CODE (_p1))
308 : : {
309 : 0 : case SSA_NAME:
310 : 0 : if (gimple *_d2 = get_def (valueize, _p1))
311 : : {
312 : 0 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
313 : 0 : switch (gimple_assign_rhs_code (_a2))
314 : : {
315 : 0 : case NEGATE_EXPR:
316 : 0 : {
317 : 0 : tree _q30 = gimple_assign_rhs1 (_a2);
318 : 0 : _q30 = do_valueize (valueize, _q30);
319 : 0 : switch (TREE_CODE (_q30))
320 : : {
321 : 0 : case SSA_NAME:
322 : 0 : if (gimple *_d3 = get_def (valueize, _q30))
323 : : {
324 : 0 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
325 : 0 : switch (gimple_assign_rhs_code (_a3))
326 : : {
327 : 0 : CASE_CONVERT:
328 : 0 : {
329 : 0 : tree _q40 = gimple_assign_rhs1 (_a3);
330 : 0 : _q40 = do_valueize (valueize, _q40);
331 : 0 : switch (TREE_CODE (_q40))
332 : : {
333 : 0 : case SSA_NAME:
334 : 0 : if (gimple *_d4 = get_def (valueize, _q40))
335 : : {
336 : 0 : if (gassign *_a4 = dyn_cast <gassign *> (_d4))
337 : 0 : switch (gimple_assign_rhs_code (_a4))
338 : : {
339 : 0 : case LT_EXPR:
340 : 0 : {
341 : 0 : tree _q50 = gimple_assign_rhs1 (_a4);
342 : 0 : _q50 = do_valueize (valueize, _q50);
343 : 0 : tree _q51 = gimple_assign_rhs2 (_a4);
344 : 0 : _q51 = do_valueize (valueize, _q51);
345 : 0 : if (integer_zerop (_q51))
346 : : {
347 : 0 : {
348 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q50 };
349 : 0 : if (INTEGRAL_TYPE_P (type) && !TYPE_UNSIGNED (type)
350 : : )
351 : : {
352 : 0 : {
353 : 0 : res_ops[0] = captures[0];
354 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 71, __FILE__, __LINE__, false);
355 : 0 : return true;
356 : : }
357 : : }
358 : : }
359 : : }
360 : : break;
361 : : }
362 : : default:;
363 : : }
364 : : }
365 : : break;
366 : : default:;
367 : : }
368 : : break;
369 : : }
370 : : default:;
371 : : }
372 : : }
373 : : break;
374 : : default:;
375 : : }
376 : : break;
377 : : }
378 : : default:;
379 : : }
380 : : }
381 : : break;
382 : 0 : default:;
383 : : }
384 : 0 : {
385 : 0 : tree _p1_pops[1];
386 : 0 : if (gimple_nop_convert (_p1, _p1_pops, valueize))
387 : : {
388 : 0 : tree _q30 = _p1_pops[0];
389 : 0 : switch (TREE_CODE (_q30))
390 : : {
391 : 0 : case SSA_NAME:
392 : 0 : if (gimple *_d2 = get_def (valueize, _q30))
393 : : {
394 : 0 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
395 : 0 : switch (gimple_assign_rhs_code (_a2))
396 : : {
397 : 0 : case NEGATE_EXPR:
398 : 0 : {
399 : 0 : tree _q40 = gimple_assign_rhs1 (_a2);
400 : 0 : _q40 = do_valueize (valueize, _q40);
401 : 0 : {
402 : 0 : tree _q40_pops[1];
403 : 0 : if (gimple_nop_convert (_q40, _q40_pops, valueize))
404 : : {
405 : 0 : tree _q50 = _q40_pops[0];
406 : 0 : switch (TREE_CODE (_q50))
407 : : {
408 : 0 : case SSA_NAME:
409 : 0 : if (gimple *_d3 = get_def (valueize, _q50))
410 : : {
411 : 0 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
412 : 0 : switch (gimple_assign_rhs_code (_a3))
413 : : {
414 : 0 : CASE_CONVERT:
415 : 0 : {
416 : 0 : tree _q60 = gimple_assign_rhs1 (_a3);
417 : 0 : _q60 = do_valueize (valueize, _q60);
418 : 0 : switch (TREE_CODE (_q60))
419 : : {
420 : 0 : case SSA_NAME:
421 : 0 : if (gimple *_d4 = get_def (valueize, _q60))
422 : : {
423 : 0 : if (gassign *_a4 = dyn_cast <gassign *> (_d4))
424 : 0 : switch (gimple_assign_rhs_code (_a4))
425 : : {
426 : 0 : case LT_EXPR:
427 : 0 : {
428 : 0 : tree _q70 = gimple_assign_rhs1 (_a4);
429 : 0 : _q70 = do_valueize (valueize, _q70);
430 : 0 : tree _q71 = gimple_assign_rhs2 (_a4);
431 : 0 : _q71 = do_valueize (valueize, _q71);
432 : 0 : if (integer_zerop (_q71))
433 : : {
434 : 0 : {
435 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q70 };
436 : 0 : if (INTEGRAL_TYPE_P (type) && !TYPE_UNSIGNED (type)
437 : : )
438 : : {
439 : 0 : {
440 : 0 : res_ops[0] = captures[0];
441 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 71, __FILE__, __LINE__, false);
442 : 0 : return true;
443 : : }
444 : : }
445 : : }
446 : : }
447 : : break;
448 : : }
449 : : default:;
450 : : }
451 : : }
452 : : break;
453 : : default:;
454 : : }
455 : : break;
456 : : }
457 : : default:;
458 : : }
459 : : }
460 : : break;
461 : : default:;
462 : : }
463 : : }
464 : : }
465 : 0 : break;
466 : : }
467 : : default:;
468 : : }
469 : : }
470 : : break;
471 : : default:;
472 : : }
473 : : }
474 : : }
475 : : }
476 : 21722 : break;
477 : : }
478 : : default:;
479 : : }
480 : : }
481 : : break;
482 : : default:;
483 : : }
484 : : return false;
485 : : }
486 : :
487 : : bool
488 : 20419159 : gimple_cond_expr_convert_p (tree t, tree *res_ops, tree (*valueize)(tree) ATTRIBUTE_UNUSED)
489 : : {
490 : 20419159 : const tree type = TREE_TYPE (t);
491 : 20419159 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
492 : 20419159 : switch (TREE_CODE (t))
493 : : {
494 : 15936802 : case SSA_NAME:
495 : 15936802 : if (gimple *_d1 = get_def (valueize, t))
496 : : {
497 : 15936802 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
498 : 18482399 : switch (gimple_assign_rhs_code (_a1))
499 : : {
500 : 101611 : case COND_EXPR:
501 : 101611 : {
502 : 101611 : tree _p0 = gimple_assign_rhs1 (_a1);
503 : 101611 : _p0 = do_valueize (valueize, _p0);
504 : 101611 : tree _p1 = gimple_assign_rhs2 (_a1);
505 : 101611 : _p1 = do_valueize (valueize, _p1);
506 : 101611 : tree _p2 = gimple_assign_rhs3 (_a1);
507 : 101611 : _p2 = do_valueize (valueize, _p2);
508 : 101611 : switch (TREE_CODE (_p0))
509 : : {
510 : 101611 : case SSA_NAME:
511 : 101611 : if (gimple *_d2 = get_def (valueize, _p0))
512 : : {
513 : 101611 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
514 : 102730 : switch (gimple_assign_rhs_code (_a2))
515 : : {
516 : 82385 : case LT_EXPR:
517 : 82385 : case LE_EXPR:
518 : 82385 : case EQ_EXPR:
519 : 82385 : case NE_EXPR:
520 : 82385 : case GE_EXPR:
521 : 82385 : case GT_EXPR:
522 : 82385 : {
523 : 82385 : tree _q20 = gimple_assign_rhs1 (_a2);
524 : 82385 : _q20 = do_valueize (valueize, _q20);
525 : 82385 : tree _q21 = gimple_assign_rhs2 (_a2);
526 : 82385 : _q21 = do_valueize (valueize, _q21);
527 : 82385 : switch (TREE_CODE (_p1))
528 : : {
529 : 60931 : case SSA_NAME:
530 : 60931 : if (gimple *_d3 = get_def (valueize, _p1))
531 : : {
532 : 60931 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
533 : 57456 : switch (gimple_assign_rhs_code (_a3))
534 : : {
535 : 11116 : CASE_CONVERT:
536 : 11116 : {
537 : 11116 : tree _q50 = gimple_assign_rhs1 (_a3);
538 : 11116 : _q50 = do_valueize (valueize, _q50);
539 : 11116 : switch (TREE_CODE (_p2))
540 : : {
541 : 5744 : case SSA_NAME:
542 : 5744 : if (gimple *_d4 = get_def (valueize, _p2))
543 : : {
544 : 5744 : if (gassign *_a4 = dyn_cast <gassign *> (_d4))
545 : 5929 : switch (gimple_assign_rhs_code (_a4))
546 : : {
547 : 1652 : CASE_CONVERT:
548 : 1652 : {
549 : 1652 : tree _q70 = gimple_assign_rhs1 (_a4);
550 : 1652 : _q70 = do_valueize (valueize, _q70);
551 : 1652 : {
552 : 1652 : tree captures[7] ATTRIBUTE_UNUSED = { _q20, _q50, _q70, _p0, _q21, _p1, _p2 };
553 : 1652 : if ((INTEGRAL_TYPE_P (type)
554 : 14 : || (!flag_trapping_math && SCALAR_FLOAT_TYPE_P (type)))
555 : 1638 : && ((INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
556 : 1638 : && INTEGRAL_TYPE_P (TREE_TYPE (captures[2])))
557 : 0 : || (SCALAR_FLOAT_TYPE_P (TREE_TYPE (captures[1]))
558 : 0 : && types_match (TREE_TYPE (captures[1]), TREE_TYPE (captures[2]))))
559 : 1638 : && !operand_equal_p (TYPE_SIZE (type), TYPE_SIZE (TREE_TYPE (captures[0])))
560 : 216 : && operand_equal_p (TYPE_SIZE (TREE_TYPE (captures[0])),
561 : 216 : TYPE_SIZE (TREE_TYPE (captures[1])))
562 : 104 : && operand_equal_p (TYPE_SIZE (TREE_TYPE (captures[0])),
563 : 104 : TYPE_SIZE (TREE_TYPE (captures[2])))
564 : 98 : && (known_gt (tree_to_poly_uint64 (TYPE_SIZE (TREE_TYPE (captures[0]))),
565 : : tree_to_poly_uint64 (TYPE_SIZE (type)))
566 : 25 : || (TYPE_UNSIGNED (TREE_TYPE (captures[1]))
567 : 25 : == TYPE_UNSIGNED (TREE_TYPE (captures[2]))))
568 : 88 : && single_use (captures[5])
569 : 1728 : && single_use (captures[6])
570 : : )
571 : : {
572 : 61 : {
573 : 61 : res_ops[0] = captures[0];
574 : 61 : res_ops[1] = captures[1];
575 : 61 : res_ops[2] = captures[2];
576 : 61 : res_ops[3] = captures[3];
577 : 61 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 103, __FILE__, __LINE__, false);
578 : 61 : return true;
579 : : }
580 : : }
581 : : }
582 : 1591 : break;
583 : : }
584 : : default:;
585 : : }
586 : : }
587 : : break;
588 : 0 : case REAL_CST:
589 : 0 : {
590 : 0 : {
591 : 0 : tree captures[6] ATTRIBUTE_UNUSED = { _q20, _q50, _p2, _p0, _q21, _p1 };
592 : 0 : if (!flag_trapping_math
593 : 0 : && SCALAR_FLOAT_TYPE_P (type)
594 : 0 : && SCALAR_FLOAT_TYPE_P (TREE_TYPE (captures[1]))
595 : 0 : && !operand_equal_p (TYPE_SIZE (type), TYPE_SIZE (TREE_TYPE (captures[0])))
596 : 0 : && operand_equal_p (TYPE_SIZE (TREE_TYPE (captures[0])),
597 : 0 : TYPE_SIZE (TREE_TYPE (captures[1])))
598 : 0 : && single_use (captures[5])
599 : 0 : && (flag_unsafe_math_optimizations
600 : 0 : || exact_real_truncate (TYPE_MODE (TREE_TYPE (captures[1])),
601 : 0 : &TREE_REAL_CST (captures[2])))
602 : : )
603 : : {
604 : 0 : {
605 : 0 : res_ops[0] = captures[0];
606 : 0 : res_ops[1] = captures[1];
607 : 0 : res_ops[2] = captures[2];
608 : 0 : res_ops[3] = captures[3];
609 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 104, __FILE__, __LINE__, false);
610 : 0 : return true;
611 : : }
612 : : }
613 : : }
614 : 0 : break;
615 : : }
616 : : default:;
617 : : }
618 : : break;
619 : : }
620 : 20 : case FLOAT_EXPR:
621 : 20 : {
622 : 20 : tree _q50 = gimple_assign_rhs1 (_a3);
623 : 20 : _q50 = do_valueize (valueize, _q50);
624 : 20 : switch (TREE_CODE (_p2))
625 : : {
626 : 20 : case SSA_NAME:
627 : 20 : if (gimple *_d4 = get_def (valueize, _p2))
628 : : {
629 : 20 : if (gassign *_a4 = dyn_cast <gassign *> (_d4))
630 : 13 : switch (gimple_assign_rhs_code (_a4))
631 : : {
632 : 13 : case FLOAT_EXPR:
633 : 13 : {
634 : 13 : tree _q70 = gimple_assign_rhs1 (_a4);
635 : 13 : _q70 = do_valueize (valueize, _q70);
636 : 13 : {
637 : 13 : tree captures[7] ATTRIBUTE_UNUSED = { _q20, _q50, _q70, _p0, _q21, _p1, _p2 };
638 : 13 : if (SCALAR_FLOAT_TYPE_P (type) && !flag_trapping_math
639 : 13 : && INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
640 : 13 : && types_match (TREE_TYPE (captures[1]), TREE_TYPE (captures[2]))
641 : 13 : && !operand_equal_p (TYPE_SIZE (type), TYPE_SIZE (TREE_TYPE (captures[0])))
642 : 12 : && operand_equal_p (TYPE_SIZE (TREE_TYPE (captures[0])),
643 : 12 : TYPE_SIZE (TREE_TYPE (captures[1])))
644 : 12 : && single_use (captures[5])
645 : 25 : && single_use (captures[6])
646 : : )
647 : : {
648 : 12 : {
649 : 12 : res_ops[0] = captures[0];
650 : 12 : res_ops[1] = captures[1];
651 : 12 : res_ops[2] = captures[2];
652 : 12 : res_ops[3] = captures[3];
653 : 12 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 105, __FILE__, __LINE__, false);
654 : 12 : return true;
655 : : }
656 : : }
657 : : }
658 : 1 : break;
659 : : }
660 : : default:;
661 : : }
662 : : }
663 : : break;
664 : : default:;
665 : : }
666 : : break;
667 : : }
668 : 9 : case FIX_TRUNC_EXPR:
669 : 9 : {
670 : 9 : tree _q50 = gimple_assign_rhs1 (_a3);
671 : 9 : _q50 = do_valueize (valueize, _q50);
672 : 9 : switch (TREE_CODE (_p2))
673 : : {
674 : 6 : case SSA_NAME:
675 : 6 : if (gimple *_d4 = get_def (valueize, _p2))
676 : : {
677 : 6 : if (gassign *_a4 = dyn_cast <gassign *> (_d4))
678 : 6 : switch (gimple_assign_rhs_code (_a4))
679 : : {
680 : 0 : case FIX_TRUNC_EXPR:
681 : 0 : {
682 : 0 : tree _q70 = gimple_assign_rhs1 (_a4);
683 : 0 : _q70 = do_valueize (valueize, _q70);
684 : 0 : {
685 : 0 : tree captures[7] ATTRIBUTE_UNUSED = { _q20, _q50, _q70, _p0, _q21, _p1, _p2 };
686 : 0 : if (INTEGRAL_TYPE_P (type) && !flag_trapping_math
687 : 0 : && SCALAR_FLOAT_TYPE_P (TREE_TYPE (captures[1]))
688 : 0 : && types_match (TREE_TYPE (captures[1]), TREE_TYPE (captures[2]))
689 : 0 : && !operand_equal_p (TYPE_SIZE (type),
690 : 0 : TYPE_SIZE (TREE_TYPE (captures[0])))
691 : 0 : && operand_equal_p (TYPE_SIZE (TREE_TYPE (captures[0])),
692 : 0 : TYPE_SIZE (TREE_TYPE (captures[1])))
693 : 0 : && single_use (captures[5])
694 : 0 : && single_use (captures[6])
695 : : )
696 : : {
697 : 0 : {
698 : 0 : res_ops[0] = captures[0];
699 : 0 : res_ops[1] = captures[1];
700 : 0 : res_ops[2] = captures[2];
701 : 0 : res_ops[3] = captures[3];
702 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 106, __FILE__, __LINE__, false);
703 : 0 : return true;
704 : : }
705 : : }
706 : : }
707 : 0 : break;
708 : : }
709 : : default:;
710 : : }
711 : : }
712 : : break;
713 : : default:;
714 : : }
715 : : break;
716 : : }
717 : : default:;
718 : : }
719 : : }
720 : : break;
721 : 854 : case REAL_CST:
722 : 854 : {
723 : 854 : switch (TREE_CODE (_p2))
724 : : {
725 : 167 : case SSA_NAME:
726 : 167 : if (gimple *_d3 = get_def (valueize, _p2))
727 : : {
728 : 167 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
729 : 123 : switch (gimple_assign_rhs_code (_a3))
730 : : {
731 : 25 : CASE_CONVERT:
732 : 25 : {
733 : 25 : tree _q60 = gimple_assign_rhs1 (_a3);
734 : 25 : _q60 = do_valueize (valueize, _q60);
735 : 25 : {
736 : 25 : tree captures[6] ATTRIBUTE_UNUSED = { _q20, _p1, _q60, _p0, _q21, _p2 };
737 : 25 : if (!flag_trapping_math
738 : 24 : && SCALAR_FLOAT_TYPE_P (type)
739 : 24 : && SCALAR_FLOAT_TYPE_P (TREE_TYPE (captures[2]))
740 : 24 : && !operand_equal_p (TYPE_SIZE (type),
741 : 24 : TYPE_SIZE (TREE_TYPE (captures[0])))
742 : 18 : && operand_equal_p (TYPE_SIZE (TREE_TYPE (captures[0])),
743 : 18 : TYPE_SIZE (TREE_TYPE (captures[2])))
744 : 18 : && single_use (captures[5])
745 : 40 : && (flag_unsafe_math_optimizations
746 : 15 : || exact_real_truncate (TYPE_MODE (TREE_TYPE (captures[2])),
747 : 15 : &TREE_REAL_CST (captures[1])))
748 : : )
749 : : {
750 : 12 : {
751 : 12 : res_ops[0] = captures[0];
752 : 12 : res_ops[1] = captures[1];
753 : 12 : res_ops[2] = captures[2];
754 : 12 : res_ops[3] = captures[3];
755 : 12 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 107, __FILE__, __LINE__, false);
756 : 12 : return true;
757 : : }
758 : : }
759 : : }
760 : 13 : break;
761 : : }
762 : : default:;
763 : : }
764 : : }
765 : : break;
766 : : default:;
767 : : }
768 : : break;
769 : : }
770 : : default:;
771 : : }
772 : : break;
773 : : }
774 : : default:;
775 : : }
776 : : }
777 : : break;
778 : 0 : case LT_EXPR:
779 : 0 : case LE_EXPR:
780 : 0 : case EQ_EXPR:
781 : 0 : case NE_EXPR:
782 : 0 : case GE_EXPR:
783 : 0 : case GT_EXPR:
784 : 0 : {
785 : 0 : tree _q20 = TREE_OPERAND (_p0, 0);
786 : 0 : if ((TREE_CODE (_q20) == SSA_NAME
787 : 0 : || is_gimple_min_invariant (_q20)))
788 : : {
789 : 0 : _q20 = do_valueize (valueize, _q20);
790 : 0 : tree _q21 = TREE_OPERAND (_p0, 1);
791 : 0 : if ((TREE_CODE (_q21) == SSA_NAME
792 : 0 : || is_gimple_min_invariant (_q21)))
793 : : {
794 : 0 : _q21 = do_valueize (valueize, _q21);
795 : 0 : switch (TREE_CODE (_p1))
796 : : {
797 : 0 : case SSA_NAME:
798 : 0 : if (gimple *_d2 = get_def (valueize, _p1))
799 : : {
800 : 0 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
801 : 0 : switch (gimple_assign_rhs_code (_a2))
802 : : {
803 : 0 : CASE_CONVERT:
804 : 0 : {
805 : 0 : tree _q50 = gimple_assign_rhs1 (_a2);
806 : 0 : _q50 = do_valueize (valueize, _q50);
807 : 0 : switch (TREE_CODE (_p2))
808 : : {
809 : 0 : case SSA_NAME:
810 : 0 : if (gimple *_d3 = get_def (valueize, _p2))
811 : : {
812 : 0 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
813 : 0 : switch (gimple_assign_rhs_code (_a3))
814 : : {
815 : 0 : CASE_CONVERT:
816 : 0 : {
817 : 0 : tree _q70 = gimple_assign_rhs1 (_a3);
818 : 0 : _q70 = do_valueize (valueize, _q70);
819 : 0 : {
820 : 0 : tree captures[7] ATTRIBUTE_UNUSED = { _q20, _q50, _q70, _p0, _q21, _p1, _p2 };
821 : 0 : if ((INTEGRAL_TYPE_P (type)
822 : 0 : || (!flag_trapping_math && SCALAR_FLOAT_TYPE_P (type)))
823 : 0 : && ((INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
824 : 0 : && INTEGRAL_TYPE_P (TREE_TYPE (captures[2])))
825 : 0 : || (SCALAR_FLOAT_TYPE_P (TREE_TYPE (captures[1]))
826 : 0 : && types_match (TREE_TYPE (captures[1]), TREE_TYPE (captures[2]))))
827 : 0 : && !operand_equal_p (TYPE_SIZE (type), TYPE_SIZE (TREE_TYPE (captures[0])))
828 : 0 : && operand_equal_p (TYPE_SIZE (TREE_TYPE (captures[0])),
829 : 0 : TYPE_SIZE (TREE_TYPE (captures[1])))
830 : 0 : && operand_equal_p (TYPE_SIZE (TREE_TYPE (captures[0])),
831 : 0 : TYPE_SIZE (TREE_TYPE (captures[2])))
832 : 0 : && (known_gt (tree_to_poly_uint64 (TYPE_SIZE (TREE_TYPE (captures[0]))),
833 : : tree_to_poly_uint64 (TYPE_SIZE (type)))
834 : 0 : || (TYPE_UNSIGNED (TREE_TYPE (captures[1]))
835 : 0 : == TYPE_UNSIGNED (TREE_TYPE (captures[2]))))
836 : 0 : && single_use (captures[5])
837 : 0 : && single_use (captures[6])
838 : : )
839 : : {
840 : 0 : {
841 : 0 : res_ops[0] = captures[0];
842 : 0 : res_ops[1] = captures[1];
843 : 0 : res_ops[2] = captures[2];
844 : 0 : res_ops[3] = captures[3];
845 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 103, __FILE__, __LINE__, false);
846 : 0 : return true;
847 : : }
848 : : }
849 : : }
850 : 0 : break;
851 : : }
852 : : default:;
853 : : }
854 : : }
855 : : break;
856 : 0 : case REAL_CST:
857 : 0 : {
858 : 0 : {
859 : 0 : tree captures[6] ATTRIBUTE_UNUSED = { _q20, _q50, _p2, _p0, _q21, _p1 };
860 : 0 : if (!flag_trapping_math
861 : 0 : && SCALAR_FLOAT_TYPE_P (type)
862 : 0 : && SCALAR_FLOAT_TYPE_P (TREE_TYPE (captures[1]))
863 : 0 : && !operand_equal_p (TYPE_SIZE (type), TYPE_SIZE (TREE_TYPE (captures[0])))
864 : 0 : && operand_equal_p (TYPE_SIZE (TREE_TYPE (captures[0])),
865 : 0 : TYPE_SIZE (TREE_TYPE (captures[1])))
866 : 0 : && single_use (captures[5])
867 : 0 : && (flag_unsafe_math_optimizations
868 : 0 : || exact_real_truncate (TYPE_MODE (TREE_TYPE (captures[1])),
869 : 0 : &TREE_REAL_CST (captures[2])))
870 : : )
871 : : {
872 : 0 : {
873 : 0 : res_ops[0] = captures[0];
874 : 0 : res_ops[1] = captures[1];
875 : 0 : res_ops[2] = captures[2];
876 : 0 : res_ops[3] = captures[3];
877 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 104, __FILE__, __LINE__, false);
878 : 0 : return true;
879 : : }
880 : : }
881 : : }
882 : 0 : break;
883 : : }
884 : : default:;
885 : : }
886 : : break;
887 : : }
888 : 0 : case FLOAT_EXPR:
889 : 0 : {
890 : 0 : tree _q50 = gimple_assign_rhs1 (_a2);
891 : 0 : _q50 = do_valueize (valueize, _q50);
892 : 0 : switch (TREE_CODE (_p2))
893 : : {
894 : 0 : case SSA_NAME:
895 : 0 : if (gimple *_d3 = get_def (valueize, _p2))
896 : : {
897 : 0 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
898 : 0 : switch (gimple_assign_rhs_code (_a3))
899 : : {
900 : 0 : case FLOAT_EXPR:
901 : 0 : {
902 : 0 : tree _q70 = gimple_assign_rhs1 (_a3);
903 : 0 : _q70 = do_valueize (valueize, _q70);
904 : 0 : {
905 : 0 : tree captures[7] ATTRIBUTE_UNUSED = { _q20, _q50, _q70, _p0, _q21, _p1, _p2 };
906 : 0 : if (SCALAR_FLOAT_TYPE_P (type) && !flag_trapping_math
907 : 0 : && INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
908 : 0 : && types_match (TREE_TYPE (captures[1]), TREE_TYPE (captures[2]))
909 : 0 : && !operand_equal_p (TYPE_SIZE (type), TYPE_SIZE (TREE_TYPE (captures[0])))
910 : 0 : && operand_equal_p (TYPE_SIZE (TREE_TYPE (captures[0])),
911 : 0 : TYPE_SIZE (TREE_TYPE (captures[1])))
912 : 0 : && single_use (captures[5])
913 : 0 : && single_use (captures[6])
914 : : )
915 : : {
916 : 0 : {
917 : 0 : res_ops[0] = captures[0];
918 : 0 : res_ops[1] = captures[1];
919 : 0 : res_ops[2] = captures[2];
920 : 0 : res_ops[3] = captures[3];
921 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 105, __FILE__, __LINE__, false);
922 : 0 : return true;
923 : : }
924 : : }
925 : : }
926 : 0 : break;
927 : : }
928 : : default:;
929 : : }
930 : : }
931 : : break;
932 : : default:;
933 : : }
934 : : break;
935 : : }
936 : 0 : case FIX_TRUNC_EXPR:
937 : 0 : {
938 : 0 : tree _q50 = gimple_assign_rhs1 (_a2);
939 : 0 : _q50 = do_valueize (valueize, _q50);
940 : 0 : switch (TREE_CODE (_p2))
941 : : {
942 : 0 : case SSA_NAME:
943 : 0 : if (gimple *_d3 = get_def (valueize, _p2))
944 : : {
945 : 0 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
946 : 0 : switch (gimple_assign_rhs_code (_a3))
947 : : {
948 : 0 : case FIX_TRUNC_EXPR:
949 : 0 : {
950 : 0 : tree _q70 = gimple_assign_rhs1 (_a3);
951 : 0 : _q70 = do_valueize (valueize, _q70);
952 : 0 : {
953 : 0 : tree captures[7] ATTRIBUTE_UNUSED = { _q20, _q50, _q70, _p0, _q21, _p1, _p2 };
954 : 0 : if (INTEGRAL_TYPE_P (type) && !flag_trapping_math
955 : 0 : && SCALAR_FLOAT_TYPE_P (TREE_TYPE (captures[1]))
956 : 0 : && types_match (TREE_TYPE (captures[1]), TREE_TYPE (captures[2]))
957 : 0 : && !operand_equal_p (TYPE_SIZE (type),
958 : 0 : TYPE_SIZE (TREE_TYPE (captures[0])))
959 : 0 : && operand_equal_p (TYPE_SIZE (TREE_TYPE (captures[0])),
960 : 0 : TYPE_SIZE (TREE_TYPE (captures[1])))
961 : 0 : && single_use (captures[5])
962 : 0 : && single_use (captures[6])
963 : : )
964 : : {
965 : 0 : {
966 : 0 : res_ops[0] = captures[0];
967 : 0 : res_ops[1] = captures[1];
968 : 0 : res_ops[2] = captures[2];
969 : 0 : res_ops[3] = captures[3];
970 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 106, __FILE__, __LINE__, false);
971 : 0 : return true;
972 : : }
973 : : }
974 : : }
975 : 0 : break;
976 : : }
977 : : default:;
978 : : }
979 : : }
980 : : break;
981 : : default:;
982 : : }
983 : : break;
984 : : }
985 : : default:;
986 : : }
987 : : }
988 : : break;
989 : 0 : case REAL_CST:
990 : 0 : {
991 : 0 : switch (TREE_CODE (_p2))
992 : : {
993 : 0 : case SSA_NAME:
994 : 0 : if (gimple *_d2 = get_def (valueize, _p2))
995 : : {
996 : 0 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
997 : 0 : switch (gimple_assign_rhs_code (_a2))
998 : : {
999 : 0 : CASE_CONVERT:
1000 : 0 : {
1001 : 0 : tree _q60 = gimple_assign_rhs1 (_a2);
1002 : 0 : _q60 = do_valueize (valueize, _q60);
1003 : 0 : {
1004 : 0 : tree captures[6] ATTRIBUTE_UNUSED = { _q20, _p1, _q60, _p0, _q21, _p2 };
1005 : 0 : if (!flag_trapping_math
1006 : 0 : && SCALAR_FLOAT_TYPE_P (type)
1007 : 0 : && SCALAR_FLOAT_TYPE_P (TREE_TYPE (captures[2]))
1008 : 0 : && !operand_equal_p (TYPE_SIZE (type),
1009 : 0 : TYPE_SIZE (TREE_TYPE (captures[0])))
1010 : 0 : && operand_equal_p (TYPE_SIZE (TREE_TYPE (captures[0])),
1011 : 0 : TYPE_SIZE (TREE_TYPE (captures[2])))
1012 : 0 : && single_use (captures[5])
1013 : 0 : && (flag_unsafe_math_optimizations
1014 : 0 : || exact_real_truncate (TYPE_MODE (TREE_TYPE (captures[2])),
1015 : 0 : &TREE_REAL_CST (captures[1])))
1016 : : )
1017 : : {
1018 : 0 : {
1019 : 0 : res_ops[0] = captures[0];
1020 : 0 : res_ops[1] = captures[1];
1021 : 0 : res_ops[2] = captures[2];
1022 : 0 : res_ops[3] = captures[3];
1023 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 107, __FILE__, __LINE__, false);
1024 : 0 : return true;
1025 : : }
1026 : : }
1027 : : }
1028 : 0 : break;
1029 : : }
1030 : : default:;
1031 : : }
1032 : : }
1033 : : break;
1034 : : default:;
1035 : : }
1036 : : break;
1037 : : }
1038 : : default:;
1039 : : }
1040 : : }
1041 : : }
1042 : : break;
1043 : : }
1044 : : default:;
1045 : : }
1046 : : break;
1047 : : }
1048 : : default:;
1049 : : }
1050 : : }
1051 : : break;
1052 : : default:;
1053 : : }
1054 : : return false;
1055 : : }
1056 : :
1057 : : bool
1058 : 1 : gimple_simplify_7 (gimple_match_op *res_op, gimple_seq *seq,
1059 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
1060 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
1061 : : {
1062 : 1 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1063 : 1 : gimple_seq *lseq = seq;
1064 : 1 : if (lseq
1065 : 1 : && (!single_use (captures[0])))
1066 : 0 : lseq = NULL;
1067 : 1 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail551;
1068 : 1 : {
1069 : 1 : res_op->set_op (BIT_IOR_EXPR, type, 2);
1070 : 1 : res_op->ops[0] = captures[1];
1071 : 1 : res_op->ops[1] = captures[2];
1072 : 1 : res_op->resimplify (lseq, valueize);
1073 : 1 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 116, __FILE__, __LINE__, true);
1074 : : return true;
1075 : : }
1076 : 0 : next_after_fail551:;
1077 : 0 : return false;
1078 : : }
1079 : :
1080 : : bool
1081 : 19 : gimple_simplify_9 (gimple_match_op *res_op, gimple_seq *seq,
1082 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
1083 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
1084 : : const enum tree_code ARG_UNUSED (bit_op))
1085 : : {
1086 : 19 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1087 : 19 : if (bit_op == BIT_AND_EXPR
1088 : : )
1089 : : {
1090 : 19 : gimple_seq *lseq = seq;
1091 : 19 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail554;
1092 : 19 : {
1093 : 19 : tree tem;
1094 : 19 : tem = build_zero_cst (type);
1095 : 19 : res_op->set_value (tem);
1096 : 19 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 117, __FILE__, __LINE__, true);
1097 : 19 : return true;
1098 : : }
1099 : 0 : next_after_fail554:;
1100 : : }
1101 : : else
1102 : : {
1103 : 0 : gimple_seq *lseq = seq;
1104 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail555;
1105 : 0 : {
1106 : 0 : tree tem;
1107 : 0 : tem = build_minus_one_cst (type);
1108 : 0 : res_op->set_value (tem);
1109 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 118, __FILE__, __LINE__, true);
1110 : 0 : return true;
1111 : : }
1112 : 0 : next_after_fail555:;
1113 : : }
1114 : : return false;
1115 : : }
1116 : :
1117 : : bool
1118 : 6 : gimple_simplify_11 (gimple_match_op *res_op, gimple_seq *seq,
1119 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
1120 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
1121 : : const enum tree_code ARG_UNUSED (bit_op))
1122 : : {
1123 : 6 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1124 : 6 : if (bit_op == BIT_AND_EXPR
1125 : : )
1126 : : {
1127 : 2 : gimple_seq *lseq = seq;
1128 : 2 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail558;
1129 : 2 : {
1130 : 2 : tree tem;
1131 : 2 : tem = build_zero_cst (type);
1132 : 2 : res_op->set_value (tem);
1133 : 2 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 119, __FILE__, __LINE__, true);
1134 : 2 : return true;
1135 : : }
1136 : 0 : next_after_fail558:;
1137 : : }
1138 : : else
1139 : : {
1140 : 4 : gimple_seq *lseq = seq;
1141 : 4 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail559;
1142 : 4 : {
1143 : 4 : tree tem;
1144 : 4 : tem = build_minus_one_cst (type);
1145 : 4 : res_op->set_value (tem);
1146 : 4 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 120, __FILE__, __LINE__, true);
1147 : 4 : return true;
1148 : : }
1149 : 0 : next_after_fail559:;
1150 : : }
1151 : : return false;
1152 : : }
1153 : :
1154 : : bool
1155 : 1837 : gimple_simplify_13 (gimple_match_op *res_op, gimple_seq *seq,
1156 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
1157 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
1158 : : {
1159 : 1837 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1160 : 1837 : gimple_seq *lseq = seq;
1161 : 1837 : if (lseq
1162 : 733 : && (!single_use (captures[0])
1163 : 692 : || !single_use (captures[1])))
1164 : 1203 : lseq = NULL;
1165 : 1837 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail561;
1166 : 1837 : {
1167 : 1837 : res_op->set_op (BIT_XOR_EXPR, type, 2);
1168 : 1837 : {
1169 : 1837 : tree _o1[2], _r1;
1170 : 1837 : _o1[0] = captures[2];
1171 : 1837 : _o1[1] = captures[3];
1172 : 1837 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_AND_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
1173 : 1837 : tem_op.resimplify (lseq, valueize);
1174 : 1837 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
1175 : 1837 : if (!_r1) goto next_after_fail561;
1176 : 640 : res_op->ops[0] = _r1;
1177 : : }
1178 : 640 : {
1179 : 640 : tree _o1[2], _r1;
1180 : 640 : _o1[0] = captures[4];
1181 : 640 : _o1[1] = captures[3];
1182 : 640 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_XOR_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
1183 : 640 : tem_op.resimplify (NULL, valueize);
1184 : 640 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
1185 : 640 : if (!_r1) goto next_after_fail561;
1186 : 2 : res_op->ops[1] = _r1;
1187 : : }
1188 : 2 : res_op->resimplify (lseq, valueize);
1189 : 2 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 122, __FILE__, __LINE__, true);
1190 : : return true;
1191 : : }
1192 : : next_after_fail561:;
1193 : : return false;
1194 : : }
1195 : :
1196 : : bool
1197 : 0 : gimple_simplify_16 (gimple_match_op *res_op, gimple_seq *seq,
1198 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
1199 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
1200 : : {
1201 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1202 : 0 : gimple_seq *lseq = seq;
1203 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail564;
1204 : 0 : {
1205 : 0 : res_op->set_op (BIT_XOR_EXPR, type, 2);
1206 : 0 : res_op->ops[0] = captures[0];
1207 : 0 : res_op->ops[1] = captures[1];
1208 : 0 : res_op->resimplify (lseq, valueize);
1209 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 125, __FILE__, __LINE__, true);
1210 : : return true;
1211 : : }
1212 : 0 : next_after_fail564:;
1213 : 0 : return false;
1214 : : }
1215 : :
1216 : : bool
1217 : 8 : gimple_simplify_19 (gimple_match_op *res_op, gimple_seq *seq,
1218 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
1219 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
1220 : : {
1221 : 8 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1222 : 8 : gimple_seq *lseq = seq;
1223 : 8 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail567;
1224 : 8 : {
1225 : 8 : res_op->set_op (BIT_XOR_EXPR, type, 2);
1226 : 8 : res_op->ops[0] = captures[0];
1227 : 8 : res_op->ops[1] = captures[1];
1228 : 8 : res_op->resimplify (lseq, valueize);
1229 : 8 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 128, __FILE__, __LINE__, true);
1230 : : return true;
1231 : : }
1232 : 0 : next_after_fail567:;
1233 : 0 : return false;
1234 : : }
1235 : :
1236 : : bool
1237 : 160 : gimple_simplify_21 (gimple_match_op *res_op, gimple_seq *seq,
1238 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
1239 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
1240 : : {
1241 : 160 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1242 : 160 : if (tree_nop_conversion_p (type, TREE_TYPE (captures[0]))
1243 : : )
1244 : : {
1245 : 160 : gimple_seq *lseq = seq;
1246 : 160 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail569;
1247 : 160 : {
1248 : 160 : res_op->set_op (NOP_EXPR, type, 1);
1249 : 160 : {
1250 : 160 : tree _o1[2], _r1;
1251 : 160 : _o1[0] = captures[1];
1252 : 160 : {
1253 : 160 : tree _o2[1], _r2;
1254 : 160 : _o2[0] = captures[0];
1255 : 160 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_NOT_EXPR, TREE_TYPE (_o2[0]), _o2[0]);
1256 : 160 : tem_op.resimplify (lseq, valueize);
1257 : 160 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
1258 : 160 : if (!_r2) goto next_after_fail569;
1259 : 16 : _o1[1] = _r2;
1260 : : }
1261 : 16 : (*res_op).set_op (BIT_AND_EXPR, TREE_TYPE (_o1[0]), 2);
1262 : 16 : (*res_op).ops[0] = _o1[0];
1263 : 16 : (*res_op).ops[1] = _o1[1];
1264 : 16 : (*res_op).resimplify (lseq, valueize);
1265 : : }
1266 : 16 : if (type != res_op->type
1267 : 16 : && !useless_type_conversion_p (type, res_op->type))
1268 : : {
1269 : 0 : if (!(res_op->ops[0] = maybe_push_res_to_seq (res_op, lseq))) goto next_after_fail569;
1270 : 0 : res_op->set_op (NOP_EXPR, type, 1);
1271 : 0 : res_op->resimplify (lseq, valueize);
1272 : : }
1273 : 16 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 130, __FILE__, __LINE__, true);
1274 : 16 : return true;
1275 : : }
1276 : : next_after_fail569:;
1277 : : }
1278 : : return false;
1279 : : }
1280 : :
1281 : : bool
1282 : 75 : gimple_simplify_25 (gimple_match_op *res_op, gimple_seq *seq,
1283 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
1284 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
1285 : : {
1286 : 75 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1287 : 75 : if (element_precision (type) <= element_precision (TREE_TYPE (captures[0]))
1288 : 75 : && element_precision (type) <= element_precision (TREE_TYPE (captures[1]))
1289 : : )
1290 : : {
1291 : 75 : gimple_seq *lseq = seq;
1292 : 75 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail573;
1293 : 75 : {
1294 : 75 : res_op->set_op (BIT_XOR_EXPR, type, 2);
1295 : 75 : {
1296 : 75 : tree _o1[1], _r1;
1297 : 75 : _o1[0] = captures[0];
1298 : 75 : if (type != TREE_TYPE (_o1[0]) /* XXX */
1299 : 75 : && !useless_type_conversion_p (type, TREE_TYPE (_o1[0])))
1300 : : {
1301 : 28 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, type, _o1[0]);
1302 : 28 : tem_op.resimplify (lseq, valueize);
1303 : 28 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
1304 : 28 : if (!_r1) goto next_after_fail573;
1305 : : }
1306 : : else
1307 : : _r1 = _o1[0];
1308 : 47 : res_op->ops[0] = _r1;
1309 : : }
1310 : 47 : {
1311 : 47 : tree _o1[1], _r1;
1312 : 47 : _o1[0] = captures[1];
1313 : 47 : if (type != TREE_TYPE (_o1[0]) /* XXX */
1314 : 47 : && !useless_type_conversion_p (type, TREE_TYPE (_o1[0])))
1315 : : {
1316 : 9 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, type, _o1[0]);
1317 : 9 : tem_op.resimplify (lseq, valueize);
1318 : 9 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
1319 : 9 : if (!_r1) goto next_after_fail573;
1320 : : }
1321 : : else
1322 : : _r1 = _o1[0];
1323 : 47 : res_op->ops[1] = _r1;
1324 : : }
1325 : 47 : res_op->resimplify (lseq, valueize);
1326 : 47 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 134, __FILE__, __LINE__, true);
1327 : 47 : return true;
1328 : : }
1329 : : next_after_fail573:;
1330 : : }
1331 : : return false;
1332 : : }
1333 : :
1334 : : bool
1335 : 2865 : gimple_simplify_29 (gimple_match_op *res_op, gimple_seq *seq,
1336 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
1337 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
1338 : : const enum tree_code ARG_UNUSED (op),
1339 : : const enum tree_code ARG_UNUSED (rop))
1340 : : {
1341 : 2865 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1342 : 2865 : if (tree_nop_conversion_p (type, TREE_TYPE (captures[1]))
1343 : 2865 : && tree_nop_conversion_p (type, TREE_TYPE (captures[2]))
1344 : : )
1345 : : {
1346 : 2855 : gimple_seq *lseq = seq;
1347 : 2855 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail577;
1348 : 2855 : {
1349 : 2855 : res_op->set_op (rop, type, 2);
1350 : 2855 : {
1351 : 2855 : tree _o1[1], _r1;
1352 : 2855 : _o1[0] = captures[0];
1353 : 2855 : if (type != TREE_TYPE (_o1[0]) /* XXX */
1354 : 2855 : && !useless_type_conversion_p (type, TREE_TYPE (_o1[0])))
1355 : : {
1356 : 5 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, type, _o1[0]);
1357 : 5 : tem_op.resimplify (lseq, valueize);
1358 : 5 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
1359 : 5 : if (!_r1) goto next_after_fail577;
1360 : : }
1361 : : else
1362 : : _r1 = _o1[0];
1363 : 2855 : res_op->ops[0] = _r1;
1364 : : }
1365 : 2855 : {
1366 : 2855 : tree _o1[2], _r1;
1367 : 2855 : {
1368 : 2855 : tree _o2[1], _r2;
1369 : 2855 : _o2[0] = captures[1];
1370 : 2855 : if (type != TREE_TYPE (_o2[0]) /* XXX */
1371 : 2855 : && !useless_type_conversion_p (type, TREE_TYPE (_o2[0])))
1372 : : {
1373 : 5 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, type, _o2[0]);
1374 : 5 : tem_op.resimplify (lseq, valueize);
1375 : 5 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
1376 : 5 : if (!_r2) goto next_after_fail577;
1377 : : }
1378 : : else
1379 : : _r2 = _o2[0];
1380 : 2855 : _o1[0] = _r2;
1381 : : }
1382 : 2855 : {
1383 : 2855 : tree _o2[1], _r2;
1384 : 2855 : _o2[0] = captures[2];
1385 : 2855 : if (type != TREE_TYPE (_o2[0]) /* XXX */
1386 : 2855 : && !useless_type_conversion_p (type, TREE_TYPE (_o2[0])))
1387 : : {
1388 : 5 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, type, _o2[0]);
1389 : 5 : tem_op.resimplify (lseq, valueize);
1390 : 5 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
1391 : 5 : if (!_r2) goto next_after_fail577;
1392 : : }
1393 : : else
1394 : : _r2 = _o2[0];
1395 : 2855 : _o1[1] = _r2;
1396 : : }
1397 : 2855 : gimple_match_op tem_op (res_op->cond.any_else (), op, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
1398 : 2855 : tem_op.resimplify (lseq, valueize);
1399 : 2855 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
1400 : 2855 : if (!_r1) goto next_after_fail577;
1401 : 2218 : res_op->ops[1] = _r1;
1402 : : }
1403 : 2218 : res_op->resimplify (lseq, valueize);
1404 : 2218 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 138, __FILE__, __LINE__, true);
1405 : 2218 : return true;
1406 : : }
1407 : : next_after_fail577:;
1408 : : }
1409 : : return false;
1410 : : }
1411 : :
1412 : : bool
1413 : 719227 : gimple_simplify_32 (gimple_match_op *res_op, gimple_seq *seq,
1414 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
1415 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
1416 : : const enum tree_code ARG_UNUSED (bitop))
1417 : : {
1418 : 719227 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1419 : 719227 : if (((TREE_CODE (captures[3]) == INTEGER_CST
1420 : 417311 : && INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
1421 : 368683 : && (int_fits_type_p (captures[3], TREE_TYPE (captures[1]))
1422 : 35882 : || tree_nop_conversion_p (TREE_TYPE (captures[1]), type)))
1423 : 365747 : || types_match (captures[1], captures[3]))
1424 : 353480 : && !POINTER_TYPE_P (TREE_TYPE (captures[1]))
1425 : 353480 : && !VECTOR_TYPE_P (TREE_TYPE (captures[1]))
1426 : 353480 : && TREE_CODE (TREE_TYPE (captures[1])) != OFFSET_TYPE
1427 : : && (bitop != BIT_AND_EXPR ||
1428 : : 1
1429 : : )
1430 : 719227 : && (
1431 : 353480 : TYPE_PRECISION (TREE_TYPE (captures[1])) < TYPE_PRECISION (type)
1432 : 321416 : || (
1433 : : 1
1434 : 321416 : && TYPE_PRECISION (TREE_TYPE (captures[1])) == TYPE_PRECISION (type))
1435 : 270090 : || GET_MODE_CLASS (TYPE_MODE (type)) != MODE_INT
1436 : 270090 : || !type_has_mode_precision_p (type)
1437 : 270076 : || (
1438 : : 1
1439 : 270076 : && TREE_CODE (captures[3]) != INTEGER_CST
1440 : 0 : && tree_nop_conversion_p (type, TREE_TYPE (captures[1]))
1441 : 0 : && single_use (captures[0])
1442 : 0 : && single_use (captures[2])))
1443 : : )
1444 : : {
1445 : 83404 : gimple_seq *lseq = seq;
1446 : 83404 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail580;
1447 : 83404 : {
1448 : 83404 : res_op->set_op (NOP_EXPR, type, 1);
1449 : 83404 : {
1450 : 83404 : tree _o1[2], _r1;
1451 : 83404 : _o1[0] = captures[1];
1452 : 83404 : {
1453 : 83404 : tree _o2[1], _r2;
1454 : 83404 : _o2[0] = captures[3];
1455 : 83404 : if (TREE_TYPE (_o1[0]) != TREE_TYPE (_o2[0]) /* XXX */
1456 : 83404 : && !useless_type_conversion_p (TREE_TYPE (_o1[0]), TREE_TYPE (_o2[0])))
1457 : : {
1458 : 83404 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, TREE_TYPE (_o1[0]), _o2[0]);
1459 : 83404 : tem_op.resimplify (lseq, valueize);
1460 : 83404 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
1461 : 83404 : if (!_r2) goto next_after_fail580;
1462 : : }
1463 : : else
1464 : : _r2 = _o2[0];
1465 : 83404 : _o1[1] = _r2;
1466 : : }
1467 : 83404 : (*res_op).set_op (bitop, TREE_TYPE (_o1[0]), 2);
1468 : 83404 : (*res_op).ops[0] = _o1[0];
1469 : 83404 : (*res_op).ops[1] = _o1[1];
1470 : 83404 : (*res_op).resimplify (lseq, valueize);
1471 : : }
1472 : 83404 : if (type != res_op->type
1473 : 83404 : && !useless_type_conversion_p (type, res_op->type))
1474 : : {
1475 : 83404 : if (!(res_op->ops[0] = maybe_push_res_to_seq (res_op, lseq))) goto next_after_fail580;
1476 : 35703 : res_op->set_op (NOP_EXPR, type, 1);
1477 : 35703 : res_op->resimplify (lseq, valueize);
1478 : : }
1479 : 35703 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 140, __FILE__, __LINE__, true);
1480 : 35703 : return true;
1481 : : }
1482 : : next_after_fail580:;
1483 : : }
1484 : : return false;
1485 : : }
1486 : :
1487 : : bool
1488 : 1 : gimple_simplify_40 (gimple_match_op *res_op, gimple_seq *seq,
1489 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
1490 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
1491 : : const enum tree_code ARG_UNUSED (op))
1492 : : {
1493 : 1 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1494 : 2 : if (INTEGRAL_TYPE_P (type)
1495 : 3 : && (tree_nonzero_bits (captures[0]) & tree_nonzero_bits (captures[2])) == 0
1496 : : )
1497 : : {
1498 : 1 : {
1499 : 1 : tree t = type;
1500 : 1 : if (!TYPE_OVERFLOW_WRAPS (t))
1501 : 1 : t = unsigned_type_for (t);
1502 : 1 : wide_int c = wi::add (wi::to_wide (captures[3]), 1);
1503 : 1 : gimple_seq *lseq = seq;
1504 : 1 : if (lseq
1505 : 1 : && (!single_use (captures[0])
1506 : 1 : || !single_use (captures[1])))
1507 : 0 : lseq = NULL;
1508 : 1 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail590;
1509 : 1 : {
1510 : 1 : res_op->set_op (NOP_EXPR, type, 1);
1511 : 1 : {
1512 : 1 : tree _o1[2], _r1;
1513 : 1 : {
1514 : 1 : tree _o2[1], _r2;
1515 : 1 : _o2[0] = captures[2];
1516 : 1 : if (t != TREE_TYPE (_o2[0]) /* XXX */
1517 : 1 : && !useless_type_conversion_p (t, TREE_TYPE (_o2[0])))
1518 : : {
1519 : 1 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, t, _o2[0]);
1520 : 1 : tem_op.resimplify (lseq, valueize);
1521 : 1 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
1522 : 1 : if (!_r2) goto next_after_fail590;
1523 : : }
1524 : : else
1525 : : _r2 = _o2[0];
1526 : 1 : _o1[0] = _r2;
1527 : : }
1528 : 1 : _o1[1] = wide_int_to_tree (t, c);
1529 : 1 : (*res_op).set_op (MULT_EXPR, t, 2);
1530 : 1 : (*res_op).ops[0] = _o1[0];
1531 : 1 : (*res_op).ops[1] = _o1[1];
1532 : 1 : (*res_op).resimplify (lseq, valueize);
1533 : : }
1534 : 1 : if (type != res_op->type
1535 : 1 : && !useless_type_conversion_p (type, res_op->type))
1536 : : {
1537 : 1 : if (!(res_op->ops[0] = maybe_push_res_to_seq (res_op, lseq))) goto next_after_fail590;
1538 : 1 : res_op->set_op (NOP_EXPR, type, 1);
1539 : 1 : res_op->resimplify (lseq, valueize);
1540 : : }
1541 : 1 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 149, __FILE__, __LINE__, true);
1542 : 1 : return true;
1543 : : }
1544 : 0 : next_after_fail590:;
1545 : 1 : }
1546 : : }
1547 : : return false;
1548 : : }
1549 : :
1550 : : bool
1551 : 680 : gimple_simplify_42 (gimple_match_op *res_op, gimple_seq *seq,
1552 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
1553 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
1554 : : const enum tree_code ARG_UNUSED (op))
1555 : : {
1556 : 680 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1557 : 1360 : if (INTEGRAL_TYPE_P (type)
1558 : 680 : && operand_equal_p (captures[2], captures[6], 0)
1559 : 1456 : && (tree_nonzero_bits (captures[0]) & tree_nonzero_bits (captures[4])) == 0
1560 : : )
1561 : : {
1562 : 10 : {
1563 : 10 : tree t = type;
1564 : 10 : if (!TYPE_OVERFLOW_WRAPS (t))
1565 : 0 : t = unsigned_type_for (t);
1566 : 10 : wide_int c = wi::add (wi::to_wide (captures[3]), wi::to_wide (captures[7]));
1567 : 10 : gimple_seq *lseq = seq;
1568 : 10 : if (lseq
1569 : 4 : && (!single_use (captures[0])
1570 : 4 : || !single_use (captures[1])
1571 : 4 : || !single_use (captures[4])
1572 : 4 : || !single_use (captures[5])))
1573 : 6 : lseq = NULL;
1574 : 10 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail593;
1575 : 10 : {
1576 : 10 : res_op->set_op (NOP_EXPR, type, 1);
1577 : 10 : {
1578 : 10 : tree _o1[2], _r1;
1579 : 10 : {
1580 : 10 : tree _o2[1], _r2;
1581 : 10 : _o2[0] = captures[2];
1582 : 10 : if (t != TREE_TYPE (_o2[0]) /* XXX */
1583 : 10 : && !useless_type_conversion_p (t, TREE_TYPE (_o2[0])))
1584 : : {
1585 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, t, _o2[0]);
1586 : 0 : tem_op.resimplify (lseq, valueize);
1587 : 0 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
1588 : 0 : if (!_r2) goto next_after_fail593;
1589 : : }
1590 : : else
1591 : : _r2 = _o2[0];
1592 : 10 : _o1[0] = _r2;
1593 : : }
1594 : 10 : _o1[1] = wide_int_to_tree (t, c);
1595 : 10 : (*res_op).set_op (MULT_EXPR, t, 2);
1596 : 10 : (*res_op).ops[0] = _o1[0];
1597 : 10 : (*res_op).ops[1] = _o1[1];
1598 : 10 : (*res_op).resimplify (lseq, valueize);
1599 : : }
1600 : 10 : if (type != res_op->type
1601 : 10 : && !useless_type_conversion_p (type, res_op->type))
1602 : : {
1603 : 0 : if (!(res_op->ops[0] = maybe_push_res_to_seq (res_op, lseq))) goto next_after_fail593;
1604 : 0 : res_op->set_op (NOP_EXPR, type, 1);
1605 : 0 : res_op->resimplify (lseq, valueize);
1606 : : }
1607 : 10 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 147, __FILE__, __LINE__, true);
1608 : 10 : return true;
1609 : : }
1610 : 0 : next_after_fail593:;
1611 : 10 : }
1612 : : }
1613 : : return false;
1614 : : }
1615 : :
1616 : : bool
1617 : 2161 : gimple_simplify_47 (gimple_match_op *res_op, gimple_seq *seq,
1618 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
1619 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
1620 : : const enum tree_code ARG_UNUSED (op))
1621 : : {
1622 : 2161 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1623 : 4322 : if (INTEGRAL_TYPE_P (type)
1624 : 2042 : && tree_int_cst_sgn (captures[2]) > 0
1625 : 8406 : && (tree_nonzero_bits (captures[0]) & tree_nonzero_bits (captures[1])) == 0
1626 : : )
1627 : : {
1628 : 193 : {
1629 : 193 : tree t = type;
1630 : 193 : if (!TYPE_OVERFLOW_WRAPS (t))
1631 : 4 : t = unsigned_type_for (t);
1632 : 193 : wide_int wone = wi::one (TYPE_PRECISION (t));
1633 : 193 : wide_int c = wi::add (wi::lshift (wone, wi::to_wide (captures[2])), wone);
1634 : 193 : gimple_seq *lseq = seq;
1635 : 193 : if (lseq
1636 : 191 : && (!single_use (captures[0])))
1637 : 2 : lseq = NULL;
1638 : 193 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail598;
1639 : 193 : {
1640 : 193 : res_op->set_op (NOP_EXPR, type, 1);
1641 : 193 : {
1642 : 193 : tree _o1[2], _r1;
1643 : 193 : {
1644 : 193 : tree _o2[1], _r2;
1645 : 193 : _o2[0] = captures[1];
1646 : 193 : if (t != TREE_TYPE (_o2[0]) /* XXX */
1647 : 193 : && !useless_type_conversion_p (t, TREE_TYPE (_o2[0])))
1648 : : {
1649 : 4 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, t, _o2[0]);
1650 : 4 : tem_op.resimplify (lseq, valueize);
1651 : 4 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
1652 : 4 : if (!_r2) goto next_after_fail598;
1653 : : }
1654 : : else
1655 : : _r2 = _o2[0];
1656 : 192 : _o1[0] = _r2;
1657 : : }
1658 : 192 : _o1[1] = wide_int_to_tree (t, c);
1659 : 192 : (*res_op).set_op (MULT_EXPR, t, 2);
1660 : 192 : (*res_op).ops[0] = _o1[0];
1661 : 192 : (*res_op).ops[1] = _o1[1];
1662 : 192 : (*res_op).resimplify (lseq, valueize);
1663 : : }
1664 : 192 : if (type != res_op->type
1665 : 192 : && !useless_type_conversion_p (type, res_op->type))
1666 : : {
1667 : 3 : if (!(res_op->ops[0] = maybe_push_res_to_seq (res_op, lseq))) goto next_after_fail598;
1668 : 3 : res_op->set_op (NOP_EXPR, type, 1);
1669 : 3 : res_op->resimplify (lseq, valueize);
1670 : : }
1671 : 192 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 154, __FILE__, __LINE__, true);
1672 : 192 : return true;
1673 : : }
1674 : 1 : next_after_fail598:;
1675 : 193 : }
1676 : : }
1677 : : return false;
1678 : : }
1679 : :
1680 : : bool
1681 : 58 : gimple_simplify_52 (gimple_match_op *res_op, gimple_seq *seq,
1682 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
1683 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
1684 : : {
1685 : 58 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1686 : 58 : if (canonicalize_math_after_vectorization_p ()
1687 : 38 : && vectorized_internal_fn_supported_p (IFN_COND_NOT, type)
1688 : 0 : && is_truth_type_for (type, TREE_TYPE (captures[0]))
1689 : : )
1690 : : {
1691 : 0 : if (integer_all_onesp (captures[1]) && integer_zerop (captures[2])
1692 : : )
1693 : : {
1694 : 0 : gimple_seq *lseq = seq;
1695 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail605;
1696 : 0 : {
1697 : 0 : res_op->set_op (CFN_COND_NOT, type, 3);
1698 : 0 : res_op->ops[0] = captures[0];
1699 : 0 : res_op->ops[1] = captures[3];
1700 : 0 : res_op->ops[2] = captures[3];
1701 : 0 : res_op->resimplify (lseq, valueize);
1702 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 161, __FILE__, __LINE__, true);
1703 : 0 : return true;
1704 : : }
1705 : 0 : next_after_fail605:;
1706 : : }
1707 : : }
1708 : : else
1709 : : {
1710 : 58 : if (integer_all_onesp (captures[2]) && integer_zerop (captures[1])
1711 : : )
1712 : : {
1713 : 0 : gimple_seq *lseq = seq;
1714 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail606;
1715 : 0 : {
1716 : 0 : res_op->set_op (CFN_COND_NOT, type, 3);
1717 : 0 : {
1718 : 0 : tree _o1[1], _r1;
1719 : 0 : _o1[0] = captures[0];
1720 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_NOT_EXPR, TREE_TYPE (_o1[0]), _o1[0]);
1721 : 0 : tem_op.resimplify (lseq, valueize);
1722 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
1723 : 0 : if (!_r1) goto next_after_fail606;
1724 : 0 : res_op->ops[0] = _r1;
1725 : : }
1726 : 0 : res_op->ops[1] = captures[3];
1727 : 0 : res_op->ops[2] = captures[3];
1728 : 0 : res_op->resimplify (lseq, valueize);
1729 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 162, __FILE__, __LINE__, true);
1730 : 0 : return true;
1731 : : }
1732 : : next_after_fail606:;
1733 : : }
1734 : : }
1735 : : return false;
1736 : : }
1737 : :
1738 : : bool
1739 : 1017 : gimple_simplify_57 (gimple_match_op *res_op, gimple_seq *seq,
1740 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
1741 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
1742 : : {
1743 : 1017 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1744 : 2034 : if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
1745 : 1017 : && tree_fits_uhwi_p (captures[2])
1746 : 1017 : && tree_to_uhwi (captures[2]) < element_precision (type)
1747 : 2034 : && (INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
1748 : 805 : || optab_handler (smul_optab,
1749 : 805 : TYPE_MODE (type)) != CODE_FOR_nothing)
1750 : : )
1751 : : {
1752 : 212 : {
1753 : 212 : tree t = type;
1754 : 212 : if (!TYPE_OVERFLOW_WRAPS (t)) t = unsigned_type_for (t);
1755 : 424 : wide_int w = wi::set_bit_in_zero (tree_to_uhwi (captures[2]),
1756 : 212 : element_precision (type));
1757 : 212 : w += 1;
1758 : 424 : tree cst = wide_int_to_tree (VECTOR_TYPE_P (t) ? TREE_TYPE (t)
1759 : 212 : : t, w);
1760 : 212 : cst = build_uniform_cst (t, cst);
1761 : 212 : gimple_seq *lseq = seq;
1762 : 212 : if (lseq
1763 : 115 : && (!single_use (captures[1])))
1764 : 97 : lseq = NULL;
1765 : 212 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail612;
1766 : 212 : {
1767 : 212 : res_op->set_op (NOP_EXPR, type, 1);
1768 : 212 : {
1769 : 212 : tree _o1[2], _r1;
1770 : 212 : {
1771 : 212 : tree _o2[1], _r2;
1772 : 212 : _o2[0] = captures[0];
1773 : 212 : if (t != TREE_TYPE (_o2[0]) /* XXX */
1774 : 212 : && !useless_type_conversion_p (t, TREE_TYPE (_o2[0])))
1775 : : {
1776 : 39 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, t, _o2[0]);
1777 : 39 : tem_op.resimplify (lseq, valueize);
1778 : 39 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
1779 : 39 : if (!_r2) goto next_after_fail612;
1780 : : }
1781 : : else
1782 : : _r2 = _o2[0];
1783 : 191 : _o1[0] = _r2;
1784 : : }
1785 : 191 : _o1[1] = cst;
1786 : 191 : (*res_op).set_op (MULT_EXPR, TREE_TYPE (_o1[0]), 2);
1787 : 191 : (*res_op).ops[0] = _o1[0];
1788 : 191 : (*res_op).ops[1] = _o1[1];
1789 : 191 : (*res_op).resimplify (lseq, valueize);
1790 : : }
1791 : 191 : if (type != res_op->type
1792 : 191 : && !useless_type_conversion_p (type, res_op->type))
1793 : : {
1794 : 18 : if (!(res_op->ops[0] = maybe_push_res_to_seq (res_op, lseq))) goto next_after_fail612;
1795 : 18 : res_op->set_op (NOP_EXPR, type, 1);
1796 : 18 : res_op->resimplify (lseq, valueize);
1797 : : }
1798 : 191 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 168, __FILE__, __LINE__, true);
1799 : 191 : return true;
1800 : : }
1801 : 21 : next_after_fail612:;
1802 : 212 : }
1803 : : }
1804 : : return false;
1805 : : }
1806 : :
1807 : : bool
1808 : 101600 : gimple_simplify_62 (gimple_match_op *res_op, gimple_seq *seq,
1809 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
1810 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
1811 : : {
1812 : 101600 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1813 : 101600 : if (!TYPE_SATURATING (type)
1814 : : )
1815 : : {
1816 : 101600 : if ((!FLOAT_TYPE_P (type) || flag_associative_math)
1817 : 202374 : && !FIXED_POINT_TYPE_P (type)
1818 : : )
1819 : : {
1820 : 100774 : gimple_seq *lseq = seq;
1821 : 100774 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail618;
1822 : 100774 : {
1823 : 100774 : res_op->set_op (VIEW_CONVERT_EXPR, type, 1);
1824 : 100774 : res_op->ops[0] = captures[0];
1825 : 100774 : res_op->resimplify (lseq, valueize);
1826 : 100774 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 174, __FILE__, __LINE__, true);
1827 : 100774 : return true;
1828 : : }
1829 : 0 : next_after_fail618:;
1830 : : }
1831 : : }
1832 : : return false;
1833 : : }
1834 : :
1835 : : bool
1836 : 31655 : gimple_simplify_65 (gimple_match_op *res_op, gimple_seq *seq,
1837 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
1838 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
1839 : : const enum tree_code ARG_UNUSED (outer_op))
1840 : : {
1841 : 31655 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1842 : 31655 : if (!TYPE_SATURATING (type)
1843 : : )
1844 : : {
1845 : 31655 : if ((!FLOAT_TYPE_P (type) || flag_associative_math)
1846 : 62130 : && !FIXED_POINT_TYPE_P (type)
1847 : : )
1848 : : {
1849 : 30475 : if (!ANY_INTEGRAL_TYPE_P (type) || TYPE_OVERFLOW_WRAPS (type)
1850 : : )
1851 : : {
1852 : 22307 : if (!CONSTANT_CLASS_P (captures[1])
1853 : : )
1854 : : {
1855 : 22307 : gimple_seq *lseq = seq;
1856 : 22307 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail627;
1857 : 22307 : {
1858 : 22307 : res_op->set_op (MINUS_EXPR, type, 2);
1859 : 22307 : {
1860 : 22307 : tree _o1[2], _r1;
1861 : 22307 : {
1862 : 22307 : tree _o2[1], _r2;
1863 : 22307 : _o2[0] = captures[0];
1864 : 22307 : if (type != TREE_TYPE (_o2[0]) /* XXX */
1865 : 22307 : && !useless_type_conversion_p (type, TREE_TYPE (_o2[0])))
1866 : : {
1867 : 2629 : gimple_match_op tem_op (res_op->cond.any_else (), VIEW_CONVERT_EXPR, type, _o2[0]);
1868 : 2629 : tem_op.resimplify (lseq, valueize);
1869 : 2629 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
1870 : 2629 : if (!_r2) goto next_after_fail627;
1871 : : }
1872 : : else
1873 : : _r2 = _o2[0];
1874 : 22307 : _o1[0] = _r2;
1875 : : }
1876 : 22307 : _o1[1] = captures[2];
1877 : 22307 : gimple_match_op tem_op (res_op->cond.any_else (), outer_op, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
1878 : 22307 : tem_op.resimplify (NULL, valueize);
1879 : 22307 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
1880 : 22307 : if (!_r1) goto next_after_fail627;
1881 : 22307 : res_op->ops[0] = _r1;
1882 : : }
1883 : 22307 : {
1884 : 22307 : tree _o1[1], _r1;
1885 : 22307 : _o1[0] = captures[1];
1886 : 22307 : if (type != TREE_TYPE (_o1[0]) /* XXX */
1887 : 22307 : && !useless_type_conversion_p (type, TREE_TYPE (_o1[0])))
1888 : : {
1889 : 2629 : gimple_match_op tem_op (res_op->cond.any_else (), VIEW_CONVERT_EXPR, type, _o1[0]);
1890 : 2629 : tem_op.resimplify (lseq, valueize);
1891 : 2629 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
1892 : 2629 : if (!_r1) goto next_after_fail627;
1893 : : }
1894 : : else
1895 : : _r1 = _o1[0];
1896 : 21527 : res_op->ops[1] = _r1;
1897 : : }
1898 : 21527 : res_op->resimplify (lseq, valueize);
1899 : 21527 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 183, __FILE__, __LINE__, true);
1900 : 21527 : return true;
1901 : : }
1902 : : next_after_fail627:;
1903 : : }
1904 : : }
1905 : : else
1906 : : {
1907 : 16336 : if (!ANY_INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
1908 : 16336 : || TYPE_OVERFLOW_WRAPS (TREE_TYPE (captures[1]))
1909 : : )
1910 : : {
1911 : 497 : gimple_seq *lseq = seq;
1912 : 497 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail628;
1913 : 497 : {
1914 : 497 : res_op->set_op (VIEW_CONVERT_EXPR, type, 1);
1915 : 497 : {
1916 : 497 : tree _o1[2], _r1;
1917 : 497 : {
1918 : 497 : tree _o2[2], _r2;
1919 : 497 : _o2[0] = captures[0];
1920 : 497 : {
1921 : 497 : tree _o3[1], _r3;
1922 : 497 : _o3[0] = captures[2];
1923 : 497 : if (TREE_TYPE (_o2[0]) != TREE_TYPE (_o3[0]) /* XXX */
1924 : 497 : && !useless_type_conversion_p (TREE_TYPE (_o2[0]), TREE_TYPE (_o3[0])))
1925 : : {
1926 : 497 : gimple_match_op tem_op (res_op->cond.any_else (), VIEW_CONVERT_EXPR, TREE_TYPE (_o2[0]), _o3[0]);
1927 : 497 : tem_op.resimplify (lseq, valueize);
1928 : 497 : _r3 = maybe_push_res_to_seq (&tem_op, lseq);
1929 : 497 : if (!_r3) goto next_after_fail628;
1930 : : }
1931 : : else
1932 : : _r3 = _o3[0];
1933 : 497 : _o2[1] = _r3;
1934 : : }
1935 : 497 : gimple_match_op tem_op (res_op->cond.any_else (), outer_op, TREE_TYPE (_o2[0]), _o2[0], _o2[1]);
1936 : 497 : tem_op.resimplify (NULL, valueize);
1937 : 497 : _r2 = maybe_push_res_to_seq (&tem_op, NULL);
1938 : 497 : if (!_r2) goto next_after_fail628;
1939 : 497 : _o1[0] = _r2;
1940 : : }
1941 : 497 : _o1[1] = captures[1];
1942 : 497 : (*res_op).set_op (MINUS_EXPR, TREE_TYPE (_o1[0]), 2);
1943 : 497 : (*res_op).ops[0] = _o1[0];
1944 : 497 : (*res_op).ops[1] = _o1[1];
1945 : 497 : (*res_op).resimplify (lseq, valueize);
1946 : : }
1947 : 497 : if (type != res_op->type
1948 : 497 : && !useless_type_conversion_p (type, res_op->type))
1949 : : {
1950 : 497 : if (!(res_op->ops[0] = maybe_push_res_to_seq (res_op, lseq))) goto next_after_fail628;
1951 : 164 : res_op->set_op (VIEW_CONVERT_EXPR, type, 1);
1952 : 164 : res_op->resimplify (lseq, valueize);
1953 : : }
1954 : 164 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 184, __FILE__, __LINE__, true);
1955 : 164 : return true;
1956 : : }
1957 : : next_after_fail628:;
1958 : : }
1959 : : else
1960 : : {
1961 : 7671 : if (types_match (type, captures[1]) && !TYPE_OVERFLOW_SANITIZED (type)
1962 : : )
1963 : : {
1964 : 7664 : {
1965 : 7664 : tree cst = const_binop (outer_op, type, captures[0], captures[2]);
1966 : 7664 : if (cst && !TREE_OVERFLOW (cst)
1967 : : )
1968 : : {
1969 : 7658 : gimple_seq *lseq = seq;
1970 : 7658 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail629;
1971 : 7658 : {
1972 : 7658 : res_op->set_op (MINUS_EXPR, type, 2);
1973 : 7658 : res_op->ops[0] = cst;
1974 : 7658 : res_op->ops[1] = captures[1];
1975 : 7658 : res_op->resimplify (lseq, valueize);
1976 : 7658 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 185, __FILE__, __LINE__, true);
1977 : 7658 : return true;
1978 : : }
1979 : 0 : next_after_fail629:;
1980 : : }
1981 : : }
1982 : : }
1983 : : }
1984 : : }
1985 : : }
1986 : : }
1987 : : return false;
1988 : : }
1989 : :
1990 : : bool
1991 : 648143 : gimple_simplify_73 (gimple_match_op *res_op, gimple_seq *seq,
1992 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
1993 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
1994 : : const enum tree_code ARG_UNUSED (plusminus))
1995 : : {
1996 : 648143 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
1997 : 648143 : if (!TYPE_SATURATING (type)
1998 : 648143 : && (!FLOAT_TYPE_P (type) || flag_associative_math)
1999 : : )
2000 : : {
2001 : 375 : if (!ANY_INTEGRAL_TYPE_P (type)
2002 : 641553 : || TYPE_OVERFLOW_WRAPS (type)
2003 : 665459 : || (INTEGRAL_TYPE_P (type)
2004 : 23533 : && tree_expr_nonzero_p (captures[1])
2005 : 648519 : && expr_not_equal_to (captures[1], wi::minus_one (TYPE_PRECISION (type))))
2006 : : )
2007 : : {
2008 : 622883 : if (single_use (captures[0]) || single_use (captures[3])
2009 : : )
2010 : : {
2011 : 581526 : gimple_seq *lseq = seq;
2012 : 581526 : if (lseq
2013 : 11510 : && (!single_use (captures[0])
2014 : 10576 : || !single_use (captures[3])))
2015 : 574071 : lseq = NULL;
2016 : 581526 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail637;
2017 : 581526 : {
2018 : 581526 : res_op->set_op (MULT_EXPR, type, 2);
2019 : 581526 : {
2020 : 581526 : tree _o1[2], _r1;
2021 : 581526 : _o1[0] = captures[2];
2022 : 581526 : _o1[1] = captures[4];
2023 : 581526 : gimple_match_op tem_op (res_op->cond.any_else (), plusminus, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
2024 : 581526 : tem_op.resimplify (lseq, valueize);
2025 : 581526 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
2026 : 581526 : if (!_r1) goto next_after_fail637;
2027 : 24285 : res_op->ops[0] = _r1;
2028 : : }
2029 : 24285 : res_op->ops[1] = captures[1];
2030 : 24285 : res_op->resimplify (lseq, valueize);
2031 : 24285 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 193, __FILE__, __LINE__, true);
2032 : 24285 : return true;
2033 : : }
2034 : : next_after_fail637:;
2035 : : }
2036 : : else
2037 : : {
2038 : 41357 : gimple_seq *lseq = seq;
2039 : 41357 : if (lseq
2040 : : && (!single_use (captures[0])
2041 : : || !single_use (captures[3])))
2042 : 41357 : lseq = NULL;
2043 : 41357 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail638;
2044 : 41357 : {
2045 : 41357 : res_op->set_op (MULT_EXPR, type, 2);
2046 : 41357 : {
2047 : 41357 : tree _o1[2], _r1;
2048 : 41357 : _o1[0] = captures[2];
2049 : 41357 : _o1[1] = captures[4];
2050 : 41357 : gimple_match_op tem_op (res_op->cond.any_else (), plusminus, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
2051 : 41357 : tem_op.resimplify (lseq, valueize);
2052 : 41357 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
2053 : 41357 : if (!_r1) goto next_after_fail638;
2054 : 19582 : res_op->ops[0] = _r1;
2055 : : }
2056 : 19582 : res_op->ops[1] = captures[1];
2057 : 19582 : res_op->resimplify (NULL, valueize);
2058 : 19582 : if (!maybe_push_res_to_seq (res_op, NULL)) goto next_after_fail638;
2059 : 525 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 194, __FILE__, __LINE__, true);
2060 : 525 : return true;
2061 : : }
2062 : : next_after_fail638:;
2063 : : }
2064 : : }
2065 : : }
2066 : : return false;
2067 : : }
2068 : :
2069 : : bool
2070 : 18 : gimple_simplify_77 (gimple_match_op *res_op, gimple_seq *seq,
2071 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
2072 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
2073 : : {
2074 : 18 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2075 : 18 : if (INTEGRAL_TYPE_P (type)
2076 : : && (
2077 : : 1
2078 : : || !TREE_SIDE_EFFECTS (captures[1]))
2079 : : )
2080 : : {
2081 : 18 : gimple_seq *lseq = seq;
2082 : 18 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail642;
2083 : 18 : {
2084 : 18 : res_op->set_op (COND_EXPR, type, 3);
2085 : 18 : {
2086 : 18 : tree _o1[1], _r1;
2087 : 18 : _o1[0] = captures[2];
2088 : 18 : if (boolean_type_node != TREE_TYPE (_o1[0]) /* XXX */
2089 : 18 : && !useless_type_conversion_p (boolean_type_node, TREE_TYPE (_o1[0])))
2090 : : {
2091 : 18 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, boolean_type_node, _o1[0]);
2092 : 18 : tem_op.resimplify (lseq, valueize);
2093 : 18 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
2094 : 18 : if (!_r1) goto next_after_fail642;
2095 : : }
2096 : : else
2097 : : _r1 = _o1[0];
2098 : 18 : res_op->ops[0] = _r1;
2099 : : }
2100 : 18 : res_op->ops[1] = captures[1];
2101 : 18 : res_op->ops[2] = captures[0];
2102 : 18 : res_op->resimplify (lseq, valueize);
2103 : 18 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 198, __FILE__, __LINE__, true);
2104 : 18 : return true;
2105 : : }
2106 : : next_after_fail642:;
2107 : : }
2108 : : return false;
2109 : : }
2110 : :
2111 : : bool
2112 : 1206 : gimple_simplify_80 (gimple_match_op *res_op, gimple_seq *seq,
2113 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
2114 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
2115 : : const enum tree_code ARG_UNUSED (op))
2116 : : {
2117 : 1206 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2118 : 1206 : if (flag_unsafe_math_optimizations
2119 : : )
2120 : : {
2121 : 6 : gimple_seq *lseq = seq;
2122 : 6 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail645;
2123 : 6 : {
2124 : 6 : res_op->set_op (RDIV_EXPR, type, 2);
2125 : 6 : {
2126 : 6 : tree _o1[2], _r1;
2127 : 6 : _o1[0] = captures[0];
2128 : 6 : _o1[1] = captures[2];
2129 : 6 : gimple_match_op tem_op (res_op->cond.any_else (), op, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
2130 : 6 : tem_op.resimplify (lseq, valueize);
2131 : 6 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
2132 : 6 : if (!_r1) goto next_after_fail645;
2133 : 4 : res_op->ops[0] = _r1;
2134 : : }
2135 : 4 : res_op->ops[1] = captures[1];
2136 : 4 : res_op->resimplify (lseq, valueize);
2137 : 4 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 201, __FILE__, __LINE__, true);
2138 : 4 : return true;
2139 : : }
2140 : : next_after_fail645:;
2141 : : }
2142 : : return false;
2143 : : }
2144 : :
2145 : : bool
2146 : 596 : gimple_simplify_82 (gimple_match_op *res_op, gimple_seq *seq,
2147 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
2148 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
2149 : : const combined_fn ARG_UNUSED (POPCOUNT))
2150 : : {
2151 : 596 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2152 : 1192 : if (INTEGRAL_TYPE_P (type)
2153 : 2980 : && (wi::bit_and (widest_int::from (tree_nonzero_bits (captures[1]), UNSIGNED),
2154 : 2384 : widest_int::from (tree_nonzero_bits (captures[3]), UNSIGNED))
2155 : 1788 : == 0)
2156 : : )
2157 : : {
2158 : 3 : {
2159 : 3 : tree utype = TREE_TYPE (captures[1]);
2160 : 3 : if (TYPE_PRECISION (utype) < TYPE_PRECISION (TREE_TYPE (captures[3])))
2161 : 2 : utype = TREE_TYPE (captures[3]);
2162 : 3 : gimple_seq *lseq = seq;
2163 : 3 : if (lseq
2164 : 2 : && (!single_use (captures[0])
2165 : 2 : || !single_use (captures[2])))
2166 : 1 : lseq = NULL;
2167 : 3 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail647;
2168 : 3 : {
2169 : 3 : res_op->set_op (POPCOUNT, type, 1);
2170 : 3 : {
2171 : 3 : tree _o1[2], _r1;
2172 : 3 : {
2173 : 3 : tree _o2[1], _r2;
2174 : 3 : _o2[0] = captures[1];
2175 : 3 : if (utype != TREE_TYPE (_o2[0]) /* XXX */
2176 : 3 : && !useless_type_conversion_p (utype, TREE_TYPE (_o2[0])))
2177 : : {
2178 : 2 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, utype, _o2[0]);
2179 : 2 : tem_op.resimplify (lseq, valueize);
2180 : 2 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
2181 : 2 : if (!_r2) goto next_after_fail647;
2182 : : }
2183 : : else
2184 : : _r2 = _o2[0];
2185 : 2 : _o1[0] = _r2;
2186 : : }
2187 : 2 : {
2188 : 2 : tree _o2[1], _r2;
2189 : 2 : _o2[0] = captures[3];
2190 : 2 : if (utype != TREE_TYPE (_o2[0]) /* XXX */
2191 : 2 : && !useless_type_conversion_p (utype, TREE_TYPE (_o2[0])))
2192 : : {
2193 : 1 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, utype, _o2[0]);
2194 : 1 : tem_op.resimplify (lseq, valueize);
2195 : 1 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
2196 : 1 : if (!_r2) goto next_after_fail647;
2197 : : }
2198 : : else
2199 : : _r2 = _o2[0];
2200 : 2 : _o1[1] = _r2;
2201 : : }
2202 : 2 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_IOR_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
2203 : 2 : tem_op.resimplify (lseq, valueize);
2204 : 2 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
2205 : 2 : if (!_r1) goto next_after_fail647;
2206 : 2 : res_op->ops[0] = _r1;
2207 : : }
2208 : 2 : res_op->resimplify (lseq, valueize);
2209 : 2 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 203, __FILE__, __LINE__, true);
2210 : 2 : return true;
2211 : : }
2212 : : next_after_fail647:;
2213 : : }
2214 : : }
2215 : : return false;
2216 : : }
2217 : :
2218 : : bool
2219 : 3228 : gimple_simplify_88 (gimple_match_op *res_op, gimple_seq *seq,
2220 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
2221 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
2222 : : {
2223 : 3228 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2224 : 3228 : if (INTEGRAL_TYPE_P (type)
2225 : 3228 : || (VECTOR_INTEGER_TYPE_P (type)
2226 : : && ((optimize_vectors_before_lowering_p ()
2227 : 0 : && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST)
2228 : 0 : || target_supports_op_p (type, TRUNC_MOD_EXPR,
2229 : : optab_vector)))
2230 : : )
2231 : : {
2232 : 3228 : gimple_seq *lseq = seq;
2233 : 3228 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail653;
2234 : 3228 : {
2235 : 3228 : res_op->set_op (NOP_EXPR, type, 1);
2236 : 3228 : {
2237 : 3228 : tree _o1[2], _r1;
2238 : 3228 : _o1[0] = captures[0];
2239 : 3228 : _o1[1] = captures[1];
2240 : 3228 : (*res_op).set_op (TRUNC_MOD_EXPR, TREE_TYPE (_o1[0]), 2);
2241 : 3228 : (*res_op).ops[0] = _o1[0];
2242 : 3228 : (*res_op).ops[1] = _o1[1];
2243 : 3228 : (*res_op).resimplify (lseq, valueize);
2244 : : }
2245 : 3228 : if (type != res_op->type
2246 : 3228 : && !useless_type_conversion_p (type, res_op->type))
2247 : : {
2248 : 0 : if (!(res_op->ops[0] = maybe_push_res_to_seq (res_op, lseq))) goto next_after_fail653;
2249 : 0 : res_op->set_op (NOP_EXPR, type, 1);
2250 : 0 : res_op->resimplify (lseq, valueize);
2251 : : }
2252 : 3228 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 209, __FILE__, __LINE__, true);
2253 : 3228 : return true;
2254 : : }
2255 : : next_after_fail653:;
2256 : : }
2257 : : return false;
2258 : : }
2259 : :
2260 : : bool
2261 : 20 : gimple_simplify_92 (gimple_match_op *res_op, gimple_seq *seq,
2262 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
2263 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
2264 : : {
2265 : 20 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2266 : 20 : if (!TYPE_OVERFLOW_SANITIZED (type) && !TYPE_OVERFLOW_TRAPS (type)
2267 : 20 : && !TYPE_SATURATING (type) && !TYPE_OVERFLOW_SANITIZED (TREE_TYPE (captures[2]))
2268 : 20 : && !TYPE_OVERFLOW_TRAPS (TREE_TYPE (captures[2]))
2269 : 40 : && !TYPE_SATURATING (TREE_TYPE (captures[2]))
2270 : : )
2271 : : {
2272 : 20 : gimple_seq *lseq = seq;
2273 : 20 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail657;
2274 : 20 : {
2275 : 20 : res_op->set_op (BIT_NOT_EXPR, type, 1);
2276 : 20 : {
2277 : 20 : tree _r1;
2278 : 20 : gimple_match_op tem_op (res_op->cond.any_else (), ERROR_MARK, error_mark_node, 1);
2279 : 20 : {
2280 : 20 : tree _o2[2], _r2;
2281 : 20 : _o2[0] = captures[0];
2282 : 20 : _o2[1] = captures[1];
2283 : 20 : tem_op.set_op (BIT_XOR_EXPR, TREE_TYPE (_o2[0]), 2);
2284 : 20 : tem_op.ops[0] = _o2[0];
2285 : 20 : tem_op.ops[1] = _o2[1];
2286 : 20 : tem_op.resimplify (lseq, valueize);
2287 : : }
2288 : 20 : if (type != tem_op.type
2289 : 20 : && !useless_type_conversion_p (type, tem_op.type))
2290 : : {
2291 : 11 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
2292 : 16 : if (!_r1) goto next_after_fail657;
2293 : 6 : tem_op.set_op (NOP_EXPR, type, 1);
2294 : 6 : tem_op.ops[0] = _r1;
2295 : 6 : tem_op.resimplify (lseq, valueize);
2296 : : }
2297 : 15 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
2298 : 15 : if (!_r1) goto next_after_fail657;
2299 : 10 : res_op->ops[0] = _r1;
2300 : : }
2301 : 10 : res_op->resimplify (lseq, valueize);
2302 : 10 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 213, __FILE__, __LINE__, true);
2303 : 10 : return true;
2304 : : }
2305 : : next_after_fail657:;
2306 : : }
2307 : : return false;
2308 : : }
2309 : :
2310 : : bool
2311 : 1947 : gimple_simplify_97 (gimple_match_op *res_op, gimple_seq *seq,
2312 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
2313 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
2314 : : {
2315 : 1947 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2316 : 1947 : if (!TYPE_SATURATING (type)
2317 : : )
2318 : : {
2319 : 1947 : if (tree_nop_conversion_p (type, TREE_TYPE (captures[1]))
2320 : 1947 : && !TYPE_OVERFLOW_SANITIZED (type)
2321 : : )
2322 : : {
2323 : 127 : {
2324 : 127 : tree t1 = type;
2325 : 127 : if (INTEGRAL_TYPE_P (type)
2326 : 254 : && TYPE_OVERFLOW_WRAPS (type) != TYPE_OVERFLOW_WRAPS (TREE_TYPE (captures[1])))
2327 : 127 : t1 = TYPE_OVERFLOW_WRAPS (type) ? type : TREE_TYPE (captures[1]);
2328 : 127 : gimple_seq *lseq = seq;
2329 : 127 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail662;
2330 : 127 : {
2331 : 127 : res_op->set_op (NOP_EXPR, type, 1);
2332 : 127 : {
2333 : 127 : tree _o1[2], _r1;
2334 : 127 : {
2335 : 127 : tree _o2[1], _r2;
2336 : 127 : _o2[0] = captures[0];
2337 : 127 : if (t1 != TREE_TYPE (_o2[0]) /* XXX */
2338 : 127 : && !useless_type_conversion_p (t1, TREE_TYPE (_o2[0])))
2339 : : {
2340 : 6 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, t1, _o2[0]);
2341 : 6 : tem_op.resimplify (lseq, valueize);
2342 : 6 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
2343 : 6 : if (!_r2) goto next_after_fail662;
2344 : : }
2345 : : else
2346 : : _r2 = _o2[0];
2347 : 127 : _o1[0] = _r2;
2348 : : }
2349 : 127 : {
2350 : 127 : tree _o2[1], _r2;
2351 : 127 : _o2[0] = captures[1];
2352 : 127 : if (t1 != TREE_TYPE (_o2[0]) /* XXX */
2353 : 127 : && !useless_type_conversion_p (t1, TREE_TYPE (_o2[0])))
2354 : : {
2355 : 121 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, t1, _o2[0]);
2356 : 121 : tem_op.resimplify (lseq, valueize);
2357 : 121 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
2358 : 121 : if (!_r2) goto next_after_fail662;
2359 : : }
2360 : : else
2361 : : _r2 = _o2[0];
2362 : 41 : _o1[1] = _r2;
2363 : : }
2364 : 41 : (*res_op).set_op (PLUS_EXPR, TREE_TYPE (_o1[0]), 2);
2365 : 41 : (*res_op).ops[0] = _o1[0];
2366 : 41 : (*res_op).ops[1] = _o1[1];
2367 : 41 : (*res_op).resimplify (lseq, valueize);
2368 : : }
2369 : 41 : if (type != res_op->type
2370 : 41 : && !useless_type_conversion_p (type, res_op->type))
2371 : : {
2372 : 6 : if (!(res_op->ops[0] = maybe_push_res_to_seq (res_op, lseq))) goto next_after_fail662;
2373 : 6 : res_op->set_op (NOP_EXPR, type, 1);
2374 : 6 : res_op->resimplify (lseq, valueize);
2375 : : }
2376 : 41 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 217, __FILE__, __LINE__, true);
2377 : 41 : return true;
2378 : : }
2379 : : next_after_fail662:;
2380 : : }
2381 : : }
2382 : : }
2383 : : return false;
2384 : : }
2385 : :
2386 : : bool
2387 : 1668 : gimple_simplify_103 (gimple_match_op *res_op, gimple_seq *seq,
2388 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
2389 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
2390 : : {
2391 : 1668 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2392 : 1668 : if (!TYPE_SATURATING (type)
2393 : : )
2394 : : {
2395 : 1668 : if ((!FLOAT_TYPE_P (type) || flag_associative_math)
2396 : 2830 : && !FIXED_POINT_TYPE_P (type)
2397 : : )
2398 : : {
2399 : 1162 : if (!ANY_INTEGRAL_TYPE_P (type) || TYPE_OVERFLOW_WRAPS (type)
2400 : : )
2401 : : {
2402 : 284 : if (!CONSTANT_CLASS_P (captures[2])
2403 : : )
2404 : : {
2405 : 284 : gimple_seq *lseq = seq;
2406 : 284 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail670;
2407 : 284 : {
2408 : 284 : res_op->set_op (PLUS_EXPR, type, 2);
2409 : 284 : {
2410 : 284 : tree _o1[1], _r1;
2411 : 284 : _o1[0] = captures[2];
2412 : 284 : if (type != TREE_TYPE (_o1[0]) /* XXX */
2413 : 284 : && !useless_type_conversion_p (type, TREE_TYPE (_o1[0])))
2414 : : {
2415 : 225 : gimple_match_op tem_op (res_op->cond.any_else (), VIEW_CONVERT_EXPR, type, _o1[0]);
2416 : 225 : tem_op.resimplify (lseq, valueize);
2417 : 225 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
2418 : 225 : if (!_r1) goto next_after_fail670;
2419 : : }
2420 : : else
2421 : : _r1 = _o1[0];
2422 : 231 : res_op->ops[0] = _r1;
2423 : : }
2424 : 231 : {
2425 : 231 : tree _o1[2], _r1;
2426 : 231 : _o1[0] = captures[0];
2427 : 231 : {
2428 : 231 : tree _o2[1], _r2;
2429 : 231 : _o2[0] = captures[1];
2430 : 231 : if (type != TREE_TYPE (_o2[0]) /* XXX */
2431 : 231 : && !useless_type_conversion_p (type, TREE_TYPE (_o2[0])))
2432 : : {
2433 : 172 : gimple_match_op tem_op (res_op->cond.any_else (), VIEW_CONVERT_EXPR, type, _o2[0]);
2434 : 172 : tem_op.resimplify (lseq, valueize);
2435 : 172 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
2436 : 172 : if (!_r2) goto next_after_fail670;
2437 : : }
2438 : : else
2439 : : _r2 = _o2[0];
2440 : 231 : _o1[1] = _r2;
2441 : : }
2442 : 231 : gimple_match_op tem_op (res_op->cond.any_else (), MINUS_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
2443 : 231 : tem_op.resimplify (NULL, valueize);
2444 : 231 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
2445 : 231 : if (!_r1) goto next_after_fail670;
2446 : 231 : res_op->ops[1] = _r1;
2447 : : }
2448 : 231 : res_op->resimplify (lseq, valueize);
2449 : 231 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 225, __FILE__, __LINE__, true);
2450 : 231 : return true;
2451 : : }
2452 : : next_after_fail670:;
2453 : : }
2454 : : }
2455 : : else
2456 : : {
2457 : 1756 : if (!ANY_INTEGRAL_TYPE_P (TREE_TYPE (captures[2]))
2458 : 1756 : || TYPE_OVERFLOW_WRAPS (TREE_TYPE (captures[2]))
2459 : : )
2460 : : {
2461 : 158 : gimple_seq *lseq = seq;
2462 : 158 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail671;
2463 : 158 : {
2464 : 158 : res_op->set_op (VIEW_CONVERT_EXPR, type, 1);
2465 : 158 : {
2466 : 158 : tree _o1[2], _r1;
2467 : 158 : _o1[0] = captures[2];
2468 : 158 : {
2469 : 158 : tree _o2[2], _r2;
2470 : 158 : {
2471 : 158 : tree _o3[1], _r3;
2472 : 158 : _o3[0] = captures[0];
2473 : 158 : if (TREE_TYPE (_o1[0]) != TREE_TYPE (_o3[0]) /* XXX */
2474 : 158 : && !useless_type_conversion_p (TREE_TYPE (_o1[0]), TREE_TYPE (_o3[0])))
2475 : : {
2476 : 158 : gimple_match_op tem_op (res_op->cond.any_else (), VIEW_CONVERT_EXPR, TREE_TYPE (_o1[0]), _o3[0]);
2477 : 158 : tem_op.resimplify (lseq, valueize);
2478 : 158 : _r3 = maybe_push_res_to_seq (&tem_op, lseq);
2479 : 158 : if (!_r3) goto next_after_fail671;
2480 : : }
2481 : : else
2482 : : _r3 = _o3[0];
2483 : 158 : _o2[0] = _r3;
2484 : : }
2485 : 158 : _o2[1] = captures[1];
2486 : 158 : gimple_match_op tem_op (res_op->cond.any_else (), MINUS_EXPR, TREE_TYPE (_o2[0]), _o2[0], _o2[1]);
2487 : 158 : tem_op.resimplify (NULL, valueize);
2488 : 158 : _r2 = maybe_push_res_to_seq (&tem_op, NULL);
2489 : 158 : if (!_r2) goto next_after_fail671;
2490 : 158 : _o1[1] = _r2;
2491 : : }
2492 : 158 : (*res_op).set_op (PLUS_EXPR, TREE_TYPE (_o1[0]), 2);
2493 : 158 : (*res_op).ops[0] = _o1[0];
2494 : 158 : (*res_op).ops[1] = _o1[1];
2495 : 158 : (*res_op).resimplify (lseq, valueize);
2496 : : }
2497 : 158 : if (type != res_op->type
2498 : 158 : && !useless_type_conversion_p (type, res_op->type))
2499 : : {
2500 : 158 : if (!(res_op->ops[0] = maybe_push_res_to_seq (res_op, lseq))) goto next_after_fail671;
2501 : 98 : res_op->set_op (VIEW_CONVERT_EXPR, type, 1);
2502 : 98 : res_op->resimplify (lseq, valueize);
2503 : : }
2504 : 98 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 226, __FILE__, __LINE__, true);
2505 : 98 : return true;
2506 : : }
2507 : : next_after_fail671:;
2508 : : }
2509 : : else
2510 : : {
2511 : 720 : if (types_match (type, captures[2]) && !TYPE_OVERFLOW_SANITIZED (type)
2512 : : )
2513 : : {
2514 : 720 : {
2515 : 720 : tree cst = const_binop (MINUS_EXPR, type, captures[0], captures[1]);
2516 : 720 : if (cst && !TREE_OVERFLOW (cst)
2517 : : )
2518 : : {
2519 : 720 : gimple_seq *lseq = seq;
2520 : 720 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail672;
2521 : 720 : {
2522 : 720 : res_op->set_op (PLUS_EXPR, type, 2);
2523 : 720 : res_op->ops[0] = cst;
2524 : 720 : res_op->ops[1] = captures[2];
2525 : 720 : res_op->resimplify (lseq, valueize);
2526 : 720 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 227, __FILE__, __LINE__, true);
2527 : 720 : return true;
2528 : : }
2529 : 0 : next_after_fail672:;
2530 : : }
2531 : : }
2532 : : }
2533 : : }
2534 : : }
2535 : : }
2536 : : }
2537 : : return false;
2538 : : }
2539 : :
2540 : : bool
2541 : 0 : gimple_simplify_111 (gimple_match_op *res_op, gimple_seq *seq,
2542 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
2543 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
2544 : : const enum tree_code ARG_UNUSED (log1),
2545 : : const enum tree_code ARG_UNUSED (log2),
2546 : : const combined_fn ARG_UNUSED (popcount))
2547 : : {
2548 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2549 : 0 : gimple_seq *lseq = seq;
2550 : 0 : if (lseq
2551 : 0 : && (!single_use (captures[0])
2552 : 0 : || !single_use (captures[1])
2553 : 0 : || !single_use (captures[3])
2554 : 0 : || !single_use (captures[5])
2555 : 0 : || !single_use (captures[6])))
2556 : 0 : lseq = NULL;
2557 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail682;
2558 : 0 : {
2559 : 0 : res_op->set_op (popcount, type, 1);
2560 : 0 : {
2561 : 0 : tree _o1[2], _r1;
2562 : 0 : _o1[0] = captures[2];
2563 : 0 : _o1[1] = captures[4];
2564 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), log2, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
2565 : 0 : tem_op.resimplify (lseq, valueize);
2566 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
2567 : 0 : if (!_r1) goto next_after_fail682;
2568 : 0 : res_op->ops[0] = _r1;
2569 : : }
2570 : 0 : res_op->resimplify (lseq, valueize);
2571 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 237, __FILE__, __LINE__, true);
2572 : : return true;
2573 : : }
2574 : : next_after_fail682:;
2575 : : return false;
2576 : : }
2577 : :
2578 : : bool
2579 : 23 : gimple_simplify_115 (gimple_match_op *res_op, gimple_seq *seq,
2580 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
2581 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
2582 : : {
2583 : 23 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2584 : 23 : gimple_seq *lseq = seq;
2585 : 23 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail686;
2586 : 23 : {
2587 : 23 : res_op->set_op (BIT_IOR_EXPR, type, 2);
2588 : 23 : res_op->ops[0] = captures[0];
2589 : 23 : res_op->ops[1] = captures[1];
2590 : 23 : res_op->resimplify (lseq, valueize);
2591 : 23 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 241, __FILE__, __LINE__, true);
2592 : : return true;
2593 : : }
2594 : 0 : next_after_fail686:;
2595 : 0 : return false;
2596 : : }
2597 : :
2598 : : bool
2599 : 43204 : gimple_simplify_117 (gimple_match_op *res_op, gimple_seq *seq,
2600 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
2601 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
2602 : : {
2603 : 43204 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2604 : 43204 : {
2605 : 43204 : bool wascmp;
2606 : 43204 : if (bitwise_inverted_equal_p (captures[0], captures[2], wascmp)
2607 : 43204 : && (!wascmp || element_precision (type) == 1)
2608 : : )
2609 : : {
2610 : 9 : gimple_seq *lseq = seq;
2611 : 9 : if (lseq
2612 : 5 : && (!single_use (captures[1])))
2613 : 4 : lseq = NULL;
2614 : 9 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail688;
2615 : 9 : {
2616 : 9 : res_op->set_op (BIT_IOR_EXPR, type, 2);
2617 : 9 : res_op->ops[0] = captures[0];
2618 : 9 : {
2619 : 9 : tree _o1[1], _r1;
2620 : 9 : _o1[0] = captures[3];
2621 : 9 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_NOT_EXPR, TREE_TYPE (_o1[0]), _o1[0]);
2622 : 9 : tem_op.resimplify (lseq, valueize);
2623 : 9 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
2624 : 9 : if (!_r1) goto next_after_fail688;
2625 : 5 : res_op->ops[1] = _r1;
2626 : : }
2627 : 5 : res_op->resimplify (lseq, valueize);
2628 : 5 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 243, __FILE__, __LINE__, true);
2629 : 5 : return true;
2630 : : }
2631 : 43199 : next_after_fail688:;
2632 : : }
2633 : : }
2634 : 43199 : return false;
2635 : : }
2636 : :
2637 : : bool
2638 : 1109 : gimple_simplify_122 (gimple_match_op *res_op, gimple_seq *seq,
2639 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
2640 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
2641 : : const enum tree_code ARG_UNUSED (op))
2642 : : {
2643 : 1109 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2644 : 1109 : gimple_seq *lseq = seq;
2645 : 1109 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail693;
2646 : 1109 : {
2647 : 1109 : tree tem;
2648 : 1109 : tem = captures[0];
2649 : 1109 : res_op->set_value (tem);
2650 : 1109 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 247, __FILE__, __LINE__, true);
2651 : : return true;
2652 : : }
2653 : 0 : next_after_fail693:;
2654 : 0 : return false;
2655 : : }
2656 : :
2657 : : bool
2658 : 0 : gimple_simplify_125 (gimple_match_op *res_op, gimple_seq *seq,
2659 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
2660 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
2661 : : {
2662 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2663 : 0 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
2664 : 0 : && TYPE_PRECISION (TREE_TYPE (captures[0])) == 1
2665 : : )
2666 : : {
2667 : 0 : gimple_seq *lseq = seq;
2668 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail696;
2669 : 0 : {
2670 : 0 : tree tem;
2671 : 0 : tem = captures[2];
2672 : 0 : res_op->set_value (tem);
2673 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 249, __FILE__, __LINE__, true);
2674 : 0 : return true;
2675 : : }
2676 : 0 : next_after_fail696:;
2677 : : }
2678 : : return false;
2679 : : }
2680 : :
2681 : : bool
2682 : 356 : gimple_simplify_129 (gimple_match_op *res_op, gimple_seq *seq,
2683 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
2684 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
2685 : : const enum tree_code ARG_UNUSED (bitop))
2686 : : {
2687 : 356 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2688 : 356 : gimple_seq *lseq = seq;
2689 : 356 : if (lseq
2690 : 141 : && (!single_use (captures[1])))
2691 : 318 : lseq = NULL;
2692 : 356 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail700;
2693 : 356 : {
2694 : 356 : res_op->set_op (bitop, type, 2);
2695 : 356 : res_op->ops[0] = captures[0];
2696 : 356 : {
2697 : 356 : tree _o1[1], _r1;
2698 : 356 : _o1[0] = captures[2];
2699 : 356 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_NOT_EXPR, TREE_TYPE (_o1[0]), _o1[0]);
2700 : 356 : tem_op.resimplify (lseq, valueize);
2701 : 356 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
2702 : 356 : if (!_r1) goto next_after_fail700;
2703 : 50 : res_op->ops[1] = _r1;
2704 : : }
2705 : 50 : res_op->resimplify (lseq, valueize);
2706 : 50 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 251, __FILE__, __LINE__, true);
2707 : : return true;
2708 : : }
2709 : : next_after_fail700:;
2710 : : return false;
2711 : : }
2712 : :
2713 : : bool
2714 : 3357 : gimple_simplify_136 (gimple_match_op *res_op, gimple_seq *seq,
2715 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
2716 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
2717 : : const enum tree_code ARG_UNUSED (op),
2718 : : const enum tree_code ARG_UNUSED (rop))
2719 : : {
2720 : 3357 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2721 : 3357 : if (element_precision (type) <= element_precision (TREE_TYPE (captures[0]))
2722 : 3357 : && element_precision (type) <= element_precision (TREE_TYPE (captures[1]))
2723 : : )
2724 : : {
2725 : 3199 : gimple_seq *lseq = seq;
2726 : 3199 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail707;
2727 : 3199 : {
2728 : 3199 : res_op->set_op (BIT_NOT_EXPR, type, 1);
2729 : 3199 : {
2730 : 3199 : tree _o1[2], _r1;
2731 : 3199 : {
2732 : 3199 : tree _o2[1], _r2;
2733 : 3199 : _o2[0] = captures[0];
2734 : 3199 : if (type != TREE_TYPE (_o2[0]) /* XXX */
2735 : 3199 : && !useless_type_conversion_p (type, TREE_TYPE (_o2[0])))
2736 : : {
2737 : 203 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, type, _o2[0]);
2738 : 203 : tem_op.resimplify (lseq, valueize);
2739 : 203 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
2740 : 203 : if (!_r2) goto next_after_fail707;
2741 : : }
2742 : : else
2743 : : _r2 = _o2[0];
2744 : 3108 : _o1[0] = _r2;
2745 : : }
2746 : 3108 : {
2747 : 3108 : tree _o2[1], _r2;
2748 : 3108 : _o2[0] = captures[1];
2749 : 3108 : if (type != TREE_TYPE (_o2[0]) /* XXX */
2750 : 3108 : && !useless_type_conversion_p (type, TREE_TYPE (_o2[0])))
2751 : : {
2752 : 171 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, type, _o2[0]);
2753 : 171 : tem_op.resimplify (lseq, valueize);
2754 : 171 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
2755 : 171 : if (!_r2) goto next_after_fail707;
2756 : : }
2757 : : else
2758 : : _r2 = _o2[0];
2759 : 3088 : _o1[1] = _r2;
2760 : : }
2761 : 3088 : gimple_match_op tem_op (res_op->cond.any_else (), rop, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
2762 : 3088 : tem_op.resimplify (lseq, valueize);
2763 : 3088 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
2764 : 3088 : if (!_r1) goto next_after_fail707;
2765 : 1083 : res_op->ops[0] = _r1;
2766 : : }
2767 : 1083 : res_op->resimplify (lseq, valueize);
2768 : 1083 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 256, __FILE__, __LINE__, true);
2769 : 1083 : return true;
2770 : : }
2771 : : next_after_fail707:;
2772 : : }
2773 : : return false;
2774 : : }
2775 : :
2776 : : bool
2777 : 0 : gimple_simplify_142 (gimple_match_op *res_op, gimple_seq *seq,
2778 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
2779 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
2780 : : const enum tree_code ARG_UNUSED (op))
2781 : : {
2782 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2783 : 0 : if (tree_nop_conversion_p (type, TREE_TYPE (captures[3]))
2784 : 0 : && tree_nop_conversion_p (type, TREE_TYPE (captures[6]))
2785 : : )
2786 : : {
2787 : 0 : if (single_use (captures[4]) && single_use (captures[5])
2788 : : )
2789 : : {
2790 : 0 : gimple_seq *lseq = seq;
2791 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail716;
2792 : 0 : {
2793 : 0 : res_op->set_op (op, type, 2);
2794 : 0 : res_op->ops[0] = captures[0];
2795 : 0 : {
2796 : 0 : tree _o1[1], _r1;
2797 : 0 : _o1[0] = captures[6];
2798 : 0 : if (type != TREE_TYPE (_o1[0]) /* XXX */
2799 : 0 : && !useless_type_conversion_p (type, TREE_TYPE (_o1[0])))
2800 : : {
2801 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, type, _o1[0]);
2802 : 0 : tem_op.resimplify (lseq, valueize);
2803 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
2804 : 0 : if (!_r1) goto next_after_fail716;
2805 : : }
2806 : : else
2807 : : _r1 = _o1[0];
2808 : 0 : res_op->ops[1] = _r1;
2809 : : }
2810 : 0 : res_op->resimplify (lseq, valueize);
2811 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 258, __FILE__, __LINE__, true);
2812 : 0 : return true;
2813 : : }
2814 : : next_after_fail716:;
2815 : : }
2816 : : else
2817 : : {
2818 : 0 : if (single_use (captures[0]) && single_use (captures[1])
2819 : : )
2820 : : {
2821 : 0 : gimple_seq *lseq = seq;
2822 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail717;
2823 : 0 : {
2824 : 0 : res_op->set_op (op, type, 2);
2825 : 0 : {
2826 : 0 : tree _o1[1], _r1;
2827 : 0 : _o1[0] = captures[3];
2828 : 0 : if (type != TREE_TYPE (_o1[0]) /* XXX */
2829 : 0 : && !useless_type_conversion_p (type, TREE_TYPE (_o1[0])))
2830 : : {
2831 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, type, _o1[0]);
2832 : 0 : tem_op.resimplify (lseq, valueize);
2833 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
2834 : 0 : if (!_r1) goto next_after_fail717;
2835 : : }
2836 : : else
2837 : : _r1 = _o1[0];
2838 : 0 : res_op->ops[0] = _r1;
2839 : : }
2840 : 0 : res_op->ops[1] = captures[4];
2841 : 0 : res_op->resimplify (lseq, valueize);
2842 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 259, __FILE__, __LINE__, true);
2843 : 0 : return true;
2844 : : }
2845 : : next_after_fail717:;
2846 : : }
2847 : : }
2848 : : }
2849 : : return false;
2850 : : }
2851 : :
2852 : : bool
2853 : 223708 : gimple_simplify_148 (gimple_match_op *res_op, gimple_seq *seq,
2854 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
2855 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
2856 : : const enum tree_code ARG_UNUSED (op))
2857 : : {
2858 : 223708 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2859 : 223708 : if (bitwise_equal_p (captures[4], captures[7])
2860 : : )
2861 : : {
2862 : 128 : gimple_seq *lseq = seq;
2863 : 128 : if (lseq
2864 : 77 : && (!single_use (captures[0])
2865 : 77 : || !single_use (captures[1])
2866 : 77 : || !single_use (captures[2])
2867 : 49 : || !single_use (captures[3])))
2868 : 79 : lseq = NULL;
2869 : 128 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail723;
2870 : 128 : {
2871 : 128 : res_op->set_op (NOP_EXPR, type, 1);
2872 : 128 : {
2873 : 128 : tree _o1[2], _r1;
2874 : 128 : {
2875 : 128 : tree _o2[2], _r2;
2876 : 128 : _o2[0] = captures[5];
2877 : 128 : {
2878 : 128 : tree _o3[1], _r3;
2879 : 128 : _o3[0] = captures[6];
2880 : 128 : if (TREE_TYPE (_o2[0]) != TREE_TYPE (_o3[0]) /* XXX */
2881 : 128 : && !useless_type_conversion_p (TREE_TYPE (_o2[0]), TREE_TYPE (_o3[0])))
2882 : : {
2883 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, TREE_TYPE (_o2[0]), _o3[0]);
2884 : 0 : tem_op.resimplify (lseq, valueize);
2885 : 0 : _r3 = maybe_push_res_to_seq (&tem_op, lseq);
2886 : 0 : if (!_r3) goto next_after_fail723;
2887 : : }
2888 : : else
2889 : : _r3 = _o3[0];
2890 : 128 : _o2[1] = _r3;
2891 : : }
2892 : 128 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_AND_EXPR, TREE_TYPE (_o2[0]), _o2[0], _o2[1]);
2893 : 128 : tem_op.resimplify (lseq, valueize);
2894 : 128 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
2895 : 128 : if (!_r2) goto next_after_fail723;
2896 : 49 : _o1[0] = _r2;
2897 : : }
2898 : 49 : {
2899 : 49 : tree _o2[1], _r2;
2900 : 49 : _o2[0] = captures[4];
2901 : 49 : if (TREE_TYPE (_o1[0]) != TREE_TYPE (_o2[0]) /* XXX */
2902 : 49 : && !useless_type_conversion_p (TREE_TYPE (_o1[0]), TREE_TYPE (_o2[0])))
2903 : : {
2904 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, TREE_TYPE (_o1[0]), _o2[0]);
2905 : 0 : tem_op.resimplify (lseq, valueize);
2906 : 0 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
2907 : 0 : if (!_r2) goto next_after_fail723;
2908 : : }
2909 : : else
2910 : : _r2 = _o2[0];
2911 : 49 : _o1[1] = _r2;
2912 : : }
2913 : 49 : (*res_op).set_op (BIT_IOR_EXPR, TREE_TYPE (_o1[0]), 2);
2914 : 49 : (*res_op).ops[0] = _o1[0];
2915 : 49 : (*res_op).ops[1] = _o1[1];
2916 : 49 : (*res_op).resimplify (lseq, valueize);
2917 : : }
2918 : 49 : if (type != res_op->type
2919 : 49 : && !useless_type_conversion_p (type, res_op->type))
2920 : : {
2921 : 0 : if (!(res_op->ops[0] = maybe_push_res_to_seq (res_op, lseq))) goto next_after_fail723;
2922 : 0 : res_op->set_op (NOP_EXPR, type, 1);
2923 : 0 : res_op->resimplify (lseq, valueize);
2924 : : }
2925 : 49 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 264, __FILE__, __LINE__, true);
2926 : 49 : return true;
2927 : : }
2928 : : next_after_fail723:;
2929 : : }
2930 : : return false;
2931 : : }
2932 : :
2933 : : bool
2934 : 7 : gimple_simplify_155 (gimple_match_op *res_op, gimple_seq *seq,
2935 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
2936 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
2937 : : const enum tree_code ARG_UNUSED (cmp),
2938 : : const enum tree_code ARG_UNUSED (icmp))
2939 : : {
2940 : 7 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
2941 : 7 : if (integer_zerop (captures[5])
2942 : 7 : && invert_tree_comparison (cmp, HONOR_NANS (captures[2])) == icmp
2943 : : )
2944 : : {
2945 : 0 : if (integer_onep (captures[4])
2946 : : )
2947 : : {
2948 : 0 : gimple_seq *lseq = seq;
2949 : 0 : if (lseq
2950 : 0 : && (!single_use (captures[0])
2951 : 0 : || !single_use (captures[7])))
2952 : 0 : lseq = NULL;
2953 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail731;
2954 : 0 : {
2955 : 0 : res_op->set_op (BIT_AND_EXPR, type, 2);
2956 : 0 : {
2957 : 0 : tree _o1[3], _r1;
2958 : 0 : _o1[0] = captures[1];
2959 : 0 : _o1[1] = captures[6];
2960 : 0 : _o1[2] = captures[9];
2961 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), VEC_COND_EXPR, TREE_TYPE (_o1[1]), _o1[0], _o1[1], _o1[2]);
2962 : 0 : tem_op.resimplify (lseq, valueize);
2963 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
2964 : 0 : if (!_r1) goto next_after_fail731;
2965 : 0 : res_op->ops[0] = _r1;
2966 : : }
2967 : 0 : res_op->ops[1] = captures[4];
2968 : 0 : res_op->resimplify (lseq, valueize);
2969 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 268, __FILE__, __LINE__, true);
2970 : 0 : return true;
2971 : : }
2972 : : next_after_fail731:;
2973 : : }
2974 : : else
2975 : : {
2976 : 0 : if (integer_minus_onep (captures[4])
2977 : : )
2978 : : {
2979 : 0 : gimple_seq *lseq = seq;
2980 : 0 : if (lseq
2981 : 0 : && (!single_use (captures[0])
2982 : 0 : || !single_use (captures[7])))
2983 : 0 : lseq = NULL;
2984 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail732;
2985 : 0 : {
2986 : 0 : res_op->set_op (VEC_COND_EXPR, type, 3);
2987 : 0 : res_op->ops[0] = captures[1];
2988 : 0 : res_op->ops[1] = captures[6];
2989 : 0 : res_op->ops[2] = captures[9];
2990 : 0 : res_op->resimplify (lseq, valueize);
2991 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 269, __FILE__, __LINE__, true);
2992 : 0 : return true;
2993 : : }
2994 : 0 : next_after_fail732:;
2995 : : }
2996 : : }
2997 : : }
2998 : : else
2999 : : {
3000 : 7 : if (integer_zerop (captures[4])
3001 : 7 : && invert_tree_comparison (cmp, HONOR_NANS (captures[2])) == icmp
3002 : : )
3003 : : {
3004 : 0 : if (integer_onep (captures[5])
3005 : : )
3006 : : {
3007 : 0 : gimple_seq *lseq = seq;
3008 : 0 : if (lseq
3009 : 0 : && (!single_use (captures[0])
3010 : 0 : || !single_use (captures[7])))
3011 : 0 : lseq = NULL;
3012 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail733;
3013 : 0 : {
3014 : 0 : res_op->set_op (BIT_AND_EXPR, type, 2);
3015 : 0 : {
3016 : 0 : tree _o1[3], _r1;
3017 : 0 : _o1[0] = captures[1];
3018 : 0 : _o1[1] = captures[9];
3019 : 0 : _o1[2] = captures[6];
3020 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), VEC_COND_EXPR, TREE_TYPE (_o1[1]), _o1[0], _o1[1], _o1[2]);
3021 : 0 : tem_op.resimplify (lseq, valueize);
3022 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
3023 : 0 : if (!_r1) goto next_after_fail733;
3024 : 0 : res_op->ops[0] = _r1;
3025 : : }
3026 : 0 : res_op->ops[1] = captures[5];
3027 : 0 : res_op->resimplify (lseq, valueize);
3028 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 270, __FILE__, __LINE__, true);
3029 : 0 : return true;
3030 : : }
3031 : : next_after_fail733:;
3032 : : }
3033 : : else
3034 : : {
3035 : 0 : if (integer_minus_onep (captures[5])
3036 : : )
3037 : : {
3038 : 0 : gimple_seq *lseq = seq;
3039 : 0 : if (lseq
3040 : 0 : && (!single_use (captures[0])
3041 : 0 : || !single_use (captures[7])))
3042 : 0 : lseq = NULL;
3043 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail734;
3044 : 0 : {
3045 : 0 : res_op->set_op (VEC_COND_EXPR, type, 3);
3046 : 0 : res_op->ops[0] = captures[1];
3047 : 0 : res_op->ops[1] = captures[9];
3048 : 0 : res_op->ops[2] = captures[6];
3049 : 0 : res_op->resimplify (lseq, valueize);
3050 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 271, __FILE__, __LINE__, true);
3051 : 0 : return true;
3052 : : }
3053 : 0 : next_after_fail734:;
3054 : : }
3055 : : }
3056 : : }
3057 : : }
3058 : : return false;
3059 : : }
3060 : :
3061 : : bool
3062 : 4 : gimple_simplify_163 (gimple_match_op *res_op, gimple_seq *seq,
3063 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3064 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
3065 : : const enum tree_code ARG_UNUSED (cmp))
3066 : : {
3067 : 4 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3068 : 4 : gimple_seq *lseq = seq;
3069 : 4 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail760;
3070 : 4 : {
3071 : 4 : res_op->set_op (BIT_IOR_EXPR, type, 2);
3072 : 4 : {
3073 : 4 : tree _o1[2], _r1;
3074 : 4 : _o1[0] = build_zero_cst (TREE_TYPE (captures[0]));
3075 : 4 : _o1[1] = captures[3];
3076 : 4 : gimple_match_op tem_op (res_op->cond.any_else (), cmp, type, _o1[0], _o1[1]);
3077 : 4 : tem_op.resimplify (lseq, valueize);
3078 : 4 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
3079 : 4 : if (!_r1) goto next_after_fail760;
3080 : 4 : res_op->ops[0] = _r1;
3081 : : }
3082 : 4 : res_op->ops[1] = captures[4];
3083 : 4 : res_op->resimplify (lseq, valueize);
3084 : 4 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 290, __FILE__, __LINE__, true);
3085 : : return true;
3086 : : }
3087 : : next_after_fail760:;
3088 : : return false;
3089 : : }
3090 : :
3091 : : bool
3092 : 4 : gimple_simplify_164 (gimple_match_op *res_op, gimple_seq *seq,
3093 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3094 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
3095 : : const enum tree_code ARG_UNUSED (cmp))
3096 : : {
3097 : 4 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3098 : 4 : gimple_seq *lseq = seq;
3099 : 4 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail761;
3100 : 4 : {
3101 : 4 : res_op->set_op (BIT_IOR_EXPR, type, 2);
3102 : 4 : {
3103 : 4 : tree _o1[2], _r1;
3104 : 4 : _o1[0] = build_zero_cst (TREE_TYPE (captures[0]));
3105 : 4 : _o1[1] = captures[2];
3106 : 4 : gimple_match_op tem_op (res_op->cond.any_else (), cmp, type, _o1[0], _o1[1]);
3107 : 4 : tem_op.resimplify (lseq, valueize);
3108 : 4 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
3109 : 4 : if (!_r1) goto next_after_fail761;
3110 : 4 : res_op->ops[0] = _r1;
3111 : : }
3112 : 4 : res_op->ops[1] = captures[3];
3113 : 4 : res_op->resimplify (lseq, valueize);
3114 : 4 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 291, __FILE__, __LINE__, true);
3115 : : return true;
3116 : : }
3117 : : next_after_fail761:;
3118 : : return false;
3119 : : }
3120 : :
3121 : : bool
3122 : 0 : gimple_simplify_165 (gimple_match_op *res_op, gimple_seq *seq,
3123 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3124 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
3125 : : {
3126 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3127 : 0 : gimple_seq *lseq = seq;
3128 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail762;
3129 : 0 : {
3130 : 0 : tree tem;
3131 : 0 : tem = captures[2];
3132 : 0 : res_op->set_value (tem);
3133 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 273, __FILE__, __LINE__, true);
3134 : : return true;
3135 : : }
3136 : 0 : next_after_fail762:;
3137 : 0 : return false;
3138 : : }
3139 : :
3140 : : bool
3141 : 0 : gimple_simplify_166 (gimple_match_op *res_op, gimple_seq *seq,
3142 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3143 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
3144 : : {
3145 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3146 : 0 : gimple_seq *lseq = seq;
3147 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail763;
3148 : 0 : {
3149 : 0 : tree tem;
3150 : 0 : tem = constant_boolean_node (true, type);
3151 : 0 : res_op->set_value (tem);
3152 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 292, __FILE__, __LINE__, true);
3153 : : return true;
3154 : : }
3155 : 0 : next_after_fail763:;
3156 : 0 : return false;
3157 : : }
3158 : :
3159 : : bool
3160 : 7 : gimple_simplify_167 (gimple_match_op *res_op, gimple_seq *seq,
3161 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3162 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
3163 : : {
3164 : 7 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3165 : 7 : gimple_seq *lseq = seq;
3166 : 7 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail764;
3167 : 7 : {
3168 : 7 : tree tem;
3169 : 7 : tem = captures[2];
3170 : 7 : res_op->set_value (tem);
3171 : 7 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 274, __FILE__, __LINE__, true);
3172 : : return true;
3173 : : }
3174 : 0 : next_after_fail764:;
3175 : 0 : return false;
3176 : : }
3177 : :
3178 : : bool
3179 : 229 : gimple_simplify_169 (gimple_match_op *res_op, gimple_seq *seq,
3180 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3181 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
3182 : : const enum tree_code ARG_UNUSED (code2),
3183 : : const enum tree_code ARG_UNUSED (code1))
3184 : : {
3185 : 229 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3186 : 229 : if ((TREE_CODE (captures[2]) == INTEGER_CST
3187 : 199 : && TREE_CODE (captures[5]) == INTEGER_CST)
3188 : 369 : || ((INTEGRAL_TYPE_P (TREE_TYPE (captures[2]))
3189 : 14 : || POINTER_TYPE_P (TREE_TYPE (captures[2])))
3190 : 170 : && bitwise_equal_p (captures[2], captures[5]))
3191 : : )
3192 : : {
3193 : 59 : {
3194 : 59 : bool one_before = false;
3195 : 59 : bool one_after = false;
3196 : 59 : int cmp = 0;
3197 : 59 : bool allbits = true;
3198 : 59 : if (TREE_CODE (captures[2]) == INTEGER_CST
3199 : 59 : && TREE_CODE (captures[5]) == INTEGER_CST)
3200 : : {
3201 : 59 : allbits = TYPE_PRECISION (TREE_TYPE (captures[2])) <= TYPE_PRECISION (TREE_TYPE (captures[5]));
3202 : 59 : auto t1 = wi::to_wide (fold_convert (TREE_TYPE (captures[5]), captures[2]));
3203 : 59 : auto t2 = wi::to_wide (captures[5]);
3204 : 59 : cmp = wi::cmp (t1, t2, TYPE_SIGN (TREE_TYPE (captures[5])));
3205 : 59 : if (cmp < 0
3206 : 59 : && t1 == t2 - 1)
3207 : : one_before = true;
3208 : 59 : if (cmp > 0
3209 : 59 : && t1 == t2 + 1)
3210 : : one_after = true;
3211 : : }
3212 : 59 : bool val;
3213 : 59 : switch (code2)
3214 : : {
3215 : 0 : case EQ_EXPR: val = (cmp == 0); break;
3216 : 0 : case NE_EXPR: val = (cmp != 0); break;
3217 : 0 : case LT_EXPR: val = (cmp < 0); break;
3218 : 56 : case GT_EXPR: val = (cmp > 0); break;
3219 : 3 : case LE_EXPR: val = (cmp <= 0); break;
3220 : 0 : case GE_EXPR: val = (cmp >= 0); break;
3221 : 0 : default: gcc_unreachable ();
3222 : : }
3223 : 59 : if (code1 == EQ_EXPR && val
3224 : : )
3225 : : {
3226 : 5 : gimple_seq *lseq = seq;
3227 : 5 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail767;
3228 : 5 : {
3229 : 5 : tree tem;
3230 : 5 : tem = captures[3];
3231 : 5 : res_op->set_value (tem);
3232 : 5 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 276, __FILE__, __LINE__, true);
3233 : 5 : return true;
3234 : : }
3235 : 0 : next_after_fail767:;
3236 : : }
3237 : : else
3238 : : {
3239 : 54 : if (code1 == NE_EXPR && val && allbits
3240 : : )
3241 : : {
3242 : 0 : gimple_seq *lseq = seq;
3243 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail768;
3244 : 0 : {
3245 : 0 : tree tem;
3246 : 0 : tem = constant_boolean_node (true, type);
3247 : 0 : res_op->set_value (tem);
3248 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 277, __FILE__, __LINE__, true);
3249 : 0 : return true;
3250 : : }
3251 : 0 : next_after_fail768:;
3252 : 0 : }
3253 : : else
3254 : : {
3255 : 54 : if (code1 == NE_EXPR && !val && allbits
3256 : : )
3257 : : {
3258 : 0 : gimple_seq *lseq = seq;
3259 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail769;
3260 : 0 : {
3261 : 0 : tree tem;
3262 : 0 : tem = captures[0];
3263 : 0 : res_op->set_value (tem);
3264 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 278, __FILE__, __LINE__, true);
3265 : 0 : return true;
3266 : : }
3267 : 0 : next_after_fail769:;
3268 : 0 : }
3269 : : else
3270 : : {
3271 : 54 : if (code1 == EQ_EXPR
3272 : 54 : && code2 == GT_EXPR
3273 : 54 : && cmp == 0
3274 : 54 : && allbits
3275 : : )
3276 : : {
3277 : 0 : gimple_seq *lseq = seq;
3278 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail770;
3279 : 0 : {
3280 : 0 : res_op->set_op (GE_EXPR, type, 2);
3281 : 0 : res_op->ops[0] = captures[4];
3282 : 0 : res_op->ops[1] = captures[5];
3283 : 0 : res_op->resimplify (lseq, valueize);
3284 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 279, __FILE__, __LINE__, true);
3285 : 0 : return true;
3286 : : }
3287 : 0 : next_after_fail770:;
3288 : 0 : }
3289 : : else
3290 : : {
3291 : 54 : if (code1 == EQ_EXPR
3292 : 54 : && code2 == LT_EXPR
3293 : 0 : && cmp == 0
3294 : 0 : && allbits
3295 : : )
3296 : : {
3297 : 0 : gimple_seq *lseq = seq;
3298 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail771;
3299 : 0 : {
3300 : 0 : res_op->set_op (LE_EXPR, type, 2);
3301 : 0 : res_op->ops[0] = captures[4];
3302 : 0 : res_op->ops[1] = captures[5];
3303 : 0 : res_op->resimplify (lseq, valueize);
3304 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 280, __FILE__, __LINE__, true);
3305 : 0 : return true;
3306 : : }
3307 : 0 : next_after_fail771:;
3308 : 0 : }
3309 : : else
3310 : : {
3311 : 54 : if (code1 == EQ_EXPR
3312 : 54 : && code2 == GE_EXPR
3313 : : && one_before
3314 : 0 : && allbits
3315 : : )
3316 : : {
3317 : 0 : gimple_seq *lseq = seq;
3318 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail772;
3319 : 0 : {
3320 : 0 : res_op->set_op (GE_EXPR, type, 2);
3321 : 0 : res_op->ops[0] = captures[4];
3322 : 0 : {
3323 : 0 : tree _o1[1], _r1;
3324 : 0 : _o1[0] = captures[2];
3325 : 0 : if (TREE_TYPE (res_op->ops[0]) != TREE_TYPE (_o1[0]) /* XXX */
3326 : 0 : && !useless_type_conversion_p (TREE_TYPE (res_op->ops[0]), TREE_TYPE (_o1[0])))
3327 : : {
3328 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, TREE_TYPE (res_op->ops[0]), _o1[0]);
3329 : 0 : tem_op.resimplify (lseq, valueize);
3330 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
3331 : 0 : if (!_r1) goto next_after_fail772;
3332 : : }
3333 : : else
3334 : : _r1 = _o1[0];
3335 : 0 : res_op->ops[1] = _r1;
3336 : : }
3337 : 0 : res_op->resimplify (lseq, valueize);
3338 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 281, __FILE__, __LINE__, true);
3339 : 0 : return true;
3340 : : }
3341 : : next_after_fail772:;
3342 : : }
3343 : : else
3344 : : {
3345 : 54 : if (code1 == EQ_EXPR
3346 : 54 : && code2 == LE_EXPR
3347 : : && one_after
3348 : 0 : && allbits
3349 : : )
3350 : : {
3351 : 0 : gimple_seq *lseq = seq;
3352 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail773;
3353 : 0 : {
3354 : 0 : res_op->set_op (LE_EXPR, type, 2);
3355 : 0 : res_op->ops[0] = captures[4];
3356 : 0 : {
3357 : 0 : tree _o1[1], _r1;
3358 : 0 : _o1[0] = captures[2];
3359 : 0 : if (TREE_TYPE (res_op->ops[0]) != TREE_TYPE (_o1[0]) /* XXX */
3360 : 0 : && !useless_type_conversion_p (TREE_TYPE (res_op->ops[0]), TREE_TYPE (_o1[0])))
3361 : : {
3362 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, TREE_TYPE (res_op->ops[0]), _o1[0]);
3363 : 0 : tem_op.resimplify (lseq, valueize);
3364 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
3365 : 0 : if (!_r1) goto next_after_fail773;
3366 : : }
3367 : : else
3368 : : _r1 = _o1[0];
3369 : 0 : res_op->ops[1] = _r1;
3370 : : }
3371 : 0 : res_op->resimplify (lseq, valueize);
3372 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 282, __FILE__, __LINE__, true);
3373 : 0 : return true;
3374 : : }
3375 : : next_after_fail773:;
3376 : : }
3377 : : }
3378 : : }
3379 : : }
3380 : : }
3381 : : }
3382 : : }
3383 : : }
3384 : : }
3385 : : return false;
3386 : : }
3387 : :
3388 : : bool
3389 : 0 : gimple_simplify_184 (gimple_match_op *res_op, gimple_seq *seq,
3390 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3391 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
3392 : : {
3393 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3394 : 0 : if (!tree_expr_maybe_nan_p (captures[0]) && !HONOR_SIGNED_ZEROS (type)
3395 : : )
3396 : : {
3397 : 0 : gimple_seq *lseq = seq;
3398 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail796;
3399 : 0 : {
3400 : 0 : res_op->set_op (NEGATE_EXPR, type, 1);
3401 : 0 : {
3402 : 0 : tree _o1[1], _r1;
3403 : 0 : _o1[0] = captures[0];
3404 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), ABS_EXPR, TREE_TYPE (_o1[0]), _o1[0]);
3405 : 0 : tem_op.resimplify (lseq, valueize);
3406 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
3407 : 0 : if (!_r1) goto next_after_fail796;
3408 : 0 : res_op->ops[0] = _r1;
3409 : : }
3410 : 0 : res_op->resimplify (lseq, valueize);
3411 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 302, __FILE__, __LINE__, true);
3412 : 0 : return true;
3413 : : }
3414 : : next_after_fail796:;
3415 : : }
3416 : : return false;
3417 : : }
3418 : :
3419 : : bool
3420 : 0 : gimple_simplify_188 (gimple_match_op *res_op, gimple_seq *seq,
3421 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3422 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
3423 : : {
3424 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3425 : 0 : if (!tree_expr_maybe_nan_p (captures[0]) && !HONOR_SIGNED_ZEROS (type)
3426 : : )
3427 : : {
3428 : 0 : gimple_seq *lseq = seq;
3429 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail800;
3430 : 0 : {
3431 : 0 : res_op->set_op (NEGATE_EXPR, type, 1);
3432 : 0 : {
3433 : 0 : tree _o1[1], _r1;
3434 : 0 : _o1[0] = captures[0];
3435 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), ABS_EXPR, TREE_TYPE (_o1[0]), _o1[0]);
3436 : 0 : tem_op.resimplify (lseq, valueize);
3437 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
3438 : 0 : if (!_r1) goto next_after_fail800;
3439 : 0 : res_op->ops[0] = _r1;
3440 : : }
3441 : 0 : res_op->resimplify (lseq, valueize);
3442 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 303, __FILE__, __LINE__, true);
3443 : 0 : return true;
3444 : : }
3445 : : next_after_fail800:;
3446 : : }
3447 : : return false;
3448 : : }
3449 : :
3450 : : bool
3451 : 0 : gimple_simplify_191 (gimple_match_op *res_op, gimple_seq *seq,
3452 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3453 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
3454 : : {
3455 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3456 : 0 : if (!tree_expr_maybe_nan_p (captures[0]) && !HONOR_SIGNED_ZEROS (type)
3457 : : )
3458 : : {
3459 : 0 : gimple_seq *lseq = seq;
3460 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail803;
3461 : 0 : {
3462 : 0 : res_op->set_op (NEGATE_EXPR, type, 1);
3463 : 0 : {
3464 : 0 : tree _o1[1], _r1;
3465 : 0 : _o1[0] = captures[0];
3466 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), ABS_EXPR, TREE_TYPE (_o1[0]), _o1[0]);
3467 : 0 : tem_op.resimplify (lseq, valueize);
3468 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
3469 : 0 : if (!_r1) goto next_after_fail803;
3470 : 0 : res_op->ops[0] = _r1;
3471 : : }
3472 : 0 : res_op->resimplify (lseq, valueize);
3473 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 302, __FILE__, __LINE__, true);
3474 : 0 : return true;
3475 : : }
3476 : : next_after_fail803:;
3477 : : }
3478 : : return false;
3479 : : }
3480 : :
3481 : : bool
3482 : 0 : gimple_simplify_195 (gimple_match_op *res_op, gimple_seq *seq,
3483 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3484 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
3485 : : {
3486 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3487 : 0 : if (!tree_expr_maybe_nan_p (captures[0]) && !HONOR_SIGNED_ZEROS (type)
3488 : : )
3489 : : {
3490 : 0 : gimple_seq *lseq = seq;
3491 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail807;
3492 : 0 : {
3493 : 0 : res_op->set_op (NOP_EXPR, type, 1);
3494 : 0 : {
3495 : 0 : tree _o1[1], _r1;
3496 : 0 : _o1[0] = captures[0];
3497 : 0 : (*res_op).set_op (ABS_EXPR, TREE_TYPE (_o1[0]), 1);
3498 : 0 : (*res_op).ops[0] = _o1[0];
3499 : 0 : (*res_op).resimplify (lseq, valueize);
3500 : : }
3501 : 0 : if (type != res_op->type
3502 : 0 : && !useless_type_conversion_p (type, res_op->type))
3503 : : {
3504 : 0 : if (!(res_op->ops[0] = maybe_push_res_to_seq (res_op, lseq))) goto next_after_fail807;
3505 : 0 : res_op->set_op (NOP_EXPR, type, 1);
3506 : 0 : res_op->resimplify (lseq, valueize);
3507 : : }
3508 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 303, __FILE__, __LINE__, true);
3509 : 0 : return true;
3510 : : }
3511 : : next_after_fail807:;
3512 : : }
3513 : : return false;
3514 : : }
3515 : :
3516 : : bool
3517 : 0 : gimple_simplify_199 (gimple_match_op *res_op, gimple_seq *seq,
3518 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3519 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
3520 : : const combined_fn ARG_UNUSED (COPYSIGN_ALL))
3521 : : {
3522 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3523 : 0 : if (!tree_expr_maybe_nan_p (captures[0]) && !HONOR_SIGNED_ZEROS (type)
3524 : : )
3525 : : {
3526 : 0 : gimple_seq *lseq = seq;
3527 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail811;
3528 : 0 : {
3529 : 0 : res_op->set_op (NEGATE_EXPR, type, 1);
3530 : 0 : {
3531 : 0 : tree _o1[1], _r1;
3532 : 0 : _o1[0] = captures[0];
3533 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), ABS_EXPR, TREE_TYPE (_o1[0]), _o1[0]);
3534 : 0 : tem_op.resimplify (lseq, valueize);
3535 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
3536 : 0 : if (!_r1) goto next_after_fail811;
3537 : 0 : res_op->ops[0] = _r1;
3538 : : }
3539 : 0 : res_op->resimplify (lseq, valueize);
3540 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 305, __FILE__, __LINE__, true);
3541 : 0 : return true;
3542 : : }
3543 : : next_after_fail811:;
3544 : : }
3545 : : return false;
3546 : : }
3547 : :
3548 : : bool
3549 : 2 : gimple_simplify_204 (gimple_match_op *res_op, gimple_seq *seq,
3550 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3551 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
3552 : : {
3553 : 2 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3554 : 2 : if (INTEGRAL_TYPE_P (type)
3555 : 2 : && INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
3556 : 4 : && !TYPE_UNSIGNED (TREE_TYPE (captures[0]))
3557 : : )
3558 : : {
3559 : 2 : if (TYPE_UNSIGNED (type)
3560 : : )
3561 : : {
3562 : 2 : gimple_seq *lseq = seq;
3563 : 2 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail816;
3564 : 2 : {
3565 : 2 : res_op->set_op (ABSU_EXPR, type, 1);
3566 : 2 : res_op->ops[0] = captures[0];
3567 : 2 : res_op->resimplify (lseq, valueize);
3568 : 2 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 308, __FILE__, __LINE__, true);
3569 : 2 : return true;
3570 : : }
3571 : 0 : next_after_fail816:;
3572 : : }
3573 : : else
3574 : : {
3575 : 0 : gimple_seq *lseq = seq;
3576 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail817;
3577 : 0 : {
3578 : 0 : res_op->set_op (ABS_EXPR, type, 1);
3579 : 0 : res_op->ops[0] = captures[0];
3580 : 0 : res_op->resimplify (lseq, valueize);
3581 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 309, __FILE__, __LINE__, true);
3582 : 0 : return true;
3583 : : }
3584 : 0 : next_after_fail817:;
3585 : : }
3586 : : }
3587 : : return false;
3588 : : }
3589 : :
3590 : : bool
3591 : 897 : gimple_simplify_208 (gimple_match_op *res_op, gimple_seq *seq,
3592 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3593 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
3594 : : const enum tree_code ARG_UNUSED (cmp))
3595 : : {
3596 : 897 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3597 : 897 : if (!canonicalize_math_p ()
3598 : : )
3599 : : {
3600 : 299 : if (INTEGRAL_TYPE_P (type)
3601 : 299 : && INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
3602 : : )
3603 : : {
3604 : 299 : gimple_seq *lseq = seq;
3605 : 299 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail822;
3606 : 299 : {
3607 : 299 : res_op->set_op (COND_EXPR, type, 3);
3608 : 299 : res_op->ops[0] = captures[0];
3609 : 299 : res_op->ops[1] = captures[3];
3610 : 299 : res_op->ops[2] = build_zero_cst (type);
3611 : 299 : res_op->resimplify (lseq, valueize);
3612 : 299 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 311, __FILE__, __LINE__, true);
3613 : 299 : return true;
3614 : : }
3615 : 0 : next_after_fail822:;
3616 : : }
3617 : : }
3618 : : return false;
3619 : : }
3620 : :
3621 : : bool
3622 : 7600 : gimple_simplify_212 (gimple_match_op *res_op, gimple_seq *seq,
3623 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3624 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
3625 : : {
3626 : 7600 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3627 : 7600 : {
3628 : 7600 : poly_widest_int factor;
3629 : 7600 : if (multiple_p (wi::to_poly_widest (captures[2]), wi::to_widest (captures[1]), &factor)
3630 : : )
3631 : : {
3632 : 1275 : gimple_seq *lseq = seq;
3633 : 1275 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail826;
3634 : 1275 : {
3635 : 1275 : res_op->set_op (MULT_EXPR, type, 2);
3636 : 1275 : {
3637 : 1275 : tree _o1[1], _r1;
3638 : 1275 : _o1[0] = captures[0];
3639 : 1275 : if (type != TREE_TYPE (_o1[0]) /* XXX */
3640 : 1275 : && !useless_type_conversion_p (type, TREE_TYPE (_o1[0])))
3641 : : {
3642 : 1253 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, type, _o1[0]);
3643 : 1253 : tem_op.resimplify (lseq, valueize);
3644 : 1253 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
3645 : 1253 : if (!_r1) goto next_after_fail826;
3646 : : }
3647 : : else
3648 : : _r1 = _o1[0];
3649 : 1168 : res_op->ops[0] = _r1;
3650 : : }
3651 : 1168 : res_op->ops[1] = wide_int_to_tree (type, factor);
3652 : 1168 : res_op->resimplify (lseq, valueize);
3653 : 1168 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 315, __FILE__, __LINE__, true);
3654 : 1168 : return true;
3655 : : }
3656 : 6432 : next_after_fail826:;
3657 : : }
3658 : 7600 : }
3659 : 6432 : return false;
3660 : : }
3661 : :
3662 : : bool
3663 : 0 : gimple_simplify_216 (gimple_match_op *res_op, gimple_seq *seq,
3664 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3665 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
3666 : : const combined_fn ARG_UNUSED (POW))
3667 : : {
3668 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3669 : 0 : if (flag_unsafe_math_optimizations && canonicalize_math_p ()
3670 : : )
3671 : : {
3672 : 0 : if (!TREE_OVERFLOW (captures[2])
3673 : : )
3674 : : {
3675 : 0 : gimple_seq *lseq = seq;
3676 : 0 : if (lseq
3677 : 0 : && (!single_use (captures[1])))
3678 : 0 : lseq = NULL;
3679 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail831;
3680 : 0 : {
3681 : 0 : res_op->set_op (POW, type, 2);
3682 : 0 : res_op->ops[0] = captures[0];
3683 : 0 : {
3684 : 0 : tree _o1[2], _r1;
3685 : 0 : _o1[0] = captures[2];
3686 : 0 : _o1[1] = build_one_cst (type);
3687 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), PLUS_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
3688 : 0 : tem_op.resimplify (lseq, valueize);
3689 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
3690 : 0 : if (!_r1) goto next_after_fail831;
3691 : 0 : res_op->ops[1] = _r1;
3692 : : }
3693 : 0 : res_op->resimplify (lseq, valueize);
3694 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 320, __FILE__, __LINE__, true);
3695 : 0 : return true;
3696 : : }
3697 : : next_after_fail831:;
3698 : : }
3699 : : }
3700 : : return false;
3701 : : }
3702 : :
3703 : : bool
3704 : 0 : gimple_simplify_219 (gimple_match_op *res_op, gimple_seq *seq,
3705 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3706 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
3707 : : const combined_fn ARG_UNUSED (TAN),
3708 : : const combined_fn ARG_UNUSED (COS),
3709 : : const combined_fn ARG_UNUSED (SIN))
3710 : : {
3711 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3712 : 0 : if (flag_unsafe_math_optimizations && canonicalize_math_p ()
3713 : : )
3714 : : {
3715 : 0 : gimple_seq *lseq = seq;
3716 : 0 : if (lseq
3717 : 0 : && (!single_use (captures[0])
3718 : 0 : || !single_use (captures[2])))
3719 : 0 : lseq = NULL;
3720 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail834;
3721 : 0 : {
3722 : 0 : res_op->set_op (SIN, type, 1);
3723 : 0 : res_op->ops[0] = captures[1];
3724 : 0 : res_op->resimplify (lseq, valueize);
3725 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 323, __FILE__, __LINE__, true);
3726 : 0 : return true;
3727 : : }
3728 : 0 : next_after_fail834:;
3729 : : }
3730 : : return false;
3731 : : }
3732 : :
3733 : : bool
3734 : 628 : gimple_simplify_222 (gimple_match_op *res_op, gimple_seq *seq,
3735 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3736 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
3737 : : const enum tree_code ARG_UNUSED (cmp))
3738 : : {
3739 : 628 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3740 : 1256 : if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
3741 : 1248 : && !TYPE_OVERFLOW_WRAPS (TREE_TYPE(captures[0]))
3742 : : )
3743 : : {
3744 : 68 : gimple_seq *lseq = seq;
3745 : 68 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail837;
3746 : 68 : {
3747 : 68 : res_op->set_op (cmp, type, 2);
3748 : 68 : res_op->ops[0] = captures[0];
3749 : 68 : res_op->ops[1] = build_zero_cst (TREE_TYPE(captures[0]));
3750 : 68 : res_op->resimplify (lseq, valueize);
3751 : 68 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 326, __FILE__, __LINE__, true);
3752 : 68 : return true;
3753 : : }
3754 : 0 : next_after_fail837:;
3755 : : }
3756 : : return false;
3757 : : }
3758 : :
3759 : : bool
3760 : 1403 : gimple_simplify_225 (gimple_match_op *res_op, gimple_seq *seq,
3761 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3762 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
3763 : : {
3764 : 1403 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3765 : 2806 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
3766 : 2806 : && TYPE_PRECISION (TREE_TYPE (captures[1])) == 1
3767 : : )
3768 : : {
3769 : 1403 : gimple_seq *lseq = seq;
3770 : 1403 : if (lseq
3771 : 468 : && (!single_use (captures[0])))
3772 : 956 : lseq = NULL;
3773 : 1403 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail840;
3774 : 1403 : {
3775 : 1403 : res_op->set_op (NOP_EXPR, type, 1);
3776 : 1403 : {
3777 : 1403 : tree _o1[2], _r1;
3778 : 1403 : _o1[0] = captures[1];
3779 : 1403 : _o1[1] = captures[2];
3780 : 1403 : (*res_op).set_op (BIT_XOR_EXPR, TREE_TYPE (_o1[0]), 2);
3781 : 1403 : (*res_op).ops[0] = _o1[0];
3782 : 1403 : (*res_op).ops[1] = _o1[1];
3783 : 1403 : (*res_op).resimplify (lseq, valueize);
3784 : : }
3785 : 1403 : if (type != res_op->type
3786 : 1403 : && !useless_type_conversion_p (type, res_op->type))
3787 : : {
3788 : 12 : if (!(res_op->ops[0] = maybe_push_res_to_seq (res_op, lseq))) goto next_after_fail840;
3789 : 12 : res_op->set_op (NOP_EXPR, type, 1);
3790 : 12 : res_op->resimplify (lseq, valueize);
3791 : : }
3792 : 1403 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 329, __FILE__, __LINE__, true);
3793 : 1403 : return true;
3794 : : }
3795 : : next_after_fail840:;
3796 : : }
3797 : : return false;
3798 : : }
3799 : :
3800 : : bool
3801 : 4297 : gimple_simplify_228 (gimple_match_op *res_op, gimple_seq *seq,
3802 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3803 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
3804 : : const enum tree_code ARG_UNUSED (cmp))
3805 : : {
3806 : 4297 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3807 : 4297 : if (element_precision (captures[0]) >= element_precision (captures[1])
3808 : 4297 : && types_match (captures[1], captures[3])
3809 : : )
3810 : : {
3811 : 4297 : if (wi::lt_p (wi::to_wide (captures[2]), 0, TYPE_SIGN (TREE_TYPE (captures[2])))
3812 : : )
3813 : : {
3814 : 2 : if (!TYPE_UNSIGNED (TREE_TYPE (captures[0]))
3815 : : )
3816 : : {
3817 : 2 : gimple_seq *lseq = seq;
3818 : 2 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail843;
3819 : 2 : {
3820 : 2 : res_op->set_op (cmp, type, 2);
3821 : 2 : res_op->ops[0] = captures[3];
3822 : 2 : res_op->ops[1] = captures[1];
3823 : 2 : res_op->resimplify (lseq, valueize);
3824 : 2 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 332, __FILE__, __LINE__, true);
3825 : 2 : return true;
3826 : : }
3827 : 0 : next_after_fail843:;
3828 : : }
3829 : : else
3830 : : {
3831 : 0 : if (tree_expr_nonzero_p (captures[1]) && tree_expr_nonzero_p (captures[3])
3832 : : )
3833 : : {
3834 : 0 : {
3835 : 0 : tree utype = unsigned_type_for (TREE_TYPE (captures[1]));
3836 : 0 : gimple_seq *lseq = seq;
3837 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail844;
3838 : 0 : {
3839 : 0 : res_op->set_op (cmp, type, 2);
3840 : 0 : {
3841 : 0 : tree _o1[1], _r1;
3842 : 0 : _o1[0] = captures[3];
3843 : 0 : if (utype != TREE_TYPE (_o1[0]) /* XXX */
3844 : 0 : && !useless_type_conversion_p (utype, TREE_TYPE (_o1[0])))
3845 : : {
3846 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, utype, _o1[0]);
3847 : 0 : tem_op.resimplify (lseq, valueize);
3848 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
3849 : 0 : if (!_r1) goto next_after_fail844;
3850 : : }
3851 : : else
3852 : : _r1 = _o1[0];
3853 : 0 : res_op->ops[0] = _r1;
3854 : : }
3855 : 0 : {
3856 : 0 : tree _o1[1], _r1;
3857 : 0 : _o1[0] = captures[1];
3858 : 0 : if (utype != TREE_TYPE (_o1[0]) /* XXX */
3859 : 0 : && !useless_type_conversion_p (utype, TREE_TYPE (_o1[0])))
3860 : : {
3861 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, utype, _o1[0]);
3862 : 0 : tem_op.resimplify (lseq, valueize);
3863 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
3864 : 0 : if (!_r1) goto next_after_fail844;
3865 : : }
3866 : : else
3867 : : _r1 = _o1[0];
3868 : 0 : res_op->ops[1] = _r1;
3869 : : }
3870 : 0 : res_op->resimplify (lseq, valueize);
3871 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 333, __FILE__, __LINE__, true);
3872 : 0 : return true;
3873 : : }
3874 : : next_after_fail844:;
3875 : : }
3876 : : }
3877 : : }
3878 : : }
3879 : : else
3880 : : {
3881 : 4295 : if (wi::gt_p (wi::to_wide (captures[2]), 1, TYPE_SIGN (TREE_TYPE (captures[2])))
3882 : : )
3883 : : {
3884 : 4295 : if (TYPE_UNSIGNED (TREE_TYPE (captures[1])) || !TYPE_UNSIGNED (TREE_TYPE (captures[0]))
3885 : : )
3886 : : {
3887 : 2784 : gimple_seq *lseq = seq;
3888 : 2784 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail845;
3889 : 2784 : {
3890 : 2784 : res_op->set_op (cmp, type, 2);
3891 : 2784 : res_op->ops[0] = captures[1];
3892 : 2784 : res_op->ops[1] = captures[3];
3893 : 2784 : res_op->resimplify (lseq, valueize);
3894 : 2784 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 334, __FILE__, __LINE__, true);
3895 : 2784 : return true;
3896 : : }
3897 : 0 : next_after_fail845:;
3898 : : }
3899 : : else
3900 : : {
3901 : 1511 : {
3902 : 1511 : tree utype = unsigned_type_for (TREE_TYPE (captures[1]));
3903 : 1511 : gimple_seq *lseq = seq;
3904 : 1511 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail846;
3905 : 1511 : {
3906 : 1511 : res_op->set_op (cmp, type, 2);
3907 : 1511 : {
3908 : 1511 : tree _o1[1], _r1;
3909 : 1511 : _o1[0] = captures[1];
3910 : 1511 : if (utype != TREE_TYPE (_o1[0]) /* XXX */
3911 : 1511 : && !useless_type_conversion_p (utype, TREE_TYPE (_o1[0])))
3912 : : {
3913 : 1511 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, utype, _o1[0]);
3914 : 1511 : tem_op.resimplify (lseq, valueize);
3915 : 1511 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
3916 : 1511 : if (!_r1) goto next_after_fail846;
3917 : : }
3918 : : else
3919 : : _r1 = _o1[0];
3920 : 861 : res_op->ops[0] = _r1;
3921 : : }
3922 : 861 : {
3923 : 861 : tree _o1[1], _r1;
3924 : 861 : _o1[0] = captures[3];
3925 : 861 : if (utype != TREE_TYPE (_o1[0]) /* XXX */
3926 : 861 : && !useless_type_conversion_p (utype, TREE_TYPE (_o1[0])))
3927 : : {
3928 : 861 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, utype, _o1[0]);
3929 : 861 : tem_op.resimplify (lseq, valueize);
3930 : 861 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
3931 : 861 : if (!_r1) goto next_after_fail846;
3932 : : }
3933 : : else
3934 : : _r1 = _o1[0];
3935 : 861 : res_op->ops[1] = _r1;
3936 : : }
3937 : 861 : res_op->resimplify (lseq, valueize);
3938 : 861 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 335, __FILE__, __LINE__, true);
3939 : 861 : return true;
3940 : : }
3941 : : next_after_fail846:;
3942 : : }
3943 : : }
3944 : : }
3945 : : }
3946 : : }
3947 : : return false;
3948 : : }
3949 : :
3950 : : bool
3951 : 40 : gimple_simplify_241 (gimple_match_op *res_op, gimple_seq *seq,
3952 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3953 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
3954 : : const enum tree_code ARG_UNUSED (cmp))
3955 : : {
3956 : 40 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3957 : 40 : if (TREE_INT_CST_LOW (captures[1]) & 1
3958 : : )
3959 : : {
3960 : 8 : gimple_seq *lseq = seq;
3961 : 8 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail872;
3962 : 8 : {
3963 : 8 : tree tem;
3964 : 8 : tem = constant_boolean_node (cmp == NE_EXPR, type);
3965 : 8 : res_op->set_value (tem);
3966 : 8 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 359, __FILE__, __LINE__, true);
3967 : 8 : return true;
3968 : : }
3969 : 0 : next_after_fail872:;
3970 : : }
3971 : : return false;
3972 : : }
3973 : :
3974 : : bool
3975 : 24659 : gimple_simplify_244 (gimple_match_op *res_op, gimple_seq *seq,
3976 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
3977 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
3978 : : const enum tree_code ARG_UNUSED (minmax),
3979 : : const enum tree_code ARG_UNUSED (cmp),
3980 : : const enum tree_code ARG_UNUSED (out))
3981 : : {
3982 : 24659 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
3983 : 49309 : if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
3984 : 48357 : && (!VECTOR_TYPE_P (TREE_TYPE (captures[0]))
3985 : 5 : || (VECTOR_TYPE_P (type)
3986 : 0 : && (!expand_vec_cmp_expr_p (TREE_TYPE (captures[0]), type, cmp)
3987 : 0 : || expand_vec_cmp_expr_p (TREE_TYPE (captures[0]), type, out))))
3988 : : )
3989 : : {
3990 : 23702 : gimple_seq *lseq = seq;
3991 : 23702 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail875;
3992 : 23702 : {
3993 : 23702 : res_op->set_op (out, type, 2);
3994 : 23702 : res_op->ops[0] = captures[0];
3995 : 23702 : res_op->ops[1] = captures[1];
3996 : 23702 : res_op->resimplify (lseq, valueize);
3997 : 23702 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 362, __FILE__, __LINE__, true);
3998 : 23702 : return true;
3999 : : }
4000 : 0 : next_after_fail875:;
4001 : : }
4002 : : return false;
4003 : : }
4004 : :
4005 : : bool
4006 : 7722 : gimple_simplify_248 (gimple_match_op *res_op, gimple_seq *seq,
4007 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
4008 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
4009 : : const enum tree_code ARG_UNUSED (cmp),
4010 : : const enum tree_code ARG_UNUSED (icmp))
4011 : : {
4012 : 7722 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
4013 : 7722 : {
4014 : 7722 : int c1 = wi::clz (wi::to_wide (captures[0]));
4015 : 7722 : int c2 = wi::clz (wi::to_wide (captures[2]));
4016 : 7722 : if (c1 < c2
4017 : : )
4018 : : {
4019 : 0 : gimple_seq *lseq = seq;
4020 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail881;
4021 : 0 : {
4022 : 0 : tree tem;
4023 : 0 : tem = constant_boolean_node (cmp == NE_EXPR ? false : true, type);
4024 : 0 : res_op->set_value (tem);
4025 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 368, __FILE__, __LINE__, true);
4026 : 0 : return true;
4027 : : }
4028 : 0 : next_after_fail881:;
4029 : : }
4030 : : else
4031 : : {
4032 : 7722 : gimple_seq *lseq = seq;
4033 : 7722 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail882;
4034 : 7722 : {
4035 : 7722 : res_op->set_op (icmp, type, 2);
4036 : 7722 : res_op->ops[0] = captures[1];
4037 : 7722 : res_op->ops[1] = build_int_cst (TREE_TYPE (captures[1]), c1 - c2);
4038 : 7722 : res_op->resimplify (lseq, valueize);
4039 : 7722 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 369, __FILE__, __LINE__, true);
4040 : 7722 : return true;
4041 : : }
4042 : 0 : next_after_fail882:;
4043 : : }
4044 : : }
4045 : : return false;
4046 : : }
4047 : :
4048 : : bool
4049 : 13203 : gimple_simplify_252 (gimple_match_op *res_op, gimple_seq *seq,
4050 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
4051 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
4052 : : const enum tree_code ARG_UNUSED (cmp))
4053 : : {
4054 : 13203 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
4055 : 13203 : if (tree_fits_shwi_p (captures[3])
4056 : 13203 : && tree_to_shwi (captures[3]) > 0
4057 : 26378 : && tree_to_shwi (captures[3]) < TYPE_PRECISION (TREE_TYPE (captures[2]))
4058 : : )
4059 : : {
4060 : 13171 : {
4061 : 13171 : tree t0 = TREE_TYPE (captures[2]);
4062 : 13171 : unsigned int prec = TYPE_PRECISION (t0);
4063 : 13171 : wide_int c1 = wi::to_wide (captures[3]);
4064 : 13171 : wide_int c2 = wi::to_wide (captures[4]);
4065 : 13171 : wide_int c3 = wi::to_wide (captures[5]);
4066 : 13171 : wide_int sb = wi::set_bit_in_zero (prec - 1, prec);
4067 : 13171 : if ((c2 & c3) != c3
4068 : : )
4069 : : {
4070 : 0 : gimple_seq *lseq = seq;
4071 : 0 : if (lseq
4072 : : && (!single_use (captures[0])
4073 : : || !single_use (captures[1])))
4074 : 0 : lseq = NULL;
4075 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail888;
4076 : 0 : {
4077 : 0 : tree tem;
4078 : 0 : tem = constant_boolean_node (cmp == NE_EXPR, type);
4079 : 0 : res_op->set_value (tem);
4080 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 375, __FILE__, __LINE__, true);
4081 : 0 : return true;
4082 : : }
4083 : 0 : next_after_fail888:;
4084 : : }
4085 : : else
4086 : : {
4087 : 13171 : if (TYPE_UNSIGNED (t0)
4088 : : )
4089 : : {
4090 : 11973 : if ((c3 & wi::arshift (sb, c1 - 1)) != 0
4091 : : )
4092 : : {
4093 : 0 : gimple_seq *lseq = seq;
4094 : 0 : if (lseq
4095 : : && (!single_use (captures[0])
4096 : : || !single_use (captures[1])))
4097 : 0 : lseq = NULL;
4098 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail889;
4099 : 0 : {
4100 : 0 : tree tem;
4101 : 0 : tem = constant_boolean_node (cmp == NE_EXPR, type);
4102 : 0 : res_op->set_value (tem);
4103 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 376, __FILE__, __LINE__, true);
4104 : 0 : return true;
4105 : : }
4106 : 0 : next_after_fail889:;
4107 : : }
4108 : : else
4109 : : {
4110 : 11973 : gimple_seq *lseq = seq;
4111 : 11973 : if (lseq
4112 : 4059 : && (!single_use (captures[0])
4113 : 972 : || !single_use (captures[1])))
4114 : 11496 : lseq = NULL;
4115 : 11973 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail890;
4116 : 11973 : {
4117 : 11973 : res_op->set_op (cmp, type, 2);
4118 : 11973 : {
4119 : 11973 : tree _o1[2], _r1;
4120 : 11973 : _o1[0] = captures[2];
4121 : 11973 : _o1[1] = wide_int_to_tree (t0, c2 << c1);
4122 : 11973 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_AND_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
4123 : 11973 : tem_op.resimplify (lseq, valueize);
4124 : 11973 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
4125 : 11973 : if (!_r1) goto next_after_fail890;
4126 : 477 : res_op->ops[0] = _r1;
4127 : : }
4128 : 477 : res_op->ops[1] = wide_int_to_tree (t0, c3 << c1);
4129 : 477 : res_op->resimplify (lseq, valueize);
4130 : 477 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 377, __FILE__, __LINE__, true);
4131 : 477 : return true;
4132 : : }
4133 : 12583 : next_after_fail890:;
4134 : : }
4135 : : }
4136 : : else
4137 : : {
4138 : 1198 : {
4139 : 1198 : wide_int smask = wi::arshift (sb, c1);
4140 : 1198 : if ((c2 & smask) == 0
4141 : : )
4142 : : {
4143 : 1151 : gimple_seq *lseq = seq;
4144 : 1151 : if (lseq
4145 : 317 : && (!single_use (captures[0])
4146 : 152 : || !single_use (captures[1])))
4147 : 1049 : lseq = NULL;
4148 : 1151 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail891;
4149 : 1151 : {
4150 : 1151 : res_op->set_op (cmp, type, 2);
4151 : 1151 : {
4152 : 1151 : tree _o1[2], _r1;
4153 : 1151 : _o1[0] = captures[2];
4154 : 1151 : _o1[1] = wide_int_to_tree (t0, c2 << c1);
4155 : 1151 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_AND_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
4156 : 1151 : tem_op.resimplify (lseq, valueize);
4157 : 1151 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
4158 : 1151 : if (!_r1) goto next_after_fail891;
4159 : 102 : res_op->ops[0] = _r1;
4160 : : }
4161 : 102 : res_op->ops[1] = wide_int_to_tree (t0, c3 << c1);
4162 : 102 : res_op->resimplify (lseq, valueize);
4163 : 102 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 378, __FILE__, __LINE__, true);
4164 : 102 : return true;
4165 : : }
4166 : 1087 : next_after_fail891:;
4167 : : }
4168 : : else
4169 : : {
4170 : 47 : if ((c3 & smask) == 0
4171 : : )
4172 : : {
4173 : 29 : gimple_seq *lseq = seq;
4174 : 29 : if (lseq
4175 : 7 : && (!single_use (captures[0])
4176 : 5 : || !single_use (captures[1])))
4177 : 26 : lseq = NULL;
4178 : 29 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail892;
4179 : 29 : {
4180 : 29 : res_op->set_op (cmp, type, 2);
4181 : 29 : {
4182 : 29 : tree _o1[2], _r1;
4183 : 29 : _o1[0] = captures[2];
4184 : 29 : _o1[1] = wide_int_to_tree (t0, (c2 << c1) | sb);
4185 : 29 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_AND_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
4186 : 29 : tem_op.resimplify (lseq, valueize);
4187 : 29 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
4188 : 29 : if (!_r1) goto next_after_fail892;
4189 : 3 : res_op->ops[0] = _r1;
4190 : : }
4191 : 3 : res_op->ops[1] = wide_int_to_tree (t0, c3 << c1);
4192 : 3 : res_op->resimplify (lseq, valueize);
4193 : 3 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 379, __FILE__, __LINE__, true);
4194 : 3 : return true;
4195 : : }
4196 : 1087 : next_after_fail892:;
4197 : : }
4198 : : else
4199 : : {
4200 : 18 : if ((c2 & smask) != (c3 & smask)
4201 : : )
4202 : : {
4203 : 2 : gimple_seq *lseq = seq;
4204 : 2 : if (lseq
4205 : : && (!single_use (captures[0])
4206 : : || !single_use (captures[1])))
4207 : 2 : lseq = NULL;
4208 : 2 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail893;
4209 : 2 : {
4210 : 2 : tree tem;
4211 : 2 : tem = constant_boolean_node (cmp == NE_EXPR, type);
4212 : 2 : res_op->set_value (tem);
4213 : 2 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 380, __FILE__, __LINE__, true);
4214 : 2 : return true;
4215 : : }
4216 : 0 : next_after_fail893:;
4217 : : }
4218 : : else
4219 : : {
4220 : 16 : gimple_seq *lseq = seq;
4221 : 16 : if (lseq
4222 : 12 : && (!single_use (captures[0])
4223 : 8 : || !single_use (captures[1])))
4224 : 12 : lseq = NULL;
4225 : 16 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail894;
4226 : 16 : {
4227 : 16 : res_op->set_op (cmp, type, 2);
4228 : 16 : {
4229 : 16 : tree _o1[2], _r1;
4230 : 16 : _o1[0] = captures[2];
4231 : 16 : _o1[1] = wide_int_to_tree (t0, (c2 << c1) | sb);
4232 : 16 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_AND_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
4233 : 16 : tem_op.resimplify (lseq, valueize);
4234 : 16 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
4235 : 16 : if (!_r1) goto next_after_fail894;
4236 : 4 : res_op->ops[0] = _r1;
4237 : : }
4238 : 4 : res_op->ops[1] = wide_int_to_tree (t0, (c3 << c1) | sb);
4239 : 4 : res_op->resimplify (lseq, valueize);
4240 : 4 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 381, __FILE__, __LINE__, true);
4241 : 4 : return true;
4242 : : }
4243 : 1087 : next_after_fail894:;
4244 : : }
4245 : : }
4246 : : }
4247 : 1198 : }
4248 : : }
4249 : : }
4250 : 13171 : }
4251 : : }
4252 : : return false;
4253 : : }
4254 : :
4255 : : bool
4256 : 31879 : gimple_simplify_272 (gimple_match_op *res_op, gimple_seq *seq,
4257 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
4258 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
4259 : : const enum tree_code ARG_UNUSED (op),
4260 : : const enum tree_code ARG_UNUSED (cmp))
4261 : : {
4262 : 31879 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
4263 : 31879 : if (flag_unsafe_math_optimizations
4264 : : )
4265 : : {
4266 : 28 : {
4267 : 37 : tree tem = const_binop (op == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR,
4268 : 28 : TREE_TYPE (captures[1]), captures[2], captures[1]);
4269 : 28 : if (tem && !TREE_OVERFLOW (tem)
4270 : : )
4271 : : {
4272 : 28 : gimple_seq *lseq = seq;
4273 : 28 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail935;
4274 : 28 : {
4275 : 28 : res_op->set_op (cmp, type, 2);
4276 : 28 : res_op->ops[0] = captures[0];
4277 : 28 : res_op->ops[1] = tem;
4278 : 28 : res_op->resimplify (lseq, valueize);
4279 : 28 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 420, __FILE__, __LINE__, true);
4280 : 28 : return true;
4281 : : }
4282 : 0 : next_after_fail935:;
4283 : : }
4284 : : }
4285 : : }
4286 : : return false;
4287 : : }
4288 : :
4289 : : bool
4290 : 2419 : gimple_simplify_276 (gimple_match_op *res_op, gimple_seq *seq,
4291 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
4292 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
4293 : : const enum tree_code ARG_UNUSED (cmp),
4294 : : const enum tree_code ARG_UNUSED (icmp))
4295 : : {
4296 : 2419 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
4297 : 2419 : if (SCALAR_FLOAT_TYPE_P (TREE_TYPE (captures[0]))
4298 : 2419 : && ! DECIMAL_FLOAT_TYPE_P (TREE_TYPE (captures[0]))
4299 : : )
4300 : : {
4301 : 2023 : {
4302 : 2023 : format_helper fmt (REAL_MODE_FORMAT (TYPE_MODE (TREE_TYPE (captures[0]))));
4303 : 2023 : tree type1 = TREE_TYPE (captures[1]);
4304 : 2023 : bool type1_signed_p = TYPE_SIGN (type1) == SIGNED;
4305 : 2023 : tree type2 = TREE_TYPE (captures[2]);
4306 : 2023 : bool type2_signed_p = TYPE_SIGN (type2) == SIGNED;
4307 : 2023 : if (fmt.can_represent_integral_type_p (type1)
4308 : 2023 : && fmt.can_represent_integral_type_p (type2)
4309 : : )
4310 : : {
4311 : 329 : if (cmp == ORDERED_EXPR || cmp == UNORDERED_EXPR
4312 : : )
4313 : : {
4314 : 3 : gimple_seq *lseq = seq;
4315 : 3 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail957;
4316 : 3 : {
4317 : 3 : tree tem;
4318 : 3 : tem = constant_boolean_node (cmp == ORDERED_EXPR, type);
4319 : 3 : res_op->set_value (tem);
4320 : 3 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 442, __FILE__, __LINE__, true);
4321 : 209 : return true;
4322 : : }
4323 : 0 : next_after_fail957:;
4324 : : }
4325 : : else
4326 : : {
4327 : 326 : if (TYPE_PRECISION (type1) > TYPE_PRECISION (type2)
4328 : 326 : && type1_signed_p >= type2_signed_p
4329 : : )
4330 : : {
4331 : 0 : gimple_seq *lseq = seq;
4332 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail958;
4333 : 0 : {
4334 : 0 : res_op->set_op (icmp, type, 2);
4335 : 0 : res_op->ops[0] = captures[1];
4336 : 0 : {
4337 : 0 : tree _o1[1], _r1;
4338 : 0 : _o1[0] = captures[2];
4339 : 0 : if (TREE_TYPE (res_op->ops[0]) != TREE_TYPE (_o1[0]) /* XXX */
4340 : 0 : && !useless_type_conversion_p (TREE_TYPE (res_op->ops[0]), TREE_TYPE (_o1[0])))
4341 : : {
4342 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, TREE_TYPE (res_op->ops[0]), _o1[0]);
4343 : 0 : tem_op.resimplify (lseq, valueize);
4344 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
4345 : 0 : if (!_r1) goto next_after_fail958;
4346 : : }
4347 : : else
4348 : : _r1 = _o1[0];
4349 : 0 : res_op->ops[1] = _r1;
4350 : : }
4351 : 0 : res_op->resimplify (lseq, valueize);
4352 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 443, __FILE__, __LINE__, true);
4353 : 0 : return true;
4354 : : }
4355 : 1814 : next_after_fail958:;
4356 : : }
4357 : : else
4358 : : {
4359 : 326 : if (TYPE_PRECISION (type1) < TYPE_PRECISION (type2)
4360 : 326 : && type1_signed_p <= type2_signed_p
4361 : : )
4362 : : {
4363 : 0 : gimple_seq *lseq = seq;
4364 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail959;
4365 : 0 : {
4366 : 0 : res_op->set_op (icmp, type, 2);
4367 : 0 : {
4368 : 0 : tree _o1[1], _r1;
4369 : 0 : _o1[0] = captures[1];
4370 : 0 : if (type2 != TREE_TYPE (_o1[0]) /* XXX */
4371 : 0 : && !useless_type_conversion_p (type2, TREE_TYPE (_o1[0])))
4372 : : {
4373 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, type2, _o1[0]);
4374 : 0 : tem_op.resimplify (lseq, valueize);
4375 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
4376 : 0 : if (!_r1) goto next_after_fail959;
4377 : : }
4378 : : else
4379 : : _r1 = _o1[0];
4380 : 0 : res_op->ops[0] = _r1;
4381 : : }
4382 : 0 : res_op->ops[1] = captures[2];
4383 : 0 : res_op->resimplify (lseq, valueize);
4384 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 444, __FILE__, __LINE__, true);
4385 : 0 : return true;
4386 : : }
4387 : 1814 : next_after_fail959:;
4388 : : }
4389 : : else
4390 : : {
4391 : 326 : if (TYPE_PRECISION (type1) == TYPE_PRECISION (type2)
4392 : 326 : && type1_signed_p == type2_signed_p
4393 : : )
4394 : : {
4395 : 206 : gimple_seq *lseq = seq;
4396 : 206 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail960;
4397 : 206 : {
4398 : 206 : res_op->set_op (icmp, type, 2);
4399 : 206 : res_op->ops[0] = captures[1];
4400 : 206 : {
4401 : 206 : tree _o1[1], _r1;
4402 : 206 : _o1[0] = captures[2];
4403 : 206 : if (TREE_TYPE (res_op->ops[0]) != TREE_TYPE (_o1[0]) /* XXX */
4404 : 206 : && !useless_type_conversion_p (TREE_TYPE (res_op->ops[0]), TREE_TYPE (_o1[0])))
4405 : : {
4406 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, TREE_TYPE (res_op->ops[0]), _o1[0]);
4407 : 0 : tem_op.resimplify (lseq, valueize);
4408 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
4409 : 0 : if (!_r1) goto next_after_fail960;
4410 : : }
4411 : : else
4412 : : _r1 = _o1[0];
4413 : 206 : res_op->ops[1] = _r1;
4414 : : }
4415 : 206 : res_op->resimplify (lseq, valueize);
4416 : 206 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 445, __FILE__, __LINE__, true);
4417 : 206 : return true;
4418 : : }
4419 : 1814 : next_after_fail960:;
4420 : : }
4421 : : }
4422 : : }
4423 : : }
4424 : : }
4425 : : }
4426 : : }
4427 : : return false;
4428 : : }
4429 : :
4430 : : bool
4431 : 7889740 : gimple_simplify_284 (gimple_match_op *res_op, gimple_seq *seq,
4432 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
4433 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
4434 : : const enum tree_code ARG_UNUSED (cmp))
4435 : : {
4436 : 7889740 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
4437 : 7889740 : {
4438 : 7889740 : poly_int64 off; tree base;
4439 : 7889740 : tree addr = (TREE_CODE (captures[1]) == SSA_NAME
4440 : 7889740 : ? gimple_assign_rhs1 (SSA_NAME_DEF_STMT (captures[1])) : captures[1]);
4441 : 7889740 : if (SSA_NAME_IS_DEFAULT_DEF (captures[0])
4442 : 496018 : && TREE_CODE (SSA_NAME_VAR (captures[0])) == PARM_DECL
4443 : 495511 : && (base = get_base_address (TREE_OPERAND (addr, 0)))
4444 : 495511 : && TREE_CODE (base) == VAR_DECL
4445 : 7942965 : && auto_var_in_fn_p (base, current_function_decl)
4446 : : )
4447 : : {
4448 : 144 : if (cmp == NE_EXPR
4449 : : )
4450 : : {
4451 : 69 : gimple_seq *lseq = seq;
4452 : 69 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail986;
4453 : 69 : {
4454 : 69 : tree tem;
4455 : 69 : tem = constant_boolean_node (true, type);
4456 : 69 : res_op->set_value (tem);
4457 : 69 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 464, __FILE__, __LINE__, true);
4458 : 158 : return true;
4459 : : }
4460 : 0 : next_after_fail986:;
4461 : : }
4462 : : else
4463 : : {
4464 : 75 : gimple_seq *lseq = seq;
4465 : 75 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail987;
4466 : 75 : {
4467 : 75 : tree tem;
4468 : 75 : tem = constant_boolean_node (false, type);
4469 : 75 : res_op->set_value (tem);
4470 : 75 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 465, __FILE__, __LINE__, true);
4471 : 75 : return true;
4472 : : }
4473 : 0 : next_after_fail987:;
4474 : : }
4475 : : }
4476 : : else
4477 : : {
4478 : 7889596 : if ((base = get_addr_base_and_unit_offset (TREE_OPERAND (addr, 0), &off))
4479 : 7885389 : && TREE_CODE (base) == MEM_REF
4480 : 8293478 : && TREE_OPERAND (base, 0) == captures[0]
4481 : : )
4482 : : {
4483 : 14 : {
4484 : 14 : off += mem_ref_offset (base).force_shwi ();
4485 : 14 : if (known_ne (off, 0)
4486 : : )
4487 : : {
4488 : 0 : gimple_seq *lseq = seq;
4489 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail988;
4490 : 0 : {
4491 : 0 : tree tem;
4492 : 0 : tem = constant_boolean_node (cmp == NE_EXPR, type);
4493 : 0 : res_op->set_value (tem);
4494 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 466, __FILE__, __LINE__, true);
4495 : 0 : return true;
4496 : : }
4497 : 0 : next_after_fail988:;
4498 : : }
4499 : : else
4500 : : {
4501 : 14 : if (known_eq (off, 0)
4502 : : )
4503 : : {
4504 : 14 : gimple_seq *lseq = seq;
4505 : 14 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail989;
4506 : 14 : {
4507 : 14 : tree tem;
4508 : 14 : tem = constant_boolean_node (cmp == EQ_EXPR, type);
4509 : 14 : res_op->set_value (tem);
4510 : 14 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 467, __FILE__, __LINE__, true);
4511 : 14 : return true;
4512 : : }
4513 : 0 : next_after_fail989:;
4514 : : }
4515 : : }
4516 : : }
4517 : : }
4518 : : }
4519 : : }
4520 : 7889582 : return false;
4521 : : }
4522 : :
4523 : : bool
4524 : 0 : gimple_simplify_288 (gimple_match_op *res_op, gimple_seq *seq,
4525 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
4526 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
4527 : : const enum tree_code ARG_UNUSED (cmp))
4528 : : {
4529 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
4530 : 0 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[2]))
4531 : 0 : && INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
4532 : 0 : && INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
4533 : 0 : && TYPE_PRECISION (TREE_TYPE (captures[1])) == TYPE_PRECISION (TREE_TYPE (captures[2]))
4534 : 0 : && TYPE_PRECISION (TREE_TYPE (captures[0])) > TYPE_PRECISION (TREE_TYPE (captures[1]))
4535 : 0 : && !wi::neg_p (wi::to_wide (captures[3]))
4536 : : )
4537 : : {
4538 : 0 : gimple_seq *lseq = seq;
4539 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail993;
4540 : 0 : {
4541 : 0 : res_op->set_op (cmp, type, 2);
4542 : 0 : {
4543 : 0 : tree _o1[2], _r1;
4544 : 0 : _o1[0] = captures[2];
4545 : 0 : {
4546 : 0 : tree _r2;
4547 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), ERROR_MARK, error_mark_node, 1);
4548 : 0 : {
4549 : 0 : tree _o3[1], _r3;
4550 : 0 : _o3[0] = captures[3];
4551 : 0 : tem_op.set_op (BIT_NOT_EXPR, TREE_TYPE (_o3[0]), 1);
4552 : 0 : tem_op.ops[0] = _o3[0];
4553 : 0 : tem_op.resimplify (lseq, valueize);
4554 : : }
4555 : 0 : if (TREE_TYPE (_o1[0]) != tem_op.type
4556 : 0 : && !useless_type_conversion_p (TREE_TYPE (_o1[0]), tem_op.type))
4557 : : {
4558 : 0 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
4559 : 0 : if (!_r2) goto next_after_fail993;
4560 : 0 : tem_op.set_op (NOP_EXPR, TREE_TYPE (_o1[0]), 1);
4561 : 0 : tem_op.ops[0] = _r2;
4562 : 0 : tem_op.resimplify (lseq, valueize);
4563 : : }
4564 : 0 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
4565 : 0 : if (!_r2) goto next_after_fail993;
4566 : 0 : _o1[1] = _r2;
4567 : : }
4568 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_AND_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
4569 : 0 : tem_op.resimplify (lseq, valueize);
4570 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
4571 : 0 : if (!_r1) goto next_after_fail993;
4572 : 0 : res_op->ops[0] = _r1;
4573 : : }
4574 : 0 : res_op->ops[1] = build_zero_cst (TREE_TYPE (captures[2]));
4575 : 0 : res_op->resimplify (lseq, valueize);
4576 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 471, __FILE__, __LINE__, true);
4577 : 0 : return true;
4578 : : }
4579 : : next_after_fail993:;
4580 : : }
4581 : : return false;
4582 : : }
4583 : :
4584 : : bool
4585 : 2766 : gimple_simplify_292 (gimple_match_op *res_op, gimple_seq *seq,
4586 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
4587 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
4588 : : const enum tree_code ARG_UNUSED (cmp))
4589 : : {
4590 : 2766 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
4591 : 2766 : gimple_seq *lseq = seq;
4592 : 2766 : if (lseq
4593 : 877 : && (!single_use (captures[0])
4594 : 139 : || !single_use (captures[3])))
4595 : 2717 : lseq = NULL;
4596 : 2766 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail997;
4597 : 2766 : {
4598 : 2766 : res_op->set_op (cmp, type, 2);
4599 : 2766 : {
4600 : 2766 : tree _o1[2], _r1;
4601 : 2766 : {
4602 : 2766 : tree _o2[2], _r2;
4603 : 2766 : _o2[0] = captures[1];
4604 : 2766 : _o2[1] = captures[4];
4605 : 2766 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_XOR_EXPR, TREE_TYPE (_o2[0]), _o2[0], _o2[1]);
4606 : 2766 : tem_op.resimplify (lseq, valueize);
4607 : 2766 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
4608 : 2766 : if (!_r2) goto next_after_fail997;
4609 : 140 : _o1[0] = _r2;
4610 : : }
4611 : 140 : _o1[1] = captures[2];
4612 : 140 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_AND_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
4613 : 140 : tem_op.resimplify (lseq, valueize);
4614 : 140 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
4615 : 140 : if (!_r1) goto next_after_fail997;
4616 : 56 : res_op->ops[0] = _r1;
4617 : : }
4618 : 56 : res_op->ops[1] = build_zero_cst (TREE_TYPE (captures[2]));
4619 : 56 : res_op->resimplify (lseq, valueize);
4620 : 56 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 475, __FILE__, __LINE__, true);
4621 : : return true;
4622 : : }
4623 : : next_after_fail997:;
4624 : : return false;
4625 : : }
4626 : :
4627 : : bool
4628 : 70 : gimple_simplify_296 (gimple_match_op *res_op, gimple_seq *seq,
4629 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
4630 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
4631 : : const enum tree_code ARG_UNUSED (sgncmp),
4632 : : const enum tree_code ARG_UNUSED (cmp),
4633 : : const enum tree_code ARG_UNUSED (ncmp))
4634 : : {
4635 : 70 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
4636 : 140 : if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
4637 : 70 : && !TYPE_UNSIGNED (TREE_TYPE (captures[0]))
4638 : 140 : && types_match (captures[0], captures[2])
4639 : : )
4640 : : {
4641 : 70 : gimple_seq *lseq = seq;
4642 : 70 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1001;
4643 : 70 : {
4644 : 70 : res_op->set_op (ncmp, type, 2);
4645 : 70 : {
4646 : 70 : tree _o1[2], _r1;
4647 : 70 : _o1[0] = captures[0];
4648 : 70 : _o1[1] = captures[2];
4649 : 70 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_XOR_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
4650 : 70 : tem_op.resimplify (lseq, valueize);
4651 : 70 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
4652 : 70 : if (!_r1) goto next_after_fail1001;
4653 : 31 : res_op->ops[0] = _r1;
4654 : : }
4655 : 31 : res_op->ops[1] = captures[1];
4656 : 31 : res_op->resimplify (lseq, valueize);
4657 : 31 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 478, __FILE__, __LINE__, true);
4658 : 31 : return true;
4659 : : }
4660 : : next_after_fail1001:;
4661 : : }
4662 : : return false;
4663 : : }
4664 : :
4665 : : bool
4666 : 201890314 : gimple_simplify_301 (gimple_match_op *res_op, gimple_seq *seq,
4667 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
4668 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
4669 : : const enum tree_code ARG_UNUSED (neeq))
4670 : : {
4671 : 201890314 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
4672 : 360294685 : if (POINTER_TYPE_P (TREE_TYPE (captures[0]))
4673 : 202014253 : && ptrs_compare_unequal (captures[0], captures[1])
4674 : : )
4675 : : {
4676 : 13672 : gimple_seq *lseq = seq;
4677 : 13672 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1020;
4678 : 13672 : {
4679 : 13672 : tree tem;
4680 : 13672 : tem = constant_boolean_node (neeq != EQ_EXPR, type);
4681 : 13672 : res_op->set_value (tem);
4682 : 13672 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 488, __FILE__, __LINE__, true);
4683 : 13672 : return true;
4684 : : }
4685 : 0 : next_after_fail1020:;
4686 : : }
4687 : : return false;
4688 : : }
4689 : :
4690 : : bool
4691 : 50768 : gimple_simplify_304 (gimple_match_op *res_op, gimple_seq *seq,
4692 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
4693 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
4694 : : const enum tree_code ARG_UNUSED (cmp))
4695 : : {
4696 : 50768 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
4697 : 90410 : if (!FLOAT_TYPE_P (TREE_TYPE (captures[3]))
4698 : 50768 : || !operation_could_trap_p (cmp, true, false, captures[3])
4699 : : )
4700 : : {
4701 : 42027 : gimple_seq *lseq = seq;
4702 : 42027 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1027;
4703 : 42027 : {
4704 : 42027 : res_op->set_op (COND_EXPR, type, 3);
4705 : 42027 : res_op->ops[0] = captures[0];
4706 : 42027 : res_op->ops[0] = unshare_expr (res_op->ops[0]);
4707 : 42027 : {
4708 : 42027 : tree _o1[2], _r1;
4709 : 42027 : _o1[0] = captures[1];
4710 : 42027 : _o1[1] = captures[3];
4711 : 42027 : gimple_match_op tem_op (res_op->cond.any_else (), cmp, type, _o1[0], _o1[1]);
4712 : 42027 : tem_op.resimplify (NULL, valueize);
4713 : 42027 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
4714 : 42027 : if (!_r1) goto next_after_fail1027;
4715 : 2084 : res_op->ops[1] = _r1;
4716 : : }
4717 : 2084 : {
4718 : 2084 : tree _o1[2], _r1;
4719 : 2084 : _o1[0] = captures[2];
4720 : 2084 : _o1[1] = captures[3];
4721 : 2084 : gimple_match_op tem_op (res_op->cond.any_else (), cmp, type, _o1[0], _o1[1]);
4722 : 2084 : tem_op.resimplify (NULL, valueize);
4723 : 2084 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
4724 : 2084 : if (!_r1) goto next_after_fail1027;
4725 : 742 : res_op->ops[2] = _r1;
4726 : : }
4727 : 742 : res_op->resimplify (lseq, valueize);
4728 : 742 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 495, __FILE__, __LINE__, true);
4729 : 742 : return true;
4730 : : }
4731 : : next_after_fail1027:;
4732 : : }
4733 : : return false;
4734 : : }
4735 : :
4736 : : bool
4737 : 12877 : gimple_simplify_307 (gimple_match_op *res_op, gimple_seq *seq,
4738 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
4739 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
4740 : : const enum tree_code ARG_UNUSED (cmp),
4741 : : const enum tree_code ARG_UNUSED (rcmp))
4742 : : {
4743 : 12877 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
4744 : 25754 : if (!TREE_OVERFLOW (captures[0]) && !TREE_OVERFLOW (captures[2])
4745 : 25754 : && TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[1]))
4746 : : )
4747 : : {
4748 : 5064 : {
4749 : 5064 : tree res = int_const_binop (MINUS_EXPR, captures[0], captures[2]);
4750 : 5064 : if (TREE_OVERFLOW (res)
4751 : : )
4752 : : {
4753 : 55 : if (cmp == NE_EXPR
4754 : : )
4755 : : {
4756 : 0 : gimple_seq *lseq = seq;
4757 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1031;
4758 : 0 : {
4759 : 0 : tree tem;
4760 : 0 : tem = constant_boolean_node (true, type);
4761 : 0 : res_op->set_value (tem);
4762 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 499, __FILE__, __LINE__, true);
4763 : 0 : return true;
4764 : : }
4765 : 0 : next_after_fail1031:;
4766 : : }
4767 : : else
4768 : : {
4769 : 55 : if (cmp == EQ_EXPR
4770 : : )
4771 : : {
4772 : 1 : gimple_seq *lseq = seq;
4773 : 1 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1032;
4774 : 1 : {
4775 : 1 : tree tem;
4776 : 1 : tem = constant_boolean_node (false, type);
4777 : 1 : res_op->set_value (tem);
4778 : 1 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 500, __FILE__, __LINE__, true);
4779 : 1 : return true;
4780 : : }
4781 : 0 : next_after_fail1032:;
4782 : : }
4783 : : else
4784 : : {
4785 : 54 : gimple_seq *lseq = seq;
4786 : 54 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1033;
4787 : 54 : {
4788 : 54 : tree tem;
4789 : 54 : bool less = cmp == LE_EXPR || cmp == LT_EXPR;
4790 : 54 : bool ovf_high = wi::lt_p (wi::to_wide (captures[0]), 0,
4791 : 54 : TYPE_SIGN (TREE_TYPE (captures[0]))); tem =
4792 : 54 : constant_boolean_node (less == ovf_high, type);
4793 : 54 : res_op->set_value (tem);
4794 : 54 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 501, __FILE__, __LINE__, true);
4795 : 54 : return true;
4796 : : }
4797 : 0 : next_after_fail1033:;
4798 : : }
4799 : : }
4800 : : }
4801 : : else
4802 : : {
4803 : 5009 : gimple_seq *lseq = seq;
4804 : 5009 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1034;
4805 : 5009 : {
4806 : 5009 : res_op->set_op (rcmp, type, 2);
4807 : 5009 : res_op->ops[0] = captures[1];
4808 : 5009 : res_op->ops[1] = res;
4809 : 5009 : res_op->resimplify (lseq, valueize);
4810 : 5009 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 502, __FILE__, __LINE__, true);
4811 : 5009 : return true;
4812 : : }
4813 : 0 : next_after_fail1034:;
4814 : : }
4815 : : }
4816 : : }
4817 : : else
4818 : : {
4819 : 7813 : if (TYPE_UNSIGNED (TREE_TYPE (captures[1]))
4820 : : )
4821 : : {
4822 : 6563 : if (cmp == EQ_EXPR || cmp == NE_EXPR
4823 : : )
4824 : : {
4825 : 2715 : gimple_seq *lseq = seq;
4826 : 2715 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1035;
4827 : 2715 : {
4828 : 2715 : res_op->set_op (cmp, type, 2);
4829 : 2715 : res_op->ops[0] = captures[1];
4830 : 2715 : {
4831 : 2715 : tree _o1[2], _r1;
4832 : 2715 : _o1[0] = captures[0];
4833 : 2715 : _o1[1] = captures[2];
4834 : 2715 : gimple_match_op tem_op (res_op->cond.any_else (), MINUS_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
4835 : 2715 : tem_op.resimplify (lseq, valueize);
4836 : 2715 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
4837 : 2715 : if (!_r1) goto next_after_fail1035;
4838 : 2715 : res_op->ops[1] = _r1;
4839 : : }
4840 : 2715 : res_op->resimplify (lseq, valueize);
4841 : 2715 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 503, __FILE__, __LINE__, true);
4842 : 2715 : return true;
4843 : : }
4844 : : next_after_fail1035:;
4845 : : }
4846 : : else
4847 : : {
4848 : 3848 : if (cmp == LE_EXPR || cmp == GT_EXPR
4849 : : )
4850 : : {
4851 : 3848 : gimple_seq *lseq = seq;
4852 : 3848 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1036;
4853 : 3848 : {
4854 : 3848 : res_op->set_op (cmp, type, 2);
4855 : 3848 : {
4856 : 3848 : tree _o1[2], _r1;
4857 : 3848 : _o1[0] = captures[1];
4858 : 3848 : {
4859 : 3848 : tree _o2[2], _r2;
4860 : 3848 : _o2[0] = captures[2];
4861 : 3848 : _o2[1] = captures[0];
4862 : 3848 : gimple_match_op tem_op (res_op->cond.any_else (), MINUS_EXPR, TREE_TYPE (_o2[0]), _o2[0], _o2[1]);
4863 : 3848 : tem_op.resimplify (lseq, valueize);
4864 : 3848 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
4865 : 3848 : if (!_r2) goto next_after_fail1036;
4866 : 3848 : _o1[1] = _r2;
4867 : : }
4868 : 3848 : gimple_match_op tem_op (res_op->cond.any_else (), PLUS_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
4869 : 3848 : tem_op.resimplify (lseq, valueize);
4870 : 3848 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
4871 : 3848 : if (!_r1) goto next_after_fail1036;
4872 : 1649 : res_op->ops[0] = _r1;
4873 : : }
4874 : 1649 : res_op->ops[1] = captures[2];
4875 : 1649 : res_op->resimplify (lseq, valueize);
4876 : 1649 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 504, __FILE__, __LINE__, true);
4877 : 1649 : return true;
4878 : : }
4879 : : next_after_fail1036:;
4880 : : }
4881 : : else
4882 : : {
4883 : 0 : if (cmp == LT_EXPR || cmp == GE_EXPR
4884 : : )
4885 : : {
4886 : 0 : gimple_seq *lseq = seq;
4887 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1037;
4888 : 0 : {
4889 : 0 : res_op->set_op (cmp, type, 2);
4890 : 0 : {
4891 : 0 : tree _o1[2], _r1;
4892 : 0 : _o1[0] = captures[1];
4893 : 0 : {
4894 : 0 : tree _o2[2], _r2;
4895 : 0 : _o2[0] = captures[2];
4896 : 0 : {
4897 : 0 : tree _o3[2], _r3;
4898 : 0 : _o3[0] = captures[0];
4899 : 0 : _o3[1] = build_one_cst (TREE_TYPE (captures[1]));
4900 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), PLUS_EXPR, TREE_TYPE (_o3[0]), _o3[0], _o3[1]);
4901 : 0 : tem_op.resimplify (lseq, valueize);
4902 : 0 : _r3 = maybe_push_res_to_seq (&tem_op, lseq);
4903 : 0 : if (!_r3) goto next_after_fail1037;
4904 : 0 : _o2[1] = _r3;
4905 : : }
4906 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), MINUS_EXPR, TREE_TYPE (_o2[0]), _o2[0], _o2[1]);
4907 : 0 : tem_op.resimplify (lseq, valueize);
4908 : 0 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
4909 : 0 : if (!_r2) goto next_after_fail1037;
4910 : 0 : _o1[1] = _r2;
4911 : : }
4912 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), PLUS_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
4913 : 0 : tem_op.resimplify (lseq, valueize);
4914 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
4915 : 0 : if (!_r1) goto next_after_fail1037;
4916 : 0 : res_op->ops[0] = _r1;
4917 : : }
4918 : 0 : res_op->ops[1] = captures[2];
4919 : 0 : res_op->resimplify (lseq, valueize);
4920 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 505, __FILE__, __LINE__, true);
4921 : 0 : return true;
4922 : : }
4923 : : next_after_fail1037:;
4924 : : }
4925 : : }
4926 : : }
4927 : : }
4928 : : else
4929 : : {
4930 : 1250 : if (!TYPE_UNSIGNED (TREE_TYPE (captures[1]))
4931 : 1250 : && TYPE_OVERFLOW_WRAPS (TREE_TYPE (captures[1]))
4932 : : )
4933 : : {
4934 : 1250 : if (cmp == EQ_EXPR || cmp == NE_EXPR
4935 : : )
4936 : : {
4937 : 227 : gimple_seq *lseq = seq;
4938 : 227 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1038;
4939 : 227 : {
4940 : 227 : res_op->set_op (cmp, type, 2);
4941 : 227 : res_op->ops[0] = captures[1];
4942 : 227 : {
4943 : 227 : tree _o1[2], _r1;
4944 : 227 : _o1[0] = captures[0];
4945 : 227 : _o1[1] = captures[2];
4946 : 227 : gimple_match_op tem_op (res_op->cond.any_else (), MINUS_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
4947 : 227 : tem_op.resimplify (lseq, valueize);
4948 : 227 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
4949 : 227 : if (!_r1) goto next_after_fail1038;
4950 : 227 : res_op->ops[1] = _r1;
4951 : : }
4952 : 227 : res_op->resimplify (lseq, valueize);
4953 : 227 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 506, __FILE__, __LINE__, true);
4954 : 227 : return true;
4955 : : }
4956 : : next_after_fail1038:;
4957 : : }
4958 : : else
4959 : : {
4960 : 1023 : gimple_seq *lseq = seq;
4961 : 1023 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1039;
4962 : 1023 : {
4963 : 1023 : res_op->set_op (rcmp, type, 2);
4964 : 1023 : {
4965 : 1023 : tree _o1[2], _r1;
4966 : 1023 : _o1[0] = captures[1];
4967 : 1023 : {
4968 : 1023 : tree _o2[2], _r2;
4969 : 1023 : _o2[0] = captures[0];
4970 : 1023 : _o2[1] = build_one_cst (TREE_TYPE (captures[1]));
4971 : 1023 : gimple_match_op tem_op (res_op->cond.any_else (), PLUS_EXPR, TREE_TYPE (_o2[0]), _o2[0], _o2[1]);
4972 : 1023 : tem_op.resimplify (lseq, valueize);
4973 : 1023 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
4974 : 1023 : if (!_r2) goto next_after_fail1039;
4975 : 1023 : _o1[1] = _r2;
4976 : : }
4977 : 1023 : gimple_match_op tem_op (res_op->cond.any_else (), MINUS_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
4978 : 1023 : tem_op.resimplify (lseq, valueize);
4979 : 1023 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
4980 : 1023 : if (!_r1) goto next_after_fail1039;
4981 : 336 : res_op->ops[0] = _r1;
4982 : : }
4983 : 336 : {
4984 : 336 : tree _o1[1], _r1;
4985 : 336 : _o1[0] = captures[2];
4986 : 336 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_NOT_EXPR, TREE_TYPE (_o1[0]), _o1[0]);
4987 : 336 : tem_op.resimplify (lseq, valueize);
4988 : 336 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
4989 : 336 : if (!_r1) goto next_after_fail1039;
4990 : 336 : res_op->ops[1] = _r1;
4991 : : }
4992 : 336 : res_op->resimplify (lseq, valueize);
4993 : 336 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 507, __FILE__, __LINE__, true);
4994 : 336 : return true;
4995 : : }
4996 : : next_after_fail1039:;
4997 : : }
4998 : : }
4999 : : }
5000 : : }
5001 : : return false;
5002 : : }
5003 : :
5004 : : bool
5005 : 19031 : gimple_simplify_337 (gimple_match_op *res_op, gimple_seq *seq,
5006 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
5007 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
5008 : : const enum tree_code ARG_UNUSED (div))
5009 : : {
5010 : 19031 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
5011 : 19031 : if (INTEGRAL_TYPE_P (type)
5012 : 19031 : && wi::multiple_of_p (wi::to_widest (captures[1]), wi::to_widest (captures[2]), SIGNED)
5013 : : )
5014 : : {
5015 : 1123 : if (TYPE_OVERFLOW_UNDEFINED (type) && !TYPE_OVERFLOW_SANITIZED (type)
5016 : : )
5017 : : {
5018 : 193 : gimple_seq *lseq = seq;
5019 : 193 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1081;
5020 : 193 : {
5021 : 193 : res_op->set_op (MULT_EXPR, type, 2);
5022 : 193 : res_op->ops[0] = captures[0];
5023 : 193 : {
5024 : 193 : tree _o1[2], _r1;
5025 : 193 : _o1[0] = captures[1];
5026 : 193 : _o1[1] = captures[2];
5027 : 193 : gimple_match_op tem_op (res_op->cond.any_else (), div, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
5028 : 193 : tem_op.resimplify (NULL, valueize);
5029 : 193 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
5030 : 193 : if (!_r1) goto next_after_fail1081;
5031 : 193 : res_op->ops[1] = _r1;
5032 : : }
5033 : 193 : res_op->resimplify (lseq, valueize);
5034 : 193 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 547, __FILE__, __LINE__, true);
5035 : 193 : return true;
5036 : : }
5037 : : next_after_fail1081:;
5038 : : }
5039 : : else
5040 : : {
5041 : 930 : {
5042 : 930 : int_range_max vr0, vr1;
5043 : 1860 : if (get_range_query (cfun)->range_of_expr (vr0, captures[0])
5044 : 1860 : && get_range_query (cfun)->range_of_expr (vr1, captures[1])
5045 : 1860 : && range_op_handler (MULT_EXPR).overflow_free_p (vr0, vr1)
5046 : : )
5047 : : {
5048 : 47 : gimple_seq *lseq = seq;
5049 : 47 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1082;
5050 : 47 : {
5051 : 47 : res_op->set_op (MULT_EXPR, type, 2);
5052 : 47 : res_op->ops[0] = captures[0];
5053 : 47 : {
5054 : 47 : tree _o1[2], _r1;
5055 : 47 : _o1[0] = captures[1];
5056 : 47 : _o1[1] = captures[2];
5057 : 47 : gimple_match_op tem_op (res_op->cond.any_else (), div, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
5058 : 47 : tem_op.resimplify (NULL, valueize);
5059 : 47 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
5060 : 47 : if (!_r1) goto next_after_fail1082;
5061 : 47 : res_op->ops[1] = _r1;
5062 : : }
5063 : 47 : res_op->resimplify (lseq, valueize);
5064 : 47 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 548, __FILE__, __LINE__, true);
5065 : 47 : return true;
5066 : : }
5067 : 883 : next_after_fail1082:;
5068 : : }
5069 : 930 : }
5070 : : }
5071 : : }
5072 : : return false;
5073 : : }
5074 : :
5075 : : bool
5076 : 849357 : gimple_simplify_348 (gimple_match_op *res_op, gimple_seq *seq,
5077 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
5078 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
5079 : : const enum tree_code ARG_UNUSED (mod))
5080 : : {
5081 : 849357 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
5082 : 1291025 : if ((TYPE_UNSIGNED (type) || tree_expr_nonnegative_p (captures[0]))
5083 : 490918 : && INTEGRAL_TYPE_P (type)
5084 : 490918 : && INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
5085 : 490918 : && (TYPE_PRECISION (type) <= TYPE_PRECISION (TREE_TYPE (captures[1]))
5086 : 108 : || TYPE_UNSIGNED (TREE_TYPE (captures[1]))
5087 : 108 : || !TYPE_UNSIGNED (type))
5088 : 1340167 : && integer_pow2p (captures[2]) && tree_int_cst_sgn (captures[2]) > 0
5089 : : )
5090 : : {
5091 : 1691 : {
5092 : 1691 : tree utype = TREE_TYPE (captures[1]);
5093 : 1691 : if (!TYPE_OVERFLOW_WRAPS (utype))
5094 : 348 : utype = unsigned_type_for (utype);
5095 : 1691 : gimple_seq *lseq = seq;
5096 : 1691 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1094;
5097 : 1691 : {
5098 : 1691 : res_op->set_op (BIT_AND_EXPR, type, 2);
5099 : 1691 : res_op->ops[0] = captures[0];
5100 : 1691 : {
5101 : 1691 : tree _r1;
5102 : 1691 : gimple_match_op tem_op (res_op->cond.any_else (), ERROR_MARK, error_mark_node, 1);
5103 : 1691 : {
5104 : 1691 : tree _o2[2], _r2;
5105 : 1691 : {
5106 : 1691 : tree _o3[1], _r3;
5107 : 1691 : _o3[0] = captures[1];
5108 : 1691 : if (utype != TREE_TYPE (_o3[0]) /* XXX */
5109 : 1691 : && !useless_type_conversion_p (utype, TREE_TYPE (_o3[0])))
5110 : : {
5111 : 348 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, utype, _o3[0]);
5112 : 348 : tem_op.resimplify (lseq, valueize);
5113 : 348 : _r3 = maybe_push_res_to_seq (&tem_op, lseq);
5114 : 348 : if (!_r3) goto next_after_fail1094;
5115 : : }
5116 : : else
5117 : : _r3 = _o3[0];
5118 : 1691 : _o2[0] = _r3;
5119 : : }
5120 : 1691 : _o2[1] = build_one_cst (utype);
5121 : 1691 : tem_op.set_op (MINUS_EXPR, TREE_TYPE (_o2[0]), 2);
5122 : 1691 : tem_op.ops[0] = _o2[0];
5123 : 1691 : tem_op.ops[1] = _o2[1];
5124 : 1691 : tem_op.resimplify (lseq, valueize);
5125 : : }
5126 : 1691 : if (type != tem_op.type
5127 : 1691 : && !useless_type_conversion_p (type, tem_op.type))
5128 : : {
5129 : 348 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
5130 : 348 : if (!_r1) goto next_after_fail1094;
5131 : 348 : tem_op.set_op (NOP_EXPR, type, 1);
5132 : 348 : tem_op.ops[0] = _r1;
5133 : 348 : tem_op.resimplify (lseq, valueize);
5134 : : }
5135 : 1691 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
5136 : 1691 : if (!_r1) goto next_after_fail1094;
5137 : 1691 : res_op->ops[1] = _r1;
5138 : : }
5139 : 1691 : res_op->resimplify (lseq, valueize);
5140 : 1691 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 560, __FILE__, __LINE__, true);
5141 : 1691 : return true;
5142 : : }
5143 : : next_after_fail1094:;
5144 : : }
5145 : : }
5146 : : return false;
5147 : : }
5148 : :
5149 : : bool
5150 : 4111 : gimple_simplify_362 (gimple_match_op *res_op, gimple_seq *seq,
5151 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
5152 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
5153 : : const enum tree_code ARG_UNUSED (cmp))
5154 : : {
5155 : 4111 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
5156 : 8222 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
5157 : 8002 : && TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[0]))
5158 : : )
5159 : : {
5160 : 2976 : if (tree_expr_nonnegative_p (captures[1]) && tree_expr_nonzero_p (captures[1])
5161 : : )
5162 : : {
5163 : 298 : gimple_seq *lseq = seq;
5164 : 298 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1111;
5165 : 298 : {
5166 : 298 : res_op->set_op (cmp, type, 2);
5167 : 298 : res_op->ops[0] = captures[0];
5168 : 298 : res_op->ops[1] = captures[2];
5169 : 298 : res_op->resimplify (lseq, valueize);
5170 : 298 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 577, __FILE__, __LINE__, true);
5171 : 298 : return true;
5172 : : }
5173 : 0 : next_after_fail1111:;
5174 : : }
5175 : : else
5176 : : {
5177 : 2678 : if (TREE_CODE (captures[1]) == INTEGER_CST
5178 : 2678 : && wi::neg_p (wi::to_wide (captures[1]), TYPE_SIGN (TREE_TYPE (captures[1])))
5179 : : )
5180 : : {
5181 : 18 : gimple_seq *lseq = seq;
5182 : 18 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1112;
5183 : 18 : {
5184 : 18 : res_op->set_op (cmp, type, 2);
5185 : 18 : res_op->ops[0] = captures[2];
5186 : 18 : res_op->ops[1] = captures[0];
5187 : 18 : res_op->resimplify (lseq, valueize);
5188 : 18 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 578, __FILE__, __LINE__, true);
5189 : 18 : return true;
5190 : : }
5191 : 0 : next_after_fail1112:;
5192 : : }
5193 : : }
5194 : : }
5195 : : return false;
5196 : : }
5197 : :
5198 : : bool
5199 : 42808 : gimple_simplify_372 (gimple_match_op *res_op, gimple_seq *seq,
5200 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
5201 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
5202 : : const enum tree_code ARG_UNUSED (cmp),
5203 : : const enum tree_code ARG_UNUSED (out))
5204 : : {
5205 : 42808 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
5206 : 42808 : if (TYPE_OVERFLOW_WRAPS (TREE_TYPE (captures[1]))
5207 : 42808 : && types_match (TREE_TYPE (captures[3]), TREE_TYPE (captures[0]))
5208 : 42808 : && tree_nop_conversion_p (TREE_TYPE (captures[2]), TREE_TYPE (captures[3]))
5209 : 79153 : && wi::to_wide (captures[4]) != 0
5210 : 42808 : && single_use (captures[1])
5211 : : )
5212 : : {
5213 : 6463 : {
5214 : 6463 : unsigned int prec = TYPE_PRECISION (TREE_TYPE (captures[3]));
5215 : 6463 : signop sign = TYPE_SIGN (TREE_TYPE (captures[3]));
5216 : 6463 : gimple_seq *lseq = seq;
5217 : 6463 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1123;
5218 : 6463 : {
5219 : 6463 : res_op->set_op (out, type, 2);
5220 : 6463 : res_op->ops[0] = captures[3];
5221 : 6463 : res_op->ops[1] = wide_int_to_tree (TREE_TYPE (captures[3]),
5222 : 6463 : wi::max_value (prec, sign)
5223 : 19389 : - wi::to_wide (captures[4]));
5224 : 6463 : res_op->resimplify (lseq, valueize);
5225 : 6463 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 589, __FILE__, __LINE__, true);
5226 : 6463 : return true;
5227 : : }
5228 : 0 : next_after_fail1123:;
5229 : : }
5230 : : }
5231 : : return false;
5232 : : }
5233 : :
5234 : : bool
5235 : 461 : gimple_simplify_379 (gimple_match_op *res_op, gimple_seq *seq,
5236 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
5237 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
5238 : : const enum tree_code ARG_UNUSED (cmp))
5239 : : {
5240 : 461 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
5241 : 922 : if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
5242 : 922 : && TYPE_UNSIGNED (TREE_TYPE (captures[0]))
5243 : : )
5244 : : {
5245 : 4 : gimple_seq *lseq = seq;
5246 : 4 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1162;
5247 : 4 : {
5248 : 4 : res_op->set_op (cmp, type, 2);
5249 : 4 : res_op->ops[0] = captures[1];
5250 : 4 : res_op->ops[1] = captures[0];
5251 : 4 : res_op->resimplify (lseq, valueize);
5252 : 4 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 611, __FILE__, __LINE__, true);
5253 : 4 : return true;
5254 : : }
5255 : 0 : next_after_fail1162:;
5256 : : }
5257 : : return false;
5258 : : }
5259 : :
5260 : : bool
5261 : 988 : gimple_simplify_382 (gimple_match_op *res_op, gimple_seq *seq,
5262 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
5263 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
5264 : : const enum tree_code ARG_UNUSED (cmp),
5265 : : const enum tree_code ARG_UNUSED (out))
5266 : : {
5267 : 988 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
5268 : 988 : if (TYPE_UNSIGNED (TREE_TYPE (captures[2])) && !VECTOR_TYPE_P (TREE_TYPE (captures[2]))
5269 : : )
5270 : : {
5271 : 964 : {
5272 : 964 : tree t = TREE_TYPE (captures[2]), cpx = build_complex_type (t);
5273 : 964 : gimple_seq *lseq = seq;
5274 : 964 : if (lseq
5275 : 352 : && (!single_use (captures[0])))
5276 : 934 : lseq = NULL;
5277 : 964 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1165;
5278 : 964 : {
5279 : 964 : res_op->set_op (out, type, 2);
5280 : 964 : {
5281 : 964 : tree _o1[1], _r1;
5282 : 964 : {
5283 : 964 : tree _o2[2], _r2;
5284 : 964 : _o2[0] = captures[2];
5285 : 964 : _o2[1] = captures[1];
5286 : 964 : gimple_match_op tem_op (res_op->cond.any_else (), CFN_MUL_OVERFLOW, cpx, _o2[0], _o2[1]);
5287 : 964 : tem_op.resimplify (lseq, valueize);
5288 : 964 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
5289 : 964 : if (!_r2) goto next_after_fail1165;
5290 : 30 : _o1[0] = _r2;
5291 : : }
5292 : 30 : gimple_match_op tem_op (res_op->cond.any_else (), IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (_o1[0])), _o1[0]);
5293 : 30 : tem_op.resimplify (lseq, valueize);
5294 : 30 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
5295 : 30 : if (!_r1) goto next_after_fail1165;
5296 : 30 : res_op->ops[0] = _r1;
5297 : : }
5298 : 30 : res_op->ops[1] = build_zero_cst (t);
5299 : 30 : res_op->resimplify (lseq, valueize);
5300 : 30 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 614, __FILE__, __LINE__, true);
5301 : 30 : return true;
5302 : : }
5303 : : next_after_fail1165:;
5304 : : }
5305 : : }
5306 : : return false;
5307 : : }
5308 : :
5309 : : bool
5310 : 342132 : gimple_simplify_387 (gimple_match_op *res_op, gimple_seq *seq,
5311 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
5312 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
5313 : : const enum tree_code ARG_UNUSED (cmp),
5314 : : const enum tree_code ARG_UNUSED (icmp))
5315 : : {
5316 : 342132 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
5317 : 676783 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
5318 : 342132 : && TYPE_UNSIGNED (TREE_TYPE (captures[0]))
5319 : 212068 : && TYPE_PRECISION (TREE_TYPE (captures[0])) > 1
5320 : 896332 : && (wi::to_wide (captures[2])
5321 : 978336 : == wi::max_value (TYPE_PRECISION (TREE_TYPE (captures[0])), SIGNED) - 1)
5322 : : )
5323 : : {
5324 : 21 : {
5325 : 21 : tree stype = signed_type_for (TREE_TYPE (captures[0]));
5326 : 21 : gimple_seq *lseq = seq;
5327 : 21 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1177;
5328 : 21 : {
5329 : 21 : res_op->set_op (icmp, type, 2);
5330 : 21 : {
5331 : 21 : tree _o1[1], _r1;
5332 : 21 : _o1[0] = captures[0];
5333 : 21 : if (stype != TREE_TYPE (_o1[0]) /* XXX */
5334 : 21 : && !useless_type_conversion_p (stype, TREE_TYPE (_o1[0])))
5335 : : {
5336 : 21 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, stype, _o1[0]);
5337 : 21 : tem_op.resimplify (lseq, valueize);
5338 : 21 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
5339 : 21 : if (!_r1) goto next_after_fail1177;
5340 : : }
5341 : : else
5342 : : _r1 = _o1[0];
5343 : 21 : res_op->ops[0] = _r1;
5344 : : }
5345 : 21 : res_op->ops[1] = build_int_cst (stype, 0);
5346 : 21 : res_op->resimplify (lseq, valueize);
5347 : 21 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 626, __FILE__, __LINE__, true);
5348 : 21 : return true;
5349 : : }
5350 : : next_after_fail1177:;
5351 : : }
5352 : : }
5353 : : return false;
5354 : : }
5355 : :
5356 : : bool
5357 : 384 : gimple_simplify_390 (gimple_match_op *res_op, gimple_seq *seq,
5358 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
5359 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
5360 : : const enum tree_code ARG_UNUSED (cmp))
5361 : : {
5362 : 384 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
5363 : 768 : if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
5364 : 768 : && TYPE_UNSIGNED (TREE_TYPE (captures[0]))
5365 : : )
5366 : : {
5367 : 0 : gimple_seq *lseq = seq;
5368 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1180;
5369 : 0 : {
5370 : 0 : res_op->set_op (cmp, type, 2);
5371 : 0 : res_op->ops[0] = captures[1];
5372 : 0 : res_op->ops[1] = captures[0];
5373 : 0 : res_op->resimplify (lseq, valueize);
5374 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 611, __FILE__, __LINE__, true);
5375 : 0 : return true;
5376 : : }
5377 : 0 : next_after_fail1180:;
5378 : : }
5379 : : return false;
5380 : : }
5381 : :
5382 : : bool
5383 : 944 : gimple_simplify_393 (gimple_match_op *res_op, gimple_seq *seq,
5384 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
5385 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
5386 : : const enum tree_code ARG_UNUSED (cmp),
5387 : : const enum tree_code ARG_UNUSED (out))
5388 : : {
5389 : 944 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
5390 : 944 : if (TYPE_UNSIGNED (TREE_TYPE (captures[2])) && !VECTOR_TYPE_P (TREE_TYPE (captures[2]))
5391 : : )
5392 : : {
5393 : 880 : {
5394 : 880 : tree t = TREE_TYPE (captures[2]), cpx = build_complex_type (t);
5395 : 880 : gimple_seq *lseq = seq;
5396 : 880 : if (lseq
5397 : 186 : && (!single_use (captures[0])))
5398 : 878 : lseq = NULL;
5399 : 880 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1183;
5400 : 880 : {
5401 : 880 : res_op->set_op (out, type, 2);
5402 : 880 : {
5403 : 880 : tree _o1[1], _r1;
5404 : 880 : {
5405 : 880 : tree _o2[2], _r2;
5406 : 880 : _o2[0] = captures[2];
5407 : 880 : _o2[1] = captures[1];
5408 : 880 : gimple_match_op tem_op (res_op->cond.any_else (), CFN_MUL_OVERFLOW, cpx, _o2[0], _o2[1]);
5409 : 880 : tem_op.resimplify (lseq, valueize);
5410 : 880 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
5411 : 880 : if (!_r2) goto next_after_fail1183;
5412 : 2 : _o1[0] = _r2;
5413 : : }
5414 : 2 : gimple_match_op tem_op (res_op->cond.any_else (), IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (_o1[0])), _o1[0]);
5415 : 2 : tem_op.resimplify (lseq, valueize);
5416 : 2 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
5417 : 2 : if (!_r1) goto next_after_fail1183;
5418 : 2 : res_op->ops[0] = _r1;
5419 : : }
5420 : 2 : res_op->ops[1] = build_zero_cst (t);
5421 : 2 : res_op->resimplify (lseq, valueize);
5422 : 2 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 614, __FILE__, __LINE__, true);
5423 : 2 : return true;
5424 : : }
5425 : : next_after_fail1183:;
5426 : : }
5427 : : }
5428 : : return false;
5429 : : }
5430 : :
5431 : : bool
5432 : 9827 : gimple_simplify_400 (gimple_match_op *res_op, gimple_seq *seq,
5433 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
5434 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
5435 : : {
5436 : 9827 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
5437 : 19654 : if (INTEGRAL_TYPE_P (type)
5438 : 9827 : && wi::ltu_p (wi::to_wide (captures[1]), element_precision (type))
5439 : 7384 : && wi::ltu_p (wi::to_wide (captures[2]), element_precision (type))
5440 : 7384 : && wi::to_widest (captures[2]) >= wi::to_widest (captures[1])
5441 : 29481 : && wi::to_widest (captures[1]) <= wi::ctz (get_nonzero_bits (captures[0]))
5442 : : )
5443 : : {
5444 : 22 : gimple_seq *lseq = seq;
5445 : 22 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1194;
5446 : 22 : {
5447 : 22 : res_op->set_op (LSHIFT_EXPR, type, 2);
5448 : 22 : {
5449 : 22 : tree _o1[1], _r1;
5450 : 22 : _o1[0] = captures[0];
5451 : 22 : if (type != TREE_TYPE (_o1[0]) /* XXX */
5452 : 22 : && !useless_type_conversion_p (type, TREE_TYPE (_o1[0])))
5453 : : {
5454 : 6 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, type, _o1[0]);
5455 : 6 : tem_op.resimplify (lseq, valueize);
5456 : 6 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
5457 : 6 : if (!_r1) goto next_after_fail1194;
5458 : : }
5459 : : else
5460 : : _r1 = _o1[0];
5461 : 20 : res_op->ops[0] = _r1;
5462 : : }
5463 : 20 : {
5464 : 20 : tree _o1[2], _r1;
5465 : 20 : _o1[0] = captures[2];
5466 : 20 : _o1[1] = captures[1];
5467 : 20 : gimple_match_op tem_op (res_op->cond.any_else (), MINUS_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
5468 : 20 : tem_op.resimplify (lseq, valueize);
5469 : 20 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
5470 : 20 : if (!_r1) goto next_after_fail1194;
5471 : 20 : res_op->ops[1] = _r1;
5472 : : }
5473 : 20 : res_op->resimplify (lseq, valueize);
5474 : 20 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 639, __FILE__, __LINE__, true);
5475 : 20 : return true;
5476 : : }
5477 : : next_after_fail1194:;
5478 : : }
5479 : : return false;
5480 : : }
5481 : :
5482 : : bool
5483 : 159 : gimple_simplify_405 (gimple_match_op *res_op, gimple_seq *seq,
5484 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
5485 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
5486 : : const enum tree_code ARG_UNUSED (shiftrotate))
5487 : : {
5488 : 159 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
5489 : 159 : {
5490 : 159 : tree tem = uniform_vector_p (captures[1]);
5491 : 159 : if (tem
5492 : : )
5493 : : {
5494 : 0 : gimple_seq *lseq = seq;
5495 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1199;
5496 : 0 : {
5497 : 0 : res_op->set_op (shiftrotate, type, 2);
5498 : 0 : res_op->ops[0] = captures[0];
5499 : 0 : res_op->ops[1] = tem;
5500 : 0 : res_op->resimplify (lseq, valueize);
5501 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 643, __FILE__, __LINE__, true);
5502 : 0 : return true;
5503 : : }
5504 : 0 : next_after_fail1199:;
5505 : : }
5506 : : }
5507 : : return false;
5508 : : }
5509 : :
5510 : : bool
5511 : 28834 : gimple_simplify_409 (gimple_match_op *res_op, gimple_seq *seq,
5512 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
5513 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
5514 : : const enum tree_code ARG_UNUSED (bit_op),
5515 : : const enum tree_code ARG_UNUSED (shift))
5516 : : {
5517 : 28834 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
5518 : 28834 : if (tree_nop_conversion_p (type, TREE_TYPE (captures[2]))
5519 : : )
5520 : : {
5521 : 28834 : {
5522 : 28834 : tree mask = int_const_binop (shift, fold_convert (type, captures[3]), captures[4]);
5523 : 28834 : if (mask
5524 : : )
5525 : : {
5526 : 28811 : gimple_seq *lseq = seq;
5527 : 28811 : if (lseq
5528 : 9003 : && (!single_use (captures[0])
5529 : 1387 : || !single_use (captures[1])))
5530 : 27424 : lseq = NULL;
5531 : 28811 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1206;
5532 : 28811 : {
5533 : 28811 : res_op->set_op (bit_op, type, 2);
5534 : 28811 : {
5535 : 28811 : tree _o1[2], _r1;
5536 : 28811 : {
5537 : 28811 : tree _o2[1], _r2;
5538 : 28811 : _o2[0] = captures[2];
5539 : 28811 : if (type != TREE_TYPE (_o2[0]) /* XXX */
5540 : 28811 : && !useless_type_conversion_p (type, TREE_TYPE (_o2[0])))
5541 : : {
5542 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, type, _o2[0]);
5543 : 0 : tem_op.resimplify (lseq, valueize);
5544 : 0 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
5545 : 0 : if (!_r2) goto next_after_fail1206;
5546 : : }
5547 : : else
5548 : : _r2 = _o2[0];
5549 : 28811 : _o1[0] = _r2;
5550 : : }
5551 : 28811 : _o1[1] = captures[4];
5552 : 28811 : gimple_match_op tem_op (res_op->cond.any_else (), shift, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
5553 : 28811 : tem_op.resimplify (lseq, valueize);
5554 : 28811 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
5555 : 28811 : if (!_r1) goto next_after_fail1206;
5556 : 1511 : res_op->ops[0] = _r1;
5557 : : }
5558 : 1511 : res_op->ops[1] = mask;
5559 : 1511 : res_op->resimplify (lseq, valueize);
5560 : 1511 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 649, __FILE__, __LINE__, true);
5561 : 1511 : return true;
5562 : : }
5563 : : next_after_fail1206:;
5564 : : }
5565 : : }
5566 : : }
5567 : : return false;
5568 : : }
5569 : :
5570 : : bool
5571 : 14311 : gimple_simplify_415 (gimple_match_op *res_op, gimple_seq *seq,
5572 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
5573 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
5574 : : const enum tree_code ARG_UNUSED (eqne))
5575 : : {
5576 : 14311 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
5577 : 14311 : if ((integer_zerop (captures[1]) || integer_onep (captures[1]))
5578 : : )
5579 : : {
5580 : 14311 : if ((eqne == EQ_EXPR) ^ integer_zerop (captures[1])
5581 : : )
5582 : : {
5583 : 7232 : gimple_seq *lseq = seq;
5584 : 7232 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1217;
5585 : 7232 : {
5586 : 7232 : res_op->set_op (NOP_EXPR, type, 1);
5587 : 7232 : res_op->ops[0] = captures[0];
5588 : 7232 : res_op->resimplify (lseq, valueize);
5589 : 7232 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 660, __FILE__, __LINE__, true);
5590 : 7232 : return true;
5591 : : }
5592 : 0 : next_after_fail1217:;
5593 : : }
5594 : : else
5595 : : {
5596 : 7079 : if (types_match (type, TREE_TYPE (captures[0]))
5597 : : )
5598 : : {
5599 : 1756 : gimple_seq *lseq = seq;
5600 : 1756 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1218;
5601 : 1756 : {
5602 : 1756 : res_op->set_op (BIT_XOR_EXPR, type, 2);
5603 : 1756 : res_op->ops[0] = captures[0];
5604 : 1756 : res_op->ops[1] = build_one_cst (type);
5605 : 1756 : res_op->resimplify (lseq, valueize);
5606 : 1756 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 661, __FILE__, __LINE__, true);
5607 : 1756 : return true;
5608 : : }
5609 : 0 : next_after_fail1218:;
5610 : : }
5611 : : }
5612 : : }
5613 : : return false;
5614 : : }
5615 : :
5616 : : bool
5617 : 368 : gimple_simplify_418 (gimple_match_op *res_op, gimple_seq *seq,
5618 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
5619 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
5620 : : const combined_fn ARG_UNUSED (copysigns))
5621 : : {
5622 : 368 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
5623 : 368 : if (optimize
5624 : 368 : && !HONOR_SNANS (captures[0])
5625 : 368 : && types_match (type, TREE_TYPE (captures[1]))
5626 : 368 : && types_match (type, TREE_TYPE (captures[2]))
5627 : 368 : && TYPE_PRECISION (type) < TYPE_PRECISION (TREE_TYPE (captures[0]))
5628 : 736 : && direct_internal_fn_supported_p (IFN_COPYSIGN,
5629 : : type, OPTIMIZE_FOR_BOTH)
5630 : : )
5631 : : {
5632 : 24 : gimple_seq *lseq = seq;
5633 : 24 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1221;
5634 : 24 : {
5635 : 24 : res_op->set_op (CFN_COPYSIGN, type, 2);
5636 : 24 : res_op->ops[0] = captures[1];
5637 : 24 : res_op->ops[1] = captures[2];
5638 : 24 : res_op->resimplify (lseq, valueize);
5639 : 24 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 664, __FILE__, __LINE__, true);
5640 : 24 : return true;
5641 : : }
5642 : 0 : next_after_fail1221:;
5643 : : }
5644 : : return false;
5645 : : }
5646 : :
5647 : : bool
5648 : 601354 : gimple_simplify_423 (gimple_match_op *res_op, gimple_seq *seq,
5649 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
5650 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
5651 : : const enum tree_code ARG_UNUSED (op))
5652 : : {
5653 : 601354 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
5654 : 601354 : if (INTEGRAL_TYPE_P (type)
5655 : 385418 : && op != MULT_EXPR
5656 : 385418 : && op != RDIV_EXPR
5657 : 271331 : && INTEGRAL_TYPE_P (TREE_TYPE (captures[2]))
5658 : 271331 : && INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
5659 : 271331 : && type_has_mode_precision_p (TREE_TYPE (captures[2]))
5660 : 270207 : && type_has_mode_precision_p (TREE_TYPE (captures[4]))
5661 : 258160 : && type_has_mode_precision_p (type)
5662 : 242812 : && TYPE_PRECISION (TREE_TYPE (captures[1])) > TYPE_PRECISION (TREE_TYPE (captures[2]))
5663 : 0 : && types_match (captures[2], type)
5664 : 601354 : && (types_match (captures[2], captures[4])
5665 : 0 : || poly_int_tree_p (captures[3]))
5666 : : )
5667 : : {
5668 : 0 : if (TYPE_OVERFLOW_WRAPS (TREE_TYPE (captures[2]))
5669 : : )
5670 : : {
5671 : 0 : gimple_seq *lseq = seq;
5672 : 0 : if (lseq
5673 : 0 : && (!single_use (captures[0])))
5674 : 0 : lseq = NULL;
5675 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1232;
5676 : 0 : {
5677 : 0 : res_op->set_op (op, type, 2);
5678 : 0 : res_op->ops[0] = captures[2];
5679 : 0 : {
5680 : 0 : tree _o1[1], _r1;
5681 : 0 : _o1[0] = captures[4];
5682 : 0 : if (type != TREE_TYPE (_o1[0]) /* XXX */
5683 : 0 : && !useless_type_conversion_p (type, TREE_TYPE (_o1[0])))
5684 : : {
5685 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, type, _o1[0]);
5686 : 0 : tem_op.resimplify (lseq, valueize);
5687 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
5688 : 0 : if (!_r1) goto next_after_fail1232;
5689 : : }
5690 : : else
5691 : : _r1 = _o1[0];
5692 : 0 : res_op->ops[1] = _r1;
5693 : : }
5694 : 0 : res_op->resimplify (lseq, valueize);
5695 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 667, __FILE__, __LINE__, true);
5696 : 0 : return true;
5697 : : }
5698 : : next_after_fail1232:;
5699 : : }
5700 : : else
5701 : : {
5702 : 0 : {
5703 : 0 : tree utype = unsigned_type_for (TREE_TYPE (captures[2]));
5704 : 0 : gimple_seq *lseq = seq;
5705 : 0 : if (lseq
5706 : 0 : && (!single_use (captures[0])))
5707 : 0 : lseq = NULL;
5708 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1233;
5709 : 0 : {
5710 : 0 : res_op->set_op (NOP_EXPR, type, 1);
5711 : 0 : {
5712 : 0 : tree _o1[2], _r1;
5713 : 0 : {
5714 : 0 : tree _o2[1], _r2;
5715 : 0 : _o2[0] = captures[2];
5716 : 0 : if (utype != TREE_TYPE (_o2[0]) /* XXX */
5717 : 0 : && !useless_type_conversion_p (utype, TREE_TYPE (_o2[0])))
5718 : : {
5719 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, utype, _o2[0]);
5720 : 0 : tem_op.resimplify (lseq, valueize);
5721 : 0 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
5722 : 0 : if (!_r2) goto next_after_fail1233;
5723 : : }
5724 : : else
5725 : : _r2 = _o2[0];
5726 : 0 : _o1[0] = _r2;
5727 : : }
5728 : 0 : {
5729 : 0 : tree _o2[1], _r2;
5730 : 0 : _o2[0] = captures[4];
5731 : 0 : if (utype != TREE_TYPE (_o2[0]) /* XXX */
5732 : 0 : && !useless_type_conversion_p (utype, TREE_TYPE (_o2[0])))
5733 : : {
5734 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, utype, _o2[0]);
5735 : 0 : tem_op.resimplify (lseq, valueize);
5736 : 0 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
5737 : 0 : if (!_r2) goto next_after_fail1233;
5738 : : }
5739 : : else
5740 : : _r2 = _o2[0];
5741 : 0 : _o1[1] = _r2;
5742 : : }
5743 : 0 : (*res_op).set_op (op, TREE_TYPE (_o1[0]), 2);
5744 : 0 : (*res_op).ops[0] = _o1[0];
5745 : 0 : (*res_op).ops[1] = _o1[1];
5746 : 0 : (*res_op).resimplify (lseq, valueize);
5747 : : }
5748 : 0 : if (type != res_op->type
5749 : 0 : && !useless_type_conversion_p (type, res_op->type))
5750 : : {
5751 : 0 : if (!(res_op->ops[0] = maybe_push_res_to_seq (res_op, lseq))) goto next_after_fail1233;
5752 : 0 : res_op->set_op (NOP_EXPR, type, 1);
5753 : 0 : res_op->resimplify (lseq, valueize);
5754 : : }
5755 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 668, __FILE__, __LINE__, true);
5756 : 0 : return true;
5757 : : }
5758 : : next_after_fail1233:;
5759 : : }
5760 : : }
5761 : : }
5762 : : else
5763 : : {
5764 : 538241 : if (FLOAT_TYPE_P (type)
5765 : 664467 : && DECIMAL_FLOAT_TYPE_P (TREE_TYPE (captures[0]))
5766 : 63113 : == DECIMAL_FLOAT_TYPE_P (type)
5767 : : )
5768 : : {
5769 : 63113 : {
5770 : 63113 : tree arg0 = strip_float_extensions (captures[2]);
5771 : 63113 : tree arg1 = strip_float_extensions (captures[4]);
5772 : 63113 : tree itype = TREE_TYPE (captures[0]);
5773 : 63113 : tree ty1 = TREE_TYPE (arg0);
5774 : 63113 : tree ty2 = TREE_TYPE (arg1);
5775 : 63113 : enum tree_code code = TREE_CODE (itype);
5776 : 0 : if (FLOAT_TYPE_P (ty1)
5777 : 63113 : && FLOAT_TYPE_P (ty2)
5778 : : )
5779 : : {
5780 : 63113 : {
5781 : 63113 : tree newtype = type;
5782 : 63113 : if (TYPE_MODE (ty1) == SDmode
5783 : 63113 : || TYPE_MODE (ty2) == SDmode
5784 : 126226 : || TYPE_MODE (type) == SDmode)
5785 : 0 : newtype = dfloat32_type_node;
5786 : 63113 : if (TYPE_MODE (ty1) == DDmode
5787 : 63113 : || TYPE_MODE (ty2) == DDmode
5788 : 126226 : || TYPE_MODE (type) == DDmode)
5789 : 0 : newtype = dfloat64_type_node;
5790 : 63113 : if (TYPE_MODE (ty1) == TDmode
5791 : 63113 : || TYPE_MODE (ty2) == TDmode
5792 : 126226 : || TYPE_MODE (type) == TDmode)
5793 : 0 : newtype = dfloat128_type_node;
5794 : 63113 : if ((newtype == dfloat32_type_node
5795 : 63113 : || newtype == dfloat64_type_node
5796 : 63113 : || newtype == dfloat128_type_node)
5797 : 0 : && newtype == type
5798 : 63113 : && types_match (newtype, type)
5799 : : )
5800 : : {
5801 : 0 : gimple_seq *lseq = seq;
5802 : 0 : if (lseq
5803 : 0 : && (!single_use (captures[0])))
5804 : 0 : lseq = NULL;
5805 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1234;
5806 : 0 : {
5807 : 0 : res_op->set_op (op, type, 2);
5808 : 0 : {
5809 : 0 : tree _o1[1], _r1;
5810 : 0 : _o1[0] = captures[2];
5811 : 0 : if (newtype != TREE_TYPE (_o1[0]) /* XXX */
5812 : 0 : && !useless_type_conversion_p (newtype, TREE_TYPE (_o1[0])))
5813 : : {
5814 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, newtype, _o1[0]);
5815 : 0 : tem_op.resimplify (lseq, valueize);
5816 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
5817 : 0 : if (!_r1) goto next_after_fail1234;
5818 : : }
5819 : : else
5820 : : _r1 = _o1[0];
5821 : 0 : res_op->ops[0] = _r1;
5822 : : }
5823 : 0 : {
5824 : 0 : tree _o1[1], _r1;
5825 : 0 : _o1[0] = captures[4];
5826 : 0 : if (newtype != TREE_TYPE (_o1[0]) /* XXX */
5827 : 0 : && !useless_type_conversion_p (newtype, TREE_TYPE (_o1[0])))
5828 : : {
5829 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, newtype, _o1[0]);
5830 : 0 : tem_op.resimplify (lseq, valueize);
5831 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
5832 : 0 : if (!_r1) goto next_after_fail1234;
5833 : : }
5834 : : else
5835 : : _r1 = _o1[0];
5836 : 0 : res_op->ops[1] = _r1;
5837 : : }
5838 : 0 : res_op->resimplify (lseq, valueize);
5839 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 669, __FILE__, __LINE__, true);
5840 : 0 : return true;
5841 : : }
5842 : : next_after_fail1234:;
5843 : : }
5844 : : else
5845 : : {
5846 : 63113 : {
5847 : 63113 : if (element_precision (ty1) > element_precision (newtype))
5848 : 59385 : newtype = ty1;
5849 : 63113 : if (element_precision (ty2) > element_precision (newtype))
5850 : 0 : newtype = ty2;
5851 : 63113 : if (element_precision (newtype) < element_precision (itype)
5852 : 3306 : && (!VECTOR_MODE_P (TYPE_MODE (newtype))
5853 : 0 : || target_supports_op_p (newtype, op, optab_default))
5854 : 3306 : && (flag_unsafe_math_optimizations
5855 : 3306 : || (element_precision (newtype) == element_precision (type)
5856 : 3306 : && real_can_shorten_arithmetic (element_mode (itype),
5857 : : element_mode (type))
5858 : 29 : && !excess_precision_type (newtype)))
5859 : 63127 : && !types_match (itype, newtype)
5860 : : )
5861 : : {
5862 : 14 : gimple_seq *lseq = seq;
5863 : 14 : if (lseq
5864 : 7 : && (!single_use (captures[0])))
5865 : 7 : lseq = NULL;
5866 : 14 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1235;
5867 : 14 : {
5868 : 14 : res_op->set_op (NOP_EXPR, type, 1);
5869 : 14 : {
5870 : 14 : tree _o1[2], _r1;
5871 : 14 : {
5872 : 14 : tree _o2[1], _r2;
5873 : 14 : _o2[0] = captures[2];
5874 : 14 : if (newtype != TREE_TYPE (_o2[0]) /* XXX */
5875 : 14 : && !useless_type_conversion_p (newtype, TREE_TYPE (_o2[0])))
5876 : : {
5877 : 14 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, newtype, _o2[0]);
5878 : 14 : tem_op.resimplify (lseq, valueize);
5879 : 14 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
5880 : 14 : if (!_r2) goto next_after_fail1235;
5881 : : }
5882 : : else
5883 : : _r2 = _o2[0];
5884 : 14 : _o1[0] = _r2;
5885 : : }
5886 : 14 : {
5887 : 14 : tree _o2[1], _r2;
5888 : 14 : _o2[0] = captures[4];
5889 : 14 : if (newtype != TREE_TYPE (_o2[0]) /* XXX */
5890 : 14 : && !useless_type_conversion_p (newtype, TREE_TYPE (_o2[0])))
5891 : : {
5892 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, newtype, _o2[0]);
5893 : 0 : tem_op.resimplify (lseq, valueize);
5894 : 0 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
5895 : 0 : if (!_r2) goto next_after_fail1235;
5896 : : }
5897 : : else
5898 : : _r2 = _o2[0];
5899 : 14 : _o1[1] = _r2;
5900 : : }
5901 : 14 : (*res_op).set_op (op, TREE_TYPE (_o1[0]), 2);
5902 : 14 : (*res_op).ops[0] = _o1[0];
5903 : 14 : (*res_op).ops[1] = _o1[1];
5904 : 14 : (*res_op).resimplify (lseq, valueize);
5905 : : }
5906 : 14 : if (type != res_op->type
5907 : 14 : && !useless_type_conversion_p (type, res_op->type))
5908 : : {
5909 : 0 : if (!(res_op->ops[0] = maybe_push_res_to_seq (res_op, lseq))) goto next_after_fail1235;
5910 : 0 : res_op->set_op (NOP_EXPR, type, 1);
5911 : 0 : res_op->resimplify (lseq, valueize);
5912 : : }
5913 : 14 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 670, __FILE__, __LINE__, true);
5914 : 14 : return true;
5915 : : }
5916 : : next_after_fail1235:;
5917 : : }
5918 : : }
5919 : : }
5920 : : }
5921 : : }
5922 : : }
5923 : : }
5924 : : }
5925 : : return false;
5926 : : }
5927 : :
5928 : : bool
5929 : 9980084 : gimple_simplify_445 (gimple_match_op *res_op, gimple_seq *seq,
5930 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
5931 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
5932 : : {
5933 : 9980084 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
5934 : 9980084 : {
5935 : 9980084 : bool wascmp;
5936 : 9980084 : if (types_match (TREE_TYPE (captures[0]), TREE_TYPE (captures[1]))
5937 : 9980084 : && bitwise_inverted_equal_p (captures[0], captures[1], wascmp)
5938 : : )
5939 : : {
5940 : 1728 : gimple_seq *lseq = seq;
5941 : 1728 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1262;
5942 : 1728 : {
5943 : 1728 : tree tem;
5944 : 1728 : tem = wascmp ? constant_boolean_node (false, type) : build_zero_cst (type);
5945 : 1728 : res_op->set_value (tem);
5946 : 1728 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 693, __FILE__, __LINE__, true);
5947 : 1728 : return true;
5948 : : }
5949 : 0 : next_after_fail1262:;
5950 : : }
5951 : : }
5952 : 9978356 : return false;
5953 : : }
5954 : :
5955 : : bool
5956 : 4 : gimple_simplify_451 (gimple_match_op *res_op, gimple_seq *seq,
5957 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
5958 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
5959 : : {
5960 : 4 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
5961 : 4 : gimple_seq *lseq = seq;
5962 : 4 : if (lseq
5963 : 2 : && (!single_use (captures[3])
5964 : 2 : || !single_use (captures[4])))
5965 : 2 : lseq = NULL;
5966 : 4 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1268;
5967 : 4 : {
5968 : 4 : res_op->set_op (BIT_AND_EXPR, type, 2);
5969 : 4 : res_op->ops[0] = captures[0];
5970 : 4 : {
5971 : 4 : tree _o1[1], _r1;
5972 : 4 : _o1[0] = captures[5];
5973 : 4 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_NOT_EXPR, TREE_TYPE (_o1[0]), _o1[0]);
5974 : 4 : tem_op.resimplify (lseq, valueize);
5975 : 4 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
5976 : 4 : if (!_r1) goto next_after_fail1268;
5977 : 2 : res_op->ops[1] = _r1;
5978 : : }
5979 : 2 : res_op->resimplify (lseq, valueize);
5980 : 2 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 699, __FILE__, __LINE__, true);
5981 : : return true;
5982 : : }
5983 : : next_after_fail1268:;
5984 : : return false;
5985 : : }
5986 : :
5987 : : bool
5988 : 931 : gimple_simplify_457 (gimple_match_op *res_op, gimple_seq *seq,
5989 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
5990 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
5991 : : {
5992 : 931 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
5993 : 931 : if (INTEGRAL_TYPE_P (type)
5994 : 931 : && INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
5995 : 931 : && TREE_CODE (TREE_TYPE (captures[0])) != BOOLEAN_TYPE
5996 : 1862 : && (!TYPE_UNSIGNED (TREE_TYPE (captures[0]))
5997 : 486 : || TYPE_PRECISION (type) <= TYPE_PRECISION (TREE_TYPE (captures[0])))
5998 : : )
5999 : : {
6000 : 931 : gimple_seq *lseq = seq;
6001 : 931 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1274;
6002 : 931 : {
6003 : 931 : res_op->set_op (MULT_EXPR, type, 2);
6004 : 931 : {
6005 : 931 : tree _o1[1], _r1;
6006 : 931 : _o1[0] = captures[0];
6007 : 931 : if (type != TREE_TYPE (_o1[0]) /* XXX */
6008 : 931 : && !useless_type_conversion_p (type, TREE_TYPE (_o1[0])))
6009 : : {
6010 : 8 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, type, _o1[0]);
6011 : 8 : tem_op.resimplify (lseq, valueize);
6012 : 8 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
6013 : 8 : if (!_r1) goto next_after_fail1274;
6014 : : }
6015 : : else
6016 : : _r1 = _o1[0];
6017 : 931 : res_op->ops[0] = _r1;
6018 : : }
6019 : 931 : res_op->ops[1] = captures[1];
6020 : 931 : res_op->resimplify (lseq, valueize);
6021 : 931 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 704, __FILE__, __LINE__, true);
6022 : 931 : return true;
6023 : : }
6024 : : next_after_fail1274:;
6025 : : }
6026 : : return false;
6027 : : }
6028 : :
6029 : : bool
6030 : 78942 : gimple_simplify_462 (gimple_match_op *res_op, gimple_seq *seq,
6031 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
6032 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
6033 : : {
6034 : 78942 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
6035 : 78942 : {
6036 : 78942 : bool wascmp;
6037 : 78942 : if (bitwise_inverted_equal_p (captures[0], captures[2], wascmp)
6038 : 78942 : || bitwise_inverted_equal_p (captures[1], captures[2], wascmp)
6039 : : )
6040 : : {
6041 : 103 : gimple_seq *lseq = seq;
6042 : 103 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1279;
6043 : 103 : {
6044 : 103 : tree tem;
6045 : 103 : tem = wascmp ? constant_boolean_node (false, type) : build_zero_cst (type);
6046 : 103 : res_op->set_value (tem);
6047 : 103 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 709, __FILE__, __LINE__, true);
6048 : 103 : return true;
6049 : : }
6050 : 0 : next_after_fail1279:;
6051 : : }
6052 : : }
6053 : 78839 : return false;
6054 : : }
6055 : :
6056 : : bool
6057 : 0 : gimple_simplify_465 (gimple_match_op *res_op, gimple_seq *seq,
6058 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
6059 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
6060 : : const enum tree_code ARG_UNUSED (cmp))
6061 : : {
6062 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
6063 : 0 : if (!canonicalize_math_p ()
6064 : : )
6065 : : {
6066 : 0 : if (INTEGRAL_TYPE_P (type)
6067 : 0 : && INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
6068 : : )
6069 : : {
6070 : 0 : gimple_seq *lseq = seq;
6071 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1282;
6072 : 0 : {
6073 : 0 : res_op->set_op (COND_EXPR, type, 3);
6074 : 0 : res_op->ops[0] = captures[0];
6075 : 0 : res_op->ops[1] = captures[3];
6076 : 0 : res_op->ops[2] = build_zero_cst (type);
6077 : 0 : res_op->resimplify (lseq, valueize);
6078 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 711, __FILE__, __LINE__, true);
6079 : 0 : return true;
6080 : : }
6081 : 0 : next_after_fail1282:;
6082 : : }
6083 : : }
6084 : : return false;
6085 : : }
6086 : :
6087 : : bool
6088 : 26 : gimple_simplify_472 (gimple_match_op *res_op, gimple_seq *seq,
6089 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
6090 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
6091 : : const enum tree_code ARG_UNUSED (eqne))
6092 : : {
6093 : 26 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
6094 : 26 : if (eqne == EQ_EXPR
6095 : : )
6096 : : {
6097 : 10 : gimple_seq *lseq = seq;
6098 : 10 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1295;
6099 : 10 : {
6100 : 10 : tree tem;
6101 : 10 : tem = constant_boolean_node (false, type);
6102 : 10 : res_op->set_value (tem);
6103 : 10 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 721, __FILE__, __LINE__, true);
6104 : 10 : return true;
6105 : : }
6106 : 0 : next_after_fail1295:;
6107 : : }
6108 : : else
6109 : : {
6110 : 16 : if (eqne == NE_EXPR
6111 : : )
6112 : : {
6113 : 16 : gimple_seq *lseq = seq;
6114 : 16 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1296;
6115 : 16 : {
6116 : 16 : tree tem;
6117 : 16 : tem = captures[0];
6118 : 16 : res_op->set_value (tem);
6119 : 16 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 722, __FILE__, __LINE__, true);
6120 : 16 : return true;
6121 : : }
6122 : 0 : next_after_fail1296:;
6123 : : }
6124 : : }
6125 : : return false;
6126 : : }
6127 : :
6128 : : bool
6129 : 695518 : gimple_simplify_475 (gimple_match_op *res_op, gimple_seq *seq,
6130 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
6131 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
6132 : : const enum tree_code ARG_UNUSED (code2),
6133 : : const enum tree_code ARG_UNUSED (code1))
6134 : : {
6135 : 695518 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
6136 : 695518 : if ((TREE_CODE (captures[2]) == INTEGER_CST
6137 : 516535 : && TREE_CODE (captures[4]) == INTEGER_CST)
6138 : 1184684 : || ((INTEGRAL_TYPE_P (TREE_TYPE (captures[2]))
6139 : 26785 : || POINTER_TYPE_P (TREE_TYPE (captures[2])))
6140 : 645043 : && operand_equal_p (captures[2], captures[4]))
6141 : : )
6142 : : {
6143 : 27668 : {
6144 : 27668 : int cmp = 0;
6145 : 27668 : if (TREE_CODE (captures[2]) == INTEGER_CST
6146 : 27369 : && TREE_CODE (captures[4]) == INTEGER_CST)
6147 : 27369 : cmp = tree_int_cst_compare (captures[2], captures[4]);
6148 : 27668 : if ((code1 == LT_EXPR || code1 == LE_EXPR)
6149 : 17724 : && (code2 == LT_EXPR || code2 == LE_EXPR)
6150 : : )
6151 : : {
6152 : 71 : if ((cmp < 0) || (cmp == 0 && code1 == LT_EXPR)
6153 : : )
6154 : : {
6155 : 34 : gimple_seq *lseq = seq;
6156 : 34 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1311;
6157 : 34 : {
6158 : 34 : tree tem;
6159 : 34 : tem = captures[0];
6160 : 34 : res_op->set_value (tem);
6161 : 34 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 730, __FILE__, __LINE__, true);
6162 : 34 : return true;
6163 : : }
6164 : 0 : next_after_fail1311:;
6165 : 0 : }
6166 : : else
6167 : : {
6168 : 37 : gimple_seq *lseq = seq;
6169 : 37 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1312;
6170 : 37 : {
6171 : 37 : tree tem;
6172 : 37 : tem = captures[3];
6173 : 37 : res_op->set_value (tem);
6174 : 37 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 731, __FILE__, __LINE__, true);
6175 : 37 : return true;
6176 : : }
6177 : 0 : next_after_fail1312:;
6178 : : }
6179 : : }
6180 : : else
6181 : : {
6182 : 27597 : if ((code1 == GT_EXPR || code1 == GE_EXPR)
6183 : 9944 : && (code2 == GT_EXPR || code2 == GE_EXPR)
6184 : : )
6185 : : {
6186 : 182 : if ((cmp > 0) || (cmp == 0 && code1 == GT_EXPR)
6187 : : )
6188 : : {
6189 : 120 : gimple_seq *lseq = seq;
6190 : 120 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1313;
6191 : 120 : {
6192 : 120 : tree tem;
6193 : 120 : tem = captures[0];
6194 : 120 : res_op->set_value (tem);
6195 : 120 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 732, __FILE__, __LINE__, true);
6196 : 120 : return true;
6197 : : }
6198 : 0 : next_after_fail1313:;
6199 : 0 : }
6200 : : else
6201 : : {
6202 : 62 : gimple_seq *lseq = seq;
6203 : 62 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1314;
6204 : 62 : {
6205 : 62 : tree tem;
6206 : 62 : tem = captures[3];
6207 : 62 : res_op->set_value (tem);
6208 : 62 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 733, __FILE__, __LINE__, true);
6209 : 62 : return true;
6210 : : }
6211 : 0 : next_after_fail1314:;
6212 : : }
6213 : : }
6214 : : else
6215 : : {
6216 : 27415 : if (cmp == 0
6217 : 381 : && ((code1 == LE_EXPR && code2 == GE_EXPR)
6218 : 351 : || (code1 == GE_EXPR && code2 == LE_EXPR))
6219 : : )
6220 : : {
6221 : 101 : gimple_seq *lseq = seq;
6222 : 101 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1315;
6223 : 101 : {
6224 : 101 : res_op->set_op (EQ_EXPR, type, 2);
6225 : 101 : res_op->ops[0] = captures[1];
6226 : 101 : res_op->ops[1] = captures[2];
6227 : 101 : res_op->resimplify (lseq, valueize);
6228 : 101 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 734, __FILE__, __LINE__, true);
6229 : 101 : return true;
6230 : : }
6231 : 0 : next_after_fail1315:;
6232 : 0 : }
6233 : : else
6234 : : {
6235 : 27314 : if (cmp <= 0
6236 : 9908 : && (code1 == LT_EXPR || code1 == LE_EXPR)
6237 : 223 : && (code2 == GT_EXPR || code2 == GE_EXPR)
6238 : : )
6239 : : {
6240 : 223 : gimple_seq *lseq = seq;
6241 : 223 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1316;
6242 : 223 : {
6243 : 223 : tree tem;
6244 : 223 : tem = constant_boolean_node (false, type);
6245 : 223 : res_op->set_value (tem);
6246 : 223 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 735, __FILE__, __LINE__, true);
6247 : 223 : return true;
6248 : : }
6249 : 0 : next_after_fail1316:;
6250 : 0 : }
6251 : : else
6252 : : {
6253 : 9685 : if (cmp >= 0
6254 : 17463 : && (code1 == GT_EXPR || code1 == GE_EXPR)
6255 : 63 : && (code2 == LT_EXPR || code2 == LE_EXPR)
6256 : : )
6257 : : {
6258 : 63 : gimple_seq *lseq = seq;
6259 : 63 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1317;
6260 : 63 : {
6261 : 63 : tree tem;
6262 : 63 : tem = constant_boolean_node (false, type);
6263 : 63 : res_op->set_value (tem);
6264 : 63 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 736, __FILE__, __LINE__, true);
6265 : 63 : return true;
6266 : : }
6267 : 0 : next_after_fail1317:;
6268 : : }
6269 : : }
6270 : : }
6271 : : }
6272 : : }
6273 : : }
6274 : : }
6275 : : return false;
6276 : : }
6277 : :
6278 : : bool
6279 : 14 : gimple_simplify_484 (gimple_match_op *res_op, gimple_seq *seq,
6280 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
6281 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
6282 : : {
6283 : 14 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
6284 : 14 : gimple_seq *lseq = seq;
6285 : 14 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1340;
6286 : 14 : {
6287 : 14 : tree tem;
6288 : 14 : tem = captures[2];
6289 : 14 : res_op->set_value (tem);
6290 : 14 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 738, __FILE__, __LINE__, true);
6291 : : return true;
6292 : : }
6293 : 0 : next_after_fail1340:;
6294 : 0 : return false;
6295 : : }
6296 : :
6297 : : bool
6298 : 2632 : gimple_simplify_486 (gimple_match_op *res_op, gimple_seq *seq,
6299 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
6300 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
6301 : : {
6302 : 2632 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
6303 : 2632 : if (TYPE_UNSIGNED (TREE_TYPE (captures[0]))
6304 : 2632 : && bitwise_equal_p (captures[0], captures[2])
6305 : : )
6306 : : {
6307 : 7 : gimple_seq *lseq = seq;
6308 : 7 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1342;
6309 : 7 : {
6310 : 7 : res_op->set_op (NOP_EXPR, type, 1);
6311 : 7 : {
6312 : 7 : tree _o1[2], _r1;
6313 : 7 : _o1[0] = captures[0];
6314 : 7 : _o1[1] = captures[1];
6315 : 7 : (*res_op).set_op (EQ_EXPR, boolean_type_node, 2);
6316 : 7 : (*res_op).ops[0] = _o1[0];
6317 : 7 : (*res_op).ops[1] = _o1[1];
6318 : 7 : (*res_op).resimplify (lseq, valueize);
6319 : : }
6320 : 7 : if (type != res_op->type
6321 : 7 : && !useless_type_conversion_p (type, res_op->type))
6322 : : {
6323 : 7 : if (!(res_op->ops[0] = maybe_push_res_to_seq (res_op, lseq))) goto next_after_fail1342;
6324 : 3 : res_op->set_op (NOP_EXPR, type, 1);
6325 : 3 : res_op->resimplify (lseq, valueize);
6326 : : }
6327 : 3 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 740, __FILE__, __LINE__, true);
6328 : 3 : return true;
6329 : : }
6330 : : next_after_fail1342:;
6331 : : }
6332 : : return false;
6333 : : }
6334 : :
6335 : : bool
6336 : 1 : gimple_simplify_489 (gimple_match_op *res_op, gimple_seq *seq,
6337 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
6338 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
6339 : : {
6340 : 1 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
6341 : 1 : if ((wi::to_wide (captures[2]) & 1) != 0
6342 : : )
6343 : : {
6344 : 0 : gimple_seq *lseq = seq;
6345 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1349;
6346 : 0 : {
6347 : 0 : tree tem;
6348 : 0 : tem = captures[0];
6349 : 0 : res_op->set_value (tem);
6350 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 741, __FILE__, __LINE__, true);
6351 : 0 : return true;
6352 : : }
6353 : 0 : next_after_fail1349:;
6354 : : }
6355 : : else
6356 : : {
6357 : 1 : gimple_seq *lseq = seq;
6358 : 1 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1350;
6359 : 1 : {
6360 : 1 : tree tem;
6361 : 1 : tem = build_zero_cst (type);
6362 : 1 : res_op->set_value (tem);
6363 : 1 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 742, __FILE__, __LINE__, true);
6364 : 1 : return true;
6365 : : }
6366 : 0 : next_after_fail1350:;
6367 : : }
6368 : : return false;
6369 : : }
6370 : :
6371 : : bool
6372 : 134 : gimple_simplify_491 (gimple_match_op *res_op, gimple_seq *seq,
6373 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
6374 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
6375 : : {
6376 : 134 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
6377 : 134 : gimple_seq *lseq = seq;
6378 : 134 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1353;
6379 : 134 : {
6380 : 134 : res_op->set_op (LTGT_EXPR, type, 2);
6381 : 134 : res_op->ops[0] = captures[0];
6382 : 134 : res_op->ops[1] = captures[1];
6383 : 134 : res_op->resimplify (lseq, valueize);
6384 : 134 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 743, __FILE__, __LINE__, true);
6385 : : return true;
6386 : : }
6387 : 0 : next_after_fail1353:;
6388 : 0 : return false;
6389 : : }
6390 : :
6391 : : bool
6392 : 40825 : gimple_simplify_494 (gimple_match_op *res_op, gimple_seq *seq,
6393 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
6394 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
6395 : : const enum tree_code ARG_UNUSED (op))
6396 : : {
6397 : 40825 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
6398 : 81650 : if (INTEGRAL_TYPE_P (type)
6399 : 40825 : && INTEGRAL_TYPE_P (TREE_TYPE (captures[2]))
6400 : 40606 : && INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
6401 : 40606 : && type_has_mode_precision_p (TREE_TYPE (captures[2]))
6402 : 13114 : && type_has_mode_precision_p (TREE_TYPE (captures[4]))
6403 : 13098 : && type_has_mode_precision_p (type)
6404 : 13098 : && TYPE_PRECISION (TREE_TYPE (captures[1])) > TYPE_PRECISION (TREE_TYPE (captures[2]))
6405 : 6932 : && types_match (captures[2], captures[4])
6406 : 1381 : && (tree_int_cst_min_precision (captures[5], TYPE_SIGN (TREE_TYPE (captures[2])))
6407 : 1381 : <= TYPE_PRECISION (TREE_TYPE (captures[2])))
6408 : 41435 : && (wi::to_wide (captures[5])
6409 : 42045 : & wi::mask (TYPE_PRECISION (TREE_TYPE (captures[2])),
6410 : 42045 : true, TYPE_PRECISION (type))) == 0
6411 : : )
6412 : : {
6413 : 462 : if (TYPE_OVERFLOW_WRAPS (TREE_TYPE (captures[2]))
6414 : : )
6415 : : {
6416 : 428 : {
6417 : 428 : tree ntype = TREE_TYPE (captures[2]);
6418 : 428 : gimple_seq *lseq = seq;
6419 : 428 : if (lseq
6420 : 15 : && (!single_use (captures[0])))
6421 : 416 : lseq = NULL;
6422 : 428 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1356;
6423 : 428 : {
6424 : 428 : res_op->set_op (NOP_EXPR, type, 1);
6425 : 428 : {
6426 : 428 : tree _o1[2], _r1;
6427 : 428 : {
6428 : 428 : tree _o2[2], _r2;
6429 : 428 : _o2[0] = captures[2];
6430 : 428 : _o2[1] = captures[4];
6431 : 428 : gimple_match_op tem_op (res_op->cond.any_else (), op, TREE_TYPE (_o2[0]), _o2[0], _o2[1]);
6432 : 428 : tem_op.resimplify (lseq, valueize);
6433 : 428 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
6434 : 428 : if (!_r2) goto next_after_fail1356;
6435 : 364 : _o1[0] = _r2;
6436 : : }
6437 : 364 : {
6438 : 364 : tree _o2[1], _r2;
6439 : 364 : _o2[0] = captures[5];
6440 : 364 : if (ntype != TREE_TYPE (_o2[0]) /* XXX */
6441 : 364 : && !useless_type_conversion_p (ntype, TREE_TYPE (_o2[0])))
6442 : : {
6443 : 364 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, ntype, _o2[0]);
6444 : 364 : tem_op.resimplify (lseq, valueize);
6445 : 364 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
6446 : 364 : if (!_r2) goto next_after_fail1356;
6447 : : }
6448 : : else
6449 : : _r2 = _o2[0];
6450 : 364 : _o1[1] = _r2;
6451 : : }
6452 : 364 : (*res_op).set_op (BIT_AND_EXPR, TREE_TYPE (_o1[0]), 2);
6453 : 364 : (*res_op).ops[0] = _o1[0];
6454 : 364 : (*res_op).ops[1] = _o1[1];
6455 : 364 : (*res_op).resimplify (lseq, valueize);
6456 : : }
6457 : 364 : if (type != res_op->type
6458 : 364 : && !useless_type_conversion_p (type, res_op->type))
6459 : : {
6460 : 364 : if (!(res_op->ops[0] = maybe_push_res_to_seq (res_op, lseq))) goto next_after_fail1356;
6461 : 364 : res_op->set_op (NOP_EXPR, type, 1);
6462 : 364 : res_op->resimplify (lseq, valueize);
6463 : : }
6464 : 364 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 745, __FILE__, __LINE__, true);
6465 : 364 : return true;
6466 : : }
6467 : : next_after_fail1356:;
6468 : : }
6469 : : }
6470 : : else
6471 : : {
6472 : 34 : {
6473 : 34 : tree utype = unsigned_type_for (TREE_TYPE (captures[2]));
6474 : 34 : gimple_seq *lseq = seq;
6475 : 34 : if (lseq
6476 : 3 : && (!single_use (captures[0])))
6477 : 33 : lseq = NULL;
6478 : 34 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1357;
6479 : 34 : {
6480 : 34 : res_op->set_op (NOP_EXPR, type, 1);
6481 : 34 : {
6482 : 34 : tree _o1[2], _r1;
6483 : 34 : {
6484 : 34 : tree _o2[2], _r2;
6485 : 34 : {
6486 : 34 : tree _o3[1], _r3;
6487 : 34 : _o3[0] = captures[2];
6488 : 34 : if (utype != TREE_TYPE (_o3[0]) /* XXX */
6489 : 34 : && !useless_type_conversion_p (utype, TREE_TYPE (_o3[0])))
6490 : : {
6491 : 34 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, utype, _o3[0]);
6492 : 34 : tem_op.resimplify (lseq, valueize);
6493 : 34 : _r3 = maybe_push_res_to_seq (&tem_op, lseq);
6494 : 34 : if (!_r3) goto next_after_fail1357;
6495 : : }
6496 : : else
6497 : : _r3 = _o3[0];
6498 : 29 : _o2[0] = _r3;
6499 : : }
6500 : 29 : {
6501 : 29 : tree _o3[1], _r3;
6502 : 29 : _o3[0] = captures[4];
6503 : 29 : if (utype != TREE_TYPE (_o3[0]) /* XXX */
6504 : 29 : && !useless_type_conversion_p (utype, TREE_TYPE (_o3[0])))
6505 : : {
6506 : 29 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, utype, _o3[0]);
6507 : 29 : tem_op.resimplify (lseq, valueize);
6508 : 29 : _r3 = maybe_push_res_to_seq (&tem_op, lseq);
6509 : 29 : if (!_r3) goto next_after_fail1357;
6510 : : }
6511 : : else
6512 : : _r3 = _o3[0];
6513 : 1 : _o2[1] = _r3;
6514 : : }
6515 : 1 : gimple_match_op tem_op (res_op->cond.any_else (), op, TREE_TYPE (_o2[0]), _o2[0], _o2[1]);
6516 : 1 : tem_op.resimplify (lseq, valueize);
6517 : 1 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
6518 : 1 : if (!_r2) goto next_after_fail1357;
6519 : 1 : _o1[0] = _r2;
6520 : : }
6521 : 1 : {
6522 : 1 : tree _o2[1], _r2;
6523 : 1 : _o2[0] = captures[5];
6524 : 1 : if (utype != TREE_TYPE (_o2[0]) /* XXX */
6525 : 1 : && !useless_type_conversion_p (utype, TREE_TYPE (_o2[0])))
6526 : : {
6527 : 1 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, utype, _o2[0]);
6528 : 1 : tem_op.resimplify (lseq, valueize);
6529 : 1 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
6530 : 1 : if (!_r2) goto next_after_fail1357;
6531 : : }
6532 : : else
6533 : : _r2 = _o2[0];
6534 : 1 : _o1[1] = _r2;
6535 : : }
6536 : 1 : (*res_op).set_op (BIT_AND_EXPR, TREE_TYPE (_o1[0]), 2);
6537 : 1 : (*res_op).ops[0] = _o1[0];
6538 : 1 : (*res_op).ops[1] = _o1[1];
6539 : 1 : (*res_op).resimplify (lseq, valueize);
6540 : : }
6541 : 1 : if (type != res_op->type
6542 : 1 : && !useless_type_conversion_p (type, res_op->type))
6543 : : {
6544 : 1 : if (!(res_op->ops[0] = maybe_push_res_to_seq (res_op, lseq))) goto next_after_fail1357;
6545 : 1 : res_op->set_op (NOP_EXPR, type, 1);
6546 : 1 : res_op->resimplify (lseq, valueize);
6547 : : }
6548 : 1 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 746, __FILE__, __LINE__, true);
6549 : 1 : return true;
6550 : : }
6551 : : next_after_fail1357:;
6552 : : }
6553 : : }
6554 : : }
6555 : : return false;
6556 : : }
6557 : :
6558 : : bool
6559 : 7 : gimple_simplify_515 (gimple_match_op *res_op, gimple_seq *seq,
6560 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
6561 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
6562 : : {
6563 : 7 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
6564 : 7 : if (ANY_INTEGRAL_TYPE_P (type) && TYPE_OVERFLOW_UNDEFINED (type)
6565 : : )
6566 : : {
6567 : 0 : gimple_seq *lseq = seq;
6568 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1379;
6569 : 0 : {
6570 : 0 : res_op->set_op (MAX_EXPR, type, 2);
6571 : 0 : res_op->ops[0] = captures[2];
6572 : 0 : res_op->ops[1] = captures[1];
6573 : 0 : res_op->resimplify (lseq, valueize);
6574 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 765, __FILE__, __LINE__, true);
6575 : 0 : return true;
6576 : : }
6577 : 0 : next_after_fail1379:;
6578 : : }
6579 : : return false;
6580 : : }
6581 : :
6582 : : bool
6583 : 1 : gimple_simplify_520 (gimple_match_op *res_op, gimple_seq *seq,
6584 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
6585 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
6586 : : const enum tree_code ARG_UNUSED (op))
6587 : : {
6588 : 1 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
6589 : 1 : gimple_seq *lseq = seq;
6590 : 1 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1384;
6591 : 1 : {
6592 : 1 : tree tem;
6593 : 1 : tem = captures[2];
6594 : 1 : res_op->set_value (tem);
6595 : 1 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 770, __FILE__, __LINE__, true);
6596 : : return true;
6597 : : }
6598 : 0 : next_after_fail1384:;
6599 : 0 : return false;
6600 : : }
6601 : :
6602 : : bool
6603 : 201 : gimple_simplify_526 (gimple_match_op *res_op, gimple_seq *seq,
6604 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
6605 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
6606 : : const enum tree_code ARG_UNUSED (cmp))
6607 : : {
6608 : 201 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
6609 : 201 : if (!HONOR_SIGNED_ZEROS (type)
6610 : 201 : && (
6611 : 201 : (INTEGRAL_TYPE_P (type)
6612 : 201 : && types_match (TREE_TYPE (captures[0]), TREE_TYPE (captures[1]))
6613 : 0 : && types_match (TREE_TYPE (captures[2]), TREE_TYPE (captures[3]))
6614 : 0 : && TYPE_PRECISION (TREE_TYPE (captures[1])) <= TYPE_PRECISION (type)
6615 : 0 : && TYPE_PRECISION (TREE_TYPE (captures[3])) <= TYPE_PRECISION (type))
6616 : 201 : || (types_match (type, TREE_TYPE (captures[1]))
6617 : 29 : && types_match (type, TREE_TYPE (captures[3]))))
6618 : : )
6619 : : {
6620 : 0 : if (cmp == EQ_EXPR
6621 : : )
6622 : : {
6623 : 0 : if (VECTOR_TYPE_P (type)
6624 : : )
6625 : : {
6626 : 0 : gimple_seq *lseq = seq;
6627 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1404;
6628 : 0 : {
6629 : 0 : res_op->set_op (VIEW_CONVERT_EXPR, type, 1);
6630 : 0 : res_op->ops[0] = captures[2];
6631 : 0 : res_op->resimplify (lseq, valueize);
6632 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 778, __FILE__, __LINE__, true);
6633 : 0 : return true;
6634 : : }
6635 : 0 : next_after_fail1404:;
6636 : : }
6637 : : else
6638 : : {
6639 : 0 : gimple_seq *lseq = seq;
6640 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1405;
6641 : 0 : {
6642 : 0 : res_op->set_op (NOP_EXPR, type, 1);
6643 : 0 : res_op->ops[0] = captures[2];
6644 : 0 : res_op->resimplify (lseq, valueize);
6645 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 779, __FILE__, __LINE__, true);
6646 : 0 : return true;
6647 : : }
6648 : 0 : next_after_fail1405:;
6649 : : }
6650 : : }
6651 : : else
6652 : : {
6653 : : if (cmp == NE_EXPR
6654 : : )
6655 : : {
6656 : 0 : if (VECTOR_TYPE_P (type)
6657 : : )
6658 : : {
6659 : 0 : gimple_seq *lseq = seq;
6660 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1406;
6661 : 0 : {
6662 : 0 : res_op->set_op (VIEW_CONVERT_EXPR, type, 1);
6663 : 0 : res_op->ops[0] = captures[0];
6664 : 0 : res_op->resimplify (lseq, valueize);
6665 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 780, __FILE__, __LINE__, true);
6666 : 0 : return true;
6667 : : }
6668 : 0 : next_after_fail1406:;
6669 : : }
6670 : : else
6671 : : {
6672 : 0 : gimple_seq *lseq = seq;
6673 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1407;
6674 : 0 : {
6675 : 0 : res_op->set_op (NOP_EXPR, type, 1);
6676 : 0 : res_op->ops[0] = captures[0];
6677 : 0 : res_op->resimplify (lseq, valueize);
6678 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 781, __FILE__, __LINE__, true);
6679 : 0 : return true;
6680 : : }
6681 : 0 : next_after_fail1407:;
6682 : : }
6683 : : }
6684 : : else
6685 : : {
6686 : : if (cmp == LE_EXPR || cmp == UNLE_EXPR || cmp == LT_EXPR || cmp == UNLT_EXPR
6687 : : )
6688 : : {
6689 : 0 : if (!HONOR_NANS (type)
6690 : : )
6691 : : {
6692 : 0 : if (VECTOR_TYPE_P (type)
6693 : : )
6694 : : {
6695 : 0 : gimple_seq *lseq = seq;
6696 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1408;
6697 : 0 : {
6698 : 0 : res_op->set_op (VIEW_CONVERT_EXPR, type, 1);
6699 : 0 : {
6700 : 0 : tree _o1[2], _r1;
6701 : 0 : _o1[0] = captures[0];
6702 : 0 : _o1[1] = captures[2];
6703 : 0 : (*res_op).set_op (MIN_EXPR, TREE_TYPE (_o1[0]), 2);
6704 : 0 : (*res_op).ops[0] = _o1[0];
6705 : 0 : (*res_op).ops[1] = _o1[1];
6706 : 0 : (*res_op).resimplify (lseq, valueize);
6707 : : }
6708 : 0 : if (type != res_op->type
6709 : 0 : && !useless_type_conversion_p (type, res_op->type))
6710 : : {
6711 : 0 : if (!(res_op->ops[0] = maybe_push_res_to_seq (res_op, lseq))) goto next_after_fail1408;
6712 : 0 : res_op->set_op (VIEW_CONVERT_EXPR, type, 1);
6713 : 0 : res_op->resimplify (lseq, valueize);
6714 : : }
6715 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 782, __FILE__, __LINE__, true);
6716 : 0 : return true;
6717 : : }
6718 : : next_after_fail1408:;
6719 : : }
6720 : : else
6721 : : {
6722 : 0 : gimple_seq *lseq = seq;
6723 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1409;
6724 : 0 : {
6725 : 0 : res_op->set_op (NOP_EXPR, type, 1);
6726 : 0 : {
6727 : 0 : tree _o1[2], _r1;
6728 : 0 : _o1[0] = captures[0];
6729 : 0 : _o1[1] = captures[2];
6730 : 0 : (*res_op).set_op (MIN_EXPR, TREE_TYPE (_o1[0]), 2);
6731 : 0 : (*res_op).ops[0] = _o1[0];
6732 : 0 : (*res_op).ops[1] = _o1[1];
6733 : 0 : (*res_op).resimplify (lseq, valueize);
6734 : : }
6735 : 0 : if (type != res_op->type
6736 : 0 : && !useless_type_conversion_p (type, res_op->type))
6737 : : {
6738 : 0 : if (!(res_op->ops[0] = maybe_push_res_to_seq (res_op, lseq))) goto next_after_fail1409;
6739 : 0 : res_op->set_op (NOP_EXPR, type, 1);
6740 : 0 : res_op->resimplify (lseq, valueize);
6741 : : }
6742 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 783, __FILE__, __LINE__, true);
6743 : 0 : return true;
6744 : : }
6745 : : next_after_fail1409:;
6746 : : }
6747 : : }
6748 : : }
6749 : : else
6750 : : {
6751 : : if (cmp == GE_EXPR || cmp == UNGE_EXPR || cmp == GT_EXPR || cmp == UNGT_EXPR
6752 : : )
6753 : : {
6754 : 0 : if (!HONOR_NANS (type)
6755 : : )
6756 : : {
6757 : 0 : if (VECTOR_TYPE_P (type)
6758 : : )
6759 : : {
6760 : 0 : gimple_seq *lseq = seq;
6761 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1410;
6762 : 0 : {
6763 : 0 : res_op->set_op (VIEW_CONVERT_EXPR, type, 1);
6764 : 0 : {
6765 : 0 : tree _o1[2], _r1;
6766 : 0 : _o1[0] = captures[0];
6767 : 0 : _o1[1] = captures[2];
6768 : 0 : (*res_op).set_op (MAX_EXPR, TREE_TYPE (_o1[0]), 2);
6769 : 0 : (*res_op).ops[0] = _o1[0];
6770 : 0 : (*res_op).ops[1] = _o1[1];
6771 : 0 : (*res_op).resimplify (lseq, valueize);
6772 : : }
6773 : 0 : if (type != res_op->type
6774 : 0 : && !useless_type_conversion_p (type, res_op->type))
6775 : : {
6776 : 0 : if (!(res_op->ops[0] = maybe_push_res_to_seq (res_op, lseq))) goto next_after_fail1410;
6777 : 0 : res_op->set_op (VIEW_CONVERT_EXPR, type, 1);
6778 : 0 : res_op->resimplify (lseq, valueize);
6779 : : }
6780 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 784, __FILE__, __LINE__, true);
6781 : 0 : return true;
6782 : : }
6783 : : next_after_fail1410:;
6784 : : }
6785 : : else
6786 : : {
6787 : 0 : gimple_seq *lseq = seq;
6788 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1411;
6789 : 0 : {
6790 : 0 : res_op->set_op (NOP_EXPR, type, 1);
6791 : 0 : {
6792 : 0 : tree _o1[2], _r1;
6793 : 0 : _o1[0] = captures[0];
6794 : 0 : _o1[1] = captures[2];
6795 : 0 : (*res_op).set_op (MAX_EXPR, TREE_TYPE (_o1[0]), 2);
6796 : 0 : (*res_op).ops[0] = _o1[0];
6797 : 0 : (*res_op).ops[1] = _o1[1];
6798 : 0 : (*res_op).resimplify (lseq, valueize);
6799 : : }
6800 : 0 : if (type != res_op->type
6801 : 0 : && !useless_type_conversion_p (type, res_op->type))
6802 : : {
6803 : 0 : if (!(res_op->ops[0] = maybe_push_res_to_seq (res_op, lseq))) goto next_after_fail1411;
6804 : 0 : res_op->set_op (NOP_EXPR, type, 1);
6805 : 0 : res_op->resimplify (lseq, valueize);
6806 : : }
6807 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 785, __FILE__, __LINE__, true);
6808 : 0 : return true;
6809 : : }
6810 : : next_after_fail1411:;
6811 : : }
6812 : : }
6813 : : }
6814 : : else
6815 : : {
6816 : : if (cmp == UNEQ_EXPR
6817 : : )
6818 : : {
6819 : 0 : if (!HONOR_NANS (type)
6820 : : )
6821 : : {
6822 : 0 : if (VECTOR_TYPE_P (type)
6823 : : )
6824 : : {
6825 : 0 : gimple_seq *lseq = seq;
6826 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1412;
6827 : 0 : {
6828 : 0 : res_op->set_op (VIEW_CONVERT_EXPR, type, 1);
6829 : 0 : res_op->ops[0] = captures[2];
6830 : 0 : res_op->resimplify (lseq, valueize);
6831 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 786, __FILE__, __LINE__, true);
6832 : 0 : return true;
6833 : : }
6834 : 0 : next_after_fail1412:;
6835 : : }
6836 : : else
6837 : : {
6838 : 0 : gimple_seq *lseq = seq;
6839 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1413;
6840 : 0 : {
6841 : 0 : res_op->set_op (NOP_EXPR, type, 1);
6842 : 0 : res_op->ops[0] = captures[2];
6843 : 0 : res_op->resimplify (lseq, valueize);
6844 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 787, __FILE__, __LINE__, true);
6845 : 0 : return true;
6846 : : }
6847 : 0 : next_after_fail1413:;
6848 : : }
6849 : : }
6850 : : }
6851 : : else
6852 : : {
6853 : : if (cmp == LTGT_EXPR
6854 : : )
6855 : : {
6856 : 0 : if (!HONOR_NANS (type)
6857 : : )
6858 : : {
6859 : 0 : if (VECTOR_TYPE_P (type)
6860 : : )
6861 : : {
6862 : 0 : gimple_seq *lseq = seq;
6863 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1414;
6864 : 0 : {
6865 : 0 : res_op->set_op (VIEW_CONVERT_EXPR, type, 1);
6866 : 0 : res_op->ops[0] = captures[0];
6867 : 0 : res_op->resimplify (lseq, valueize);
6868 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 788, __FILE__, __LINE__, true);
6869 : 0 : return true;
6870 : : }
6871 : 0 : next_after_fail1414:;
6872 : : }
6873 : : else
6874 : : {
6875 : 0 : gimple_seq *lseq = seq;
6876 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1415;
6877 : 0 : {
6878 : 0 : res_op->set_op (NOP_EXPR, type, 1);
6879 : 0 : res_op->ops[0] = captures[0];
6880 : 0 : res_op->resimplify (lseq, valueize);
6881 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 789, __FILE__, __LINE__, true);
6882 : 0 : return true;
6883 : : }
6884 : 0 : next_after_fail1415:;
6885 : : }
6886 : : }
6887 : : }
6888 : : }
6889 : : }
6890 : : }
6891 : : }
6892 : : }
6893 : : }
6894 : : return false;
6895 : : }
6896 : :
6897 : : bool
6898 : 1 : gimple_simplify_553 (gimple_match_op *res_op, gimple_seq *seq,
6899 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
6900 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
6901 : : const enum tree_code ARG_UNUSED (cmp))
6902 : : {
6903 : 1 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
6904 : 1 : gimple_seq *lseq = seq;
6905 : 1 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1469;
6906 : 1 : {
6907 : 1 : tree tem;
6908 : 1 : tem = captures[3];
6909 : 1 : res_op->set_value (tem);
6910 : 1 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 811, __FILE__, __LINE__, true);
6911 : : return true;
6912 : : }
6913 : 0 : next_after_fail1469:;
6914 : 0 : return false;
6915 : : }
6916 : :
6917 : : bool
6918 : 0 : gimple_simplify_560 (gimple_match_op *res_op, gimple_seq *seq,
6919 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
6920 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
6921 : : const enum tree_code ARG_UNUSED (cmp))
6922 : : {
6923 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
6924 : 0 : gimple_seq *lseq = seq;
6925 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1476;
6926 : 0 : {
6927 : 0 : tree tem;
6928 : 0 : tem = captures[0];
6929 : 0 : res_op->set_value (tem);
6930 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 815, __FILE__, __LINE__, true);
6931 : : return true;
6932 : : }
6933 : 0 : next_after_fail1476:;
6934 : 0 : return false;
6935 : : }
6936 : :
6937 : : bool
6938 : 1258 : gimple_simplify_566 (gimple_match_op *res_op, gimple_seq *seq,
6939 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
6940 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
6941 : : const enum tree_code ARG_UNUSED (cmp))
6942 : : {
6943 : 1258 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
6944 : 1258 : if (!HONOR_SIGNED_ZEROS (TREE_TYPE (captures[1]))
6945 : 1140 : && !TYPE_UNSIGNED (TREE_TYPE (captures[1]))
6946 : 2280 : && element_precision (captures[1])
6947 : 1140 : <= element_precision (captures[0])
6948 : 2398 : && bitwise_equal_p (captures[1], captures[2])
6949 : : )
6950 : : {
6951 : 935 : if (TYPE_UNSIGNED (TREE_TYPE (captures[2]))
6952 : : )
6953 : : {
6954 : 614 : {
6955 : 614 : tree stype = signed_type_for (TREE_TYPE (captures[2]));
6956 : 614 : if (types_match (captures[0], stype)
6957 : : )
6958 : : {
6959 : 614 : gimple_seq *lseq = seq;
6960 : 614 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1485;
6961 : 614 : {
6962 : 614 : res_op->set_op (ABSU_EXPR, type, 1);
6963 : 614 : res_op->ops[0] = captures[0];
6964 : 614 : res_op->resimplify (lseq, valueize);
6965 : 614 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 818, __FILE__, __LINE__, true);
6966 : 614 : return true;
6967 : : }
6968 : 0 : next_after_fail1485:;
6969 : : }
6970 : : else
6971 : : {
6972 : 0 : gimple_seq *lseq = seq;
6973 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1486;
6974 : 0 : {
6975 : 0 : res_op->set_op (ABSU_EXPR, type, 1);
6976 : 0 : {
6977 : 0 : tree _o1[1], _r1;
6978 : 0 : _o1[0] = captures[2];
6979 : 0 : if (stype != TREE_TYPE (_o1[0]) /* XXX */
6980 : 0 : && !useless_type_conversion_p (stype, TREE_TYPE (_o1[0])))
6981 : : {
6982 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, stype, _o1[0]);
6983 : 0 : tem_op.resimplify (lseq, valueize);
6984 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
6985 : 0 : if (!_r1) goto next_after_fail1486;
6986 : : }
6987 : : else
6988 : : _r1 = _o1[0];
6989 : 0 : res_op->ops[0] = _r1;
6990 : : }
6991 : 0 : res_op->resimplify (lseq, valueize);
6992 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 819, __FILE__, __LINE__, true);
6993 : 0 : return true;
6994 : : }
6995 : : next_after_fail1486:;
6996 : : }
6997 : : }
6998 : : }
6999 : : else
7000 : : {
7001 : 321 : gimple_seq *lseq = seq;
7002 : 321 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1487;
7003 : 321 : {
7004 : 321 : res_op->set_op (ABS_EXPR, type, 1);
7005 : 321 : res_op->ops[0] = captures[2];
7006 : 321 : res_op->resimplify (lseq, valueize);
7007 : 321 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 820, __FILE__, __LINE__, true);
7008 : 321 : return true;
7009 : : }
7010 : 0 : next_after_fail1487:;
7011 : : }
7012 : : }
7013 : : return false;
7014 : : }
7015 : :
7016 : : bool
7017 : 8 : gimple_simplify_577 (gimple_match_op *res_op, gimple_seq *seq,
7018 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
7019 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
7020 : : const enum tree_code ARG_UNUSED (cmp))
7021 : : {
7022 : 8 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
7023 : 8 : if (!HONOR_SIGNED_ZEROS (TREE_TYPE (captures[1]))
7024 : 8 : && !TYPE_UNSIGNED (TREE_TYPE (captures[1]))
7025 : 16 : && element_precision (captures[1])
7026 : 8 : <= element_precision (captures[0])
7027 : 16 : && bitwise_equal_p (captures[1], captures[2])
7028 : : )
7029 : : {
7030 : 16 : if ((ANY_INTEGRAL_TYPE_P (TREE_TYPE (captures[2]))
7031 : 6 : && !TYPE_OVERFLOW_WRAPS (TREE_TYPE (captures[2])))
7032 : 12 : || TYPE_UNSIGNED (TREE_TYPE (captures[2]))
7033 : : )
7034 : : {
7035 : 6 : {
7036 : 6 : tree stype = signed_type_for (TREE_TYPE (captures[2]));
7037 : 6 : tree utype = unsigned_type_for (TREE_TYPE (captures[2]));
7038 : 6 : if (types_match (captures[0], stype)
7039 : : )
7040 : : {
7041 : 6 : gimple_seq *lseq = seq;
7042 : 6 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1511;
7043 : 6 : {
7044 : 6 : res_op->set_op (NOP_EXPR, type, 1);
7045 : 6 : {
7046 : 6 : tree _o1[1], _r1;
7047 : 6 : {
7048 : 6 : tree _o2[1], _r2;
7049 : 6 : _o2[0] = captures[0];
7050 : 6 : gimple_match_op tem_op (res_op->cond.any_else (), ABSU_EXPR, utype, _o2[0]);
7051 : 6 : tem_op.resimplify (lseq, valueize);
7052 : 6 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
7053 : 6 : if (!_r2) goto next_after_fail1511;
7054 : 6 : _o1[0] = _r2;
7055 : : }
7056 : 6 : (*res_op).set_op (NEGATE_EXPR, TREE_TYPE (_o1[0]), 1);
7057 : 6 : (*res_op).ops[0] = _o1[0];
7058 : 6 : (*res_op).resimplify (lseq, valueize);
7059 : : }
7060 : 6 : if (type != res_op->type
7061 : 6 : && !useless_type_conversion_p (type, res_op->type))
7062 : : {
7063 : 4 : if (!(res_op->ops[0] = maybe_push_res_to_seq (res_op, lseq))) goto next_after_fail1511;
7064 : 4 : res_op->set_op (NOP_EXPR, type, 1);
7065 : 4 : res_op->resimplify (lseq, valueize);
7066 : : }
7067 : 6 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 826, __FILE__, __LINE__, true);
7068 : 6 : return true;
7069 : : }
7070 : : next_after_fail1511:;
7071 : : }
7072 : : else
7073 : : {
7074 : 0 : gimple_seq *lseq = seq;
7075 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1512;
7076 : 0 : {
7077 : 0 : res_op->set_op (NOP_EXPR, type, 1);
7078 : 0 : {
7079 : 0 : tree _o1[1], _r1;
7080 : 0 : {
7081 : 0 : tree _o2[1], _r2;
7082 : 0 : {
7083 : 0 : tree _o3[1], _r3;
7084 : 0 : _o3[0] = captures[2];
7085 : 0 : if (stype != TREE_TYPE (_o3[0]) /* XXX */
7086 : 0 : && !useless_type_conversion_p (stype, TREE_TYPE (_o3[0])))
7087 : : {
7088 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, stype, _o3[0]);
7089 : 0 : tem_op.resimplify (lseq, valueize);
7090 : 0 : _r3 = maybe_push_res_to_seq (&tem_op, lseq);
7091 : 0 : if (!_r3) goto next_after_fail1512;
7092 : : }
7093 : : else
7094 : : _r3 = _o3[0];
7095 : 0 : _o2[0] = _r3;
7096 : : }
7097 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), ABSU_EXPR, utype, _o2[0]);
7098 : 0 : tem_op.resimplify (lseq, valueize);
7099 : 0 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
7100 : 0 : if (!_r2) goto next_after_fail1512;
7101 : 0 : _o1[0] = _r2;
7102 : : }
7103 : 0 : (*res_op).set_op (NEGATE_EXPR, TREE_TYPE (_o1[0]), 1);
7104 : 0 : (*res_op).ops[0] = _o1[0];
7105 : 0 : (*res_op).resimplify (lseq, valueize);
7106 : : }
7107 : 0 : if (type != res_op->type
7108 : 0 : && !useless_type_conversion_p (type, res_op->type))
7109 : : {
7110 : 0 : if (!(res_op->ops[0] = maybe_push_res_to_seq (res_op, lseq))) goto next_after_fail1512;
7111 : 0 : res_op->set_op (NOP_EXPR, type, 1);
7112 : 0 : res_op->resimplify (lseq, valueize);
7113 : : }
7114 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 827, __FILE__, __LINE__, true);
7115 : 0 : return true;
7116 : : }
7117 : : next_after_fail1512:;
7118 : : }
7119 : : }
7120 : : }
7121 : : else
7122 : : {
7123 : 2 : gimple_seq *lseq = seq;
7124 : 2 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1513;
7125 : 2 : {
7126 : 2 : res_op->set_op (NOP_EXPR, type, 1);
7127 : 2 : {
7128 : 2 : tree _o1[1], _r1;
7129 : 2 : {
7130 : 2 : tree _o2[1], _r2;
7131 : 2 : _o2[0] = captures[2];
7132 : 2 : gimple_match_op tem_op (res_op->cond.any_else (), ABS_EXPR, TREE_TYPE (_o2[0]), _o2[0]);
7133 : 2 : tem_op.resimplify (lseq, valueize);
7134 : 2 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
7135 : 2 : if (!_r2) goto next_after_fail1513;
7136 : 2 : _o1[0] = _r2;
7137 : : }
7138 : 2 : (*res_op).set_op (NEGATE_EXPR, TREE_TYPE (_o1[0]), 1);
7139 : 2 : (*res_op).ops[0] = _o1[0];
7140 : 2 : (*res_op).resimplify (lseq, valueize);
7141 : : }
7142 : 2 : if (type != res_op->type
7143 : 2 : && !useless_type_conversion_p (type, res_op->type))
7144 : : {
7145 : 0 : if (!(res_op->ops[0] = maybe_push_res_to_seq (res_op, lseq))) goto next_after_fail1513;
7146 : 0 : res_op->set_op (NOP_EXPR, type, 1);
7147 : 0 : res_op->resimplify (lseq, valueize);
7148 : : }
7149 : 2 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 828, __FILE__, __LINE__, true);
7150 : 2 : return true;
7151 : : }
7152 : : next_after_fail1513:;
7153 : : }
7154 : : }
7155 : : return false;
7156 : : }
7157 : :
7158 : : bool
7159 : 51 : gimple_simplify_602 (gimple_match_op *res_op, gimple_seq *seq,
7160 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
7161 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
7162 : : const enum tree_code ARG_UNUSED (op),
7163 : : const enum tree_code ARG_UNUSED (logic))
7164 : : {
7165 : 51 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
7166 : 51 : gimple_seq *lseq = seq;
7167 : 51 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1553;
7168 : 51 : {
7169 : 51 : res_op->set_op (logic, type, 2);
7170 : 51 : res_op->ops[0] = captures[0];
7171 : 51 : res_op->ops[1] = captures[1];
7172 : 51 : res_op->resimplify (lseq, valueize);
7173 : 51 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 850, __FILE__, __LINE__, true);
7174 : : return true;
7175 : : }
7176 : 0 : next_after_fail1553:;
7177 : 0 : return false;
7178 : : }
7179 : :
7180 : : bool
7181 : 8373 : gimple_simplify_606 (gimple_match_op *res_op, gimple_seq *seq,
7182 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
7183 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
7184 : : const combined_fn ARG_UNUSED (minmax))
7185 : : {
7186 : 8373 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
7187 : 8373 : if (real_isnan (TREE_REAL_CST_PTR (captures[1]))
7188 : 684 : && (!HONOR_SNANS (captures[1]) || !TREE_REAL_CST (captures[1]).signalling)
7189 : 8985 : && !tree_expr_maybe_signaling_nan_p (captures[0])
7190 : : )
7191 : : {
7192 : 588 : gimple_seq *lseq = seq;
7193 : 588 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1557;
7194 : 588 : {
7195 : 588 : tree tem;
7196 : 588 : tem = captures[0];
7197 : 588 : res_op->set_value (tem);
7198 : 588 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 854, __FILE__, __LINE__, true);
7199 : 588 : return true;
7200 : : }
7201 : 0 : next_after_fail1557:;
7202 : : }
7203 : : return false;
7204 : : }
7205 : :
7206 : : bool
7207 : 0 : gimple_simplify_612 (gimple_match_op *res_op, gimple_seq *seq,
7208 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
7209 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
7210 : : {
7211 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
7212 : 0 : if (tree_nop_conversion_p (TREE_TYPE (captures[0]), type)
7213 : : )
7214 : : {
7215 : 0 : gimple_seq *lseq = seq;
7216 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1566;
7217 : 0 : {
7218 : 0 : res_op->set_op (NOP_EXPR, type, 1);
7219 : 0 : res_op->ops[0] = captures[0];
7220 : 0 : res_op->resimplify (lseq, valueize);
7221 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 863, __FILE__, __LINE__, true);
7222 : 0 : return true;
7223 : : }
7224 : 0 : next_after_fail1566:;
7225 : : }
7226 : : return false;
7227 : : }
7228 : :
7229 : : bool
7230 : 0 : gimple_simplify_619 (gimple_match_op *res_op, gimple_seq *seq,
7231 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
7232 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures))
7233 : : {
7234 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
7235 : 0 : gimple_seq *lseq = seq;
7236 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1573;
7237 : 0 : {
7238 : 0 : tree tem;
7239 : 0 : tem = captures[2];
7240 : 0 : res_op->set_value (tem);
7241 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 796, __FILE__, __LINE__, true);
7242 : : return true;
7243 : : }
7244 : 0 : next_after_fail1573:;
7245 : 0 : return false;
7246 : : }
7247 : :
7248 : : bool
7249 : 0 : gimple_simplify_622 (gimple_match_op *res_op, gimple_seq *seq,
7250 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
7251 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
7252 : : const enum tree_code ARG_UNUSED (cmp))
7253 : : {
7254 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
7255 : 0 : gimple_seq *lseq = seq;
7256 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1576;
7257 : 0 : {
7258 : 0 : tree tem;
7259 : 0 : tem = captures[3];
7260 : 0 : res_op->set_value (tem);
7261 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 811, __FILE__, __LINE__, true);
7262 : : return true;
7263 : : }
7264 : 0 : next_after_fail1576:;
7265 : 0 : return false;
7266 : : }
7267 : :
7268 : : bool
7269 : 0 : gimple_simplify_629 (gimple_match_op *res_op, gimple_seq *seq,
7270 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
7271 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
7272 : : const combined_fn ARG_UNUSED (cond_op))
7273 : : {
7274 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
7275 : 0 : {
7276 : 0 : tree op_type = TREE_TYPE (captures[6]);
7277 : 0 : if (inverse_conditions_p (captures[0], captures[2])
7278 : 0 : && element_precision (type) == element_precision (op_type)
7279 : : )
7280 : : {
7281 : 0 : gimple_seq *lseq = seq;
7282 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1583;
7283 : 0 : {
7284 : 0 : res_op->set_op (VIEW_CONVERT_EXPR, type, 1);
7285 : 0 : {
7286 : 0 : tree _o1[5], _r1;
7287 : 0 : _o1[0] = captures[2];
7288 : 0 : _o1[1] = captures[3];
7289 : 0 : _o1[2] = captures[4];
7290 : 0 : _o1[3] = captures[5];
7291 : 0 : {
7292 : 0 : tree _o2[1], _r2;
7293 : 0 : _o2[0] = captures[1];
7294 : 0 : if (op_type != TREE_TYPE (_o2[0]) /* XXX */
7295 : 0 : && !useless_type_conversion_p (op_type, TREE_TYPE (_o2[0])))
7296 : : {
7297 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), VIEW_CONVERT_EXPR, op_type, _o2[0]);
7298 : 0 : tem_op.resimplify (lseq, valueize);
7299 : 0 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
7300 : 0 : if (!_r2) goto next_after_fail1583;
7301 : : }
7302 : : else
7303 : : _r2 = _o2[0];
7304 : 0 : _o1[4] = _r2;
7305 : : }
7306 : 0 : (*res_op).set_op (cond_op, TREE_TYPE (_o1[1]), 5);
7307 : 0 : (*res_op).ops[0] = _o1[0];
7308 : 0 : (*res_op).ops[1] = _o1[1];
7309 : 0 : (*res_op).ops[2] = _o1[2];
7310 : 0 : (*res_op).ops[3] = _o1[3];
7311 : 0 : (*res_op).ops[4] = _o1[4];
7312 : 0 : (*res_op).resimplify (lseq, valueize);
7313 : : }
7314 : 0 : if (type != res_op->type
7315 : 0 : && !useless_type_conversion_p (type, res_op->type))
7316 : : {
7317 : 0 : if (!(res_op->ops[0] = maybe_push_res_to_seq (res_op, lseq))) goto next_after_fail1583;
7318 : 0 : res_op->set_op (VIEW_CONVERT_EXPR, type, 1);
7319 : 0 : res_op->resimplify (lseq, valueize);
7320 : : }
7321 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 875, __FILE__, __LINE__, true);
7322 : 0 : return true;
7323 : : }
7324 : : next_after_fail1583:;
7325 : : }
7326 : : }
7327 : : return false;
7328 : : }
7329 : :
7330 : : bool
7331 : 14 : gimple_simplify_637 (gimple_match_op *res_op, gimple_seq *seq,
7332 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
7333 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
7334 : : const enum tree_code ARG_UNUSED (cmp))
7335 : : {
7336 : 14 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
7337 : 14 : gimple_seq *lseq = seq;
7338 : 14 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1591;
7339 : 14 : {
7340 : 14 : res_op->set_op (UNORDERED_EXPR, type, 2);
7341 : 14 : res_op->ops[0] = captures[0];
7342 : 14 : res_op->ops[1] = captures[0];
7343 : 14 : res_op->resimplify (lseq, valueize);
7344 : 14 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 883, __FILE__, __LINE__, true);
7345 : : return true;
7346 : : }
7347 : 0 : next_after_fail1591:;
7348 : 0 : return false;
7349 : : }
7350 : :
7351 : : bool
7352 : 63 : gimple_simplify_642 (gimple_match_op *res_op, gimple_seq *seq,
7353 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
7354 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
7355 : : const combined_fn ARG_UNUSED (logs))
7356 : : {
7357 : 63 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
7358 : 63 : if (flag_unsafe_math_optimizations
7359 : : )
7360 : : {
7361 : 36 : if (! HONOR_SIGN_DEPENDENT_ROUNDING (type)
7362 : 36 : && ! HONOR_NANS (type) && ! HONOR_INFINITIES (type)
7363 : 36 : && ! flag_trapping_math
7364 : 72 : && ! flag_errno_math
7365 : : )
7366 : : {
7367 : 36 : gimple_seq *lseq = seq;
7368 : 36 : if (lseq
7369 : 18 : && (!single_use (captures[0])))
7370 : 18 : lseq = NULL;
7371 : 36 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1596;
7372 : 36 : {
7373 : 36 : res_op->set_op (MINUS_EXPR, type, 2);
7374 : 36 : {
7375 : 36 : tree _o1[1], _r1;
7376 : 36 : _o1[0] = captures[1];
7377 : 36 : gimple_match_op tem_op (res_op->cond.any_else (), logs, TREE_TYPE (_o1[0]), _o1[0]);
7378 : 36 : tem_op.resimplify (NULL, valueize);
7379 : 36 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
7380 : 36 : if (!_r1) goto next_after_fail1596;
7381 : 36 : res_op->ops[0] = _r1;
7382 : : }
7383 : 36 : {
7384 : 36 : tree _o1[1], _r1;
7385 : 36 : _o1[0] = captures[2];
7386 : 36 : gimple_match_op tem_op (res_op->cond.any_else (), logs, TREE_TYPE (_o1[0]), _o1[0]);
7387 : 36 : tem_op.resimplify (lseq, valueize);
7388 : 36 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
7389 : 36 : if (!_r1) goto next_after_fail1596;
7390 : 18 : res_op->ops[1] = _r1;
7391 : : }
7392 : 18 : res_op->resimplify (lseq, valueize);
7393 : 18 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 888, __FILE__, __LINE__, true);
7394 : 18 : return true;
7395 : : }
7396 : : next_after_fail1596:;
7397 : : }
7398 : : }
7399 : : return false;
7400 : : }
7401 : :
7402 : : bool
7403 : 1588 : gimple_simplify_655 (gimple_match_op *res_op, gimple_seq *seq,
7404 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
7405 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
7406 : : const combined_fn ARG_UNUSED (froms),
7407 : : const combined_fn ARG_UNUSED (tos))
7408 : : {
7409 : 1588 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
7410 : 1588 : if (optimize && canonicalize_math_p ()
7411 : : )
7412 : : {
7413 : 1588 : gimple_seq *lseq = seq;
7414 : 1588 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1609;
7415 : 1588 : {
7416 : 1588 : res_op->set_op (tos, type, 1);
7417 : 1588 : res_op->ops[0] = captures[0];
7418 : 1588 : res_op->resimplify (lseq, valueize);
7419 : 1588 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 901, __FILE__, __LINE__, true);
7420 : 1588 : return true;
7421 : : }
7422 : 0 : next_after_fail1609:;
7423 : : }
7424 : : return false;
7425 : : }
7426 : :
7427 : : bool
7428 : 47220 : gimple_simplify_662 (gimple_match_op *res_op, gimple_seq *seq,
7429 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
7430 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
7431 : : const combined_fn ARG_UNUSED (SIGNBIT))
7432 : : {
7433 : 47220 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
7434 : 47220 : if (!HONOR_SIGNED_ZEROS (captures[0])
7435 : : )
7436 : : {
7437 : 10 : gimple_seq *lseq = seq;
7438 : 10 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1616;
7439 : 10 : {
7440 : 10 : res_op->set_op (NOP_EXPR, type, 1);
7441 : 10 : {
7442 : 10 : tree _o1[2], _r1;
7443 : 10 : _o1[0] = captures[0];
7444 : 10 : _o1[1] = build_real (TREE_TYPE (captures[0]), dconst0);
7445 : 10 : (*res_op).set_op (LT_EXPR, boolean_type_node, 2);
7446 : 10 : (*res_op).ops[0] = _o1[0];
7447 : 10 : (*res_op).ops[1] = _o1[1];
7448 : 10 : (*res_op).resimplify (lseq, valueize);
7449 : : }
7450 : 10 : if (type != res_op->type
7451 : 10 : && !useless_type_conversion_p (type, res_op->type))
7452 : : {
7453 : 10 : if (!(res_op->ops[0] = maybe_push_res_to_seq (res_op, lseq))) goto next_after_fail1616;
7454 : 10 : res_op->set_op (NOP_EXPR, type, 1);
7455 : 10 : res_op->resimplify (lseq, valueize);
7456 : : }
7457 : 10 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 908, __FILE__, __LINE__, true);
7458 : 10 : return true;
7459 : : }
7460 : : next_after_fail1616:;
7461 : : }
7462 : : return false;
7463 : : }
7464 : :
7465 : : bool
7466 : 2 : gimple_simplify_672 (gimple_match_op *res_op, gimple_seq *seq,
7467 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
7468 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
7469 : : const combined_fn ARG_UNUSED (ctz))
7470 : : {
7471 : 2 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
7472 : 2 : {
7473 : 2 : tree t = TREE_TYPE (captures[0]);
7474 : 2 : gimple_seq *lseq = seq;
7475 : 2 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1626;
7476 : 2 : {
7477 : 2 : res_op->set_op (ctz, type, 1);
7478 : 2 : {
7479 : 2 : tree _o1[1], _r1;
7480 : 2 : _o1[0] = captures[1];
7481 : 2 : if (t != TREE_TYPE (_o1[0]) /* XXX */
7482 : 2 : && !useless_type_conversion_p (t, TREE_TYPE (_o1[0])))
7483 : : {
7484 : 2 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, t, _o1[0]);
7485 : 2 : tem_op.resimplify (lseq, valueize);
7486 : 2 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
7487 : 2 : if (!_r1) goto next_after_fail1626;
7488 : : }
7489 : : else
7490 : : _r1 = _o1[0];
7491 : 1 : res_op->ops[0] = _r1;
7492 : : }
7493 : 1 : res_op->resimplify (lseq, valueize);
7494 : 1 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 918, __FILE__, __LINE__, true);
7495 : : return true;
7496 : : }
7497 : : next_after_fail1626:;
7498 : : }
7499 : : return false;
7500 : : }
7501 : :
7502 : : bool
7503 : 6 : gimple_simplify_681 (gimple_match_op *res_op, gimple_seq *seq,
7504 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
7505 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
7506 : : const enum tree_code ARG_UNUSED (rot),
7507 : : const combined_fn ARG_UNUSED (popcount))
7508 : : {
7509 : 6 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
7510 : 12 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
7511 : 6 : && INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
7512 : 6 : && (
7513 : : 1
7514 : : || !TREE_SIDE_EFFECTS (captures[3]))
7515 : : )
7516 : : {
7517 : 6 : {
7518 : 6 : tree type0 = TREE_TYPE (captures[0]);
7519 : 6 : tree type1 = TREE_TYPE (captures[1]);
7520 : 6 : unsigned int prec0 = TYPE_PRECISION (type0);
7521 : 6 : unsigned int prec1 = TYPE_PRECISION (type1);
7522 : 6 : if (prec0 == prec1 || (prec0 > prec1 && TYPE_UNSIGNED (type1))
7523 : : )
7524 : : {
7525 : 6 : gimple_seq *lseq = seq;
7526 : 6 : if (lseq
7527 : 3 : && (!single_use (captures[0])
7528 : 3 : || !single_use (captures[1])))
7529 : 3 : lseq = NULL;
7530 : 6 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1639;
7531 : 6 : {
7532 : 6 : res_op->set_op (popcount, type, 1);
7533 : 6 : {
7534 : 6 : tree _o1[1], _r1;
7535 : 6 : _o1[0] = captures[2];
7536 : 6 : if (type0 != TREE_TYPE (_o1[0]) /* XXX */
7537 : 6 : && !useless_type_conversion_p (type0, TREE_TYPE (_o1[0])))
7538 : : {
7539 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, type0, _o1[0]);
7540 : 0 : tem_op.resimplify (lseq, valueize);
7541 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
7542 : 0 : if (!_r1) goto next_after_fail1639;
7543 : : }
7544 : : else
7545 : : _r1 = _o1[0];
7546 : 6 : res_op->ops[0] = _r1;
7547 : : }
7548 : 6 : res_op->resimplify (lseq, valueize);
7549 : 6 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 923, __FILE__, __LINE__, true);
7550 : 6 : return true;
7551 : : }
7552 : : next_after_fail1639:;
7553 : : }
7554 : : }
7555 : : }
7556 : : return false;
7557 : : }
7558 : :
7559 : : bool
7560 : 34 : gimple_simplify_689 (gimple_match_op *res_op, gimple_seq *seq,
7561 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
7562 : : const tree ARG_UNUSED (type), tree *ARG_UNUSED (captures),
7563 : : const combined_fn ARG_UNUSED (FFS),
7564 : : const combined_fn ARG_UNUSED (CTZ))
7565 : : {
7566 : 34 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
7567 : 68 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
7568 : 68 : && direct_internal_fn_supported_p (IFN_CTZ, TREE_TYPE (captures[0]),
7569 : : OPTIMIZE_FOR_SPEED)
7570 : : )
7571 : : {
7572 : 34 : {
7573 : 34 : tree utype = unsigned_type_for (TREE_TYPE (captures[0]));
7574 : 34 : gimple_seq *lseq = seq;
7575 : 34 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1650;
7576 : 34 : {
7577 : 34 : res_op->set_op (PLUS_EXPR, type, 2);
7578 : 34 : {
7579 : 34 : tree _o1[1], _r1;
7580 : 34 : {
7581 : 34 : tree _o2[1], _r2;
7582 : 34 : _o2[0] = captures[0];
7583 : 34 : if (utype != TREE_TYPE (_o2[0]) /* XXX */
7584 : 34 : && !useless_type_conversion_p (utype, TREE_TYPE (_o2[0])))
7585 : : {
7586 : 34 : gimple_match_op tem_op (res_op->cond.any_else (), NOP_EXPR, utype, _o2[0]);
7587 : 34 : tem_op.resimplify (lseq, valueize);
7588 : 34 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
7589 : 34 : if (!_r2) goto next_after_fail1650;
7590 : : }
7591 : : else
7592 : : _r2 = _o2[0];
7593 : 32 : _o1[0] = _r2;
7594 : : }
7595 : 32 : gimple_match_op tem_op (res_op->cond.any_else (), CTZ, type, _o1[0]);
7596 : 32 : tem_op.resimplify (lseq, valueize);
7597 : 32 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
7598 : 32 : if (!_r1) goto next_after_fail1650;
7599 : 32 : res_op->ops[0] = _r1;
7600 : : }
7601 : 32 : res_op->ops[1] = build_one_cst (type);
7602 : 32 : res_op->resimplify (lseq, valueize);
7603 : 32 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 935, __FILE__, __LINE__, true);
7604 : 32 : return true;
7605 : : }
7606 : : next_after_fail1650:;
7607 : : }
7608 : : }
7609 : : return false;
7610 : : }
7611 : :
7612 : : bool
7613 : 513434 : gimple_simplify_ABS_EXPR (gimple_match_op *res_op, gimple_seq *seq,
7614 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
7615 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
7616 : : {
7617 : 513434 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
7618 : 513434 : switch (TREE_CODE (_p0))
7619 : : {
7620 : 502668 : case SSA_NAME:
7621 : 502668 : if (gimple *_d1 = get_def (valueize, _p0))
7622 : : {
7623 : 339887 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
7624 : 362528 : switch (gimple_assign_rhs_code (_a1))
7625 : : {
7626 : 9026 : CASE_CONVERT:
7627 : 9026 : {
7628 : 9026 : tree _q20 = gimple_assign_rhs1 (_a1);
7629 : 9026 : _q20 = do_valueize (valueize, _q20);
7630 : 9026 : {
7631 : 9026 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
7632 : 18052 : if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
7633 : 3840 : && !TYPE_UNSIGNED (TREE_TYPE (captures[0]))
7634 : 11729 : && element_precision (type) > element_precision (TREE_TYPE (captures[0]))
7635 : : )
7636 : : {
7637 : 1904 : {
7638 : 1904 : tree utype = unsigned_type_for (TREE_TYPE (captures[0]));
7639 : 1904 : gimple_seq *lseq = seq;
7640 : 1904 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1660;
7641 : 1904 : {
7642 : 1904 : res_op->set_op (NOP_EXPR, type, 1);
7643 : 1904 : {
7644 : 1904 : tree _o1[1], _r1;
7645 : 1904 : _o1[0] = captures[0];
7646 : 1904 : (*res_op).set_op (ABSU_EXPR, utype, 1);
7647 : 1904 : (*res_op).ops[0] = _o1[0];
7648 : 1904 : (*res_op).resimplify (lseq, valueize);
7649 : : }
7650 : 1904 : if (type != res_op->type
7651 : 1904 : && !useless_type_conversion_p (type, res_op->type))
7652 : : {
7653 : 1904 : if (!(res_op->ops[0] = maybe_push_res_to_seq (res_op, lseq))) goto next_after_fail1660;
7654 : 943 : res_op->set_op (NOP_EXPR, type, 1);
7655 : 943 : res_op->resimplify (lseq, valueize);
7656 : : }
7657 : 943 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 945, __FILE__, __LINE__, true);
7658 : 943 : return true;
7659 : : }
7660 : : next_after_fail1660:;
7661 : : }
7662 : : }
7663 : : }
7664 : : break;
7665 : : }
7666 : 94 : case ABS_EXPR:
7667 : 94 : {
7668 : 94 : tree _q20 = gimple_assign_rhs1 (_a1);
7669 : 94 : _q20 = do_valueize (valueize, _q20);
7670 : 94 : {
7671 : 94 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q20 };
7672 : 94 : gimple_seq *lseq = seq;
7673 : 94 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1661;
7674 : 94 : {
7675 : 94 : tree tem;
7676 : 94 : tem = captures[0];
7677 : 94 : res_op->set_value (tem);
7678 : 94 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 946, __FILE__, __LINE__, true);
7679 : 94 : return true;
7680 : : }
7681 : 0 : next_after_fail1661:;
7682 : : }
7683 : 0 : break;
7684 : : }
7685 : 700 : case NEGATE_EXPR:
7686 : 700 : {
7687 : 700 : tree _q20 = gimple_assign_rhs1 (_a1);
7688 : 700 : _q20 = do_valueize (valueize, _q20);
7689 : 700 : {
7690 : 700 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
7691 : 700 : gimple_seq *lseq = seq;
7692 : 700 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1662;
7693 : 700 : {
7694 : 700 : res_op->set_op (ABS_EXPR, type, 1);
7695 : 700 : res_op->ops[0] = captures[0];
7696 : 700 : res_op->resimplify (lseq, valueize);
7697 : 700 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 947, __FILE__, __LINE__, true);
7698 : 700 : return true;
7699 : : }
7700 : 0 : next_after_fail1662:;
7701 : : }
7702 : 0 : break;
7703 : : }
7704 : 0 : case VEC_COND_EXPR:
7705 : 0 : {
7706 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
7707 : 0 : _q20 = do_valueize (valueize, _q20);
7708 : 0 : tree _q21 = gimple_assign_rhs2 (_a1);
7709 : 0 : _q21 = do_valueize (valueize, _q21);
7710 : 0 : tree _q22 = gimple_assign_rhs3 (_a1);
7711 : 0 : _q22 = do_valueize (valueize, _q22);
7712 : 0 : {
7713 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q22 };
7714 : 0 : gimple_seq *lseq = seq;
7715 : 0 : if (lseq
7716 : 0 : && (!single_use (captures[0])))
7717 : 0 : lseq = NULL;
7718 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1663;
7719 : 0 : {
7720 : 0 : res_op->set_op (VEC_COND_EXPR, type, 3);
7721 : 0 : res_op->ops[0] = captures[1];
7722 : 0 : {
7723 : 0 : tree _o1[1], _r1;
7724 : 0 : _o1[0] = captures[2];
7725 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), ABS_EXPR, TREE_TYPE (_o1[0]), _o1[0]);
7726 : 0 : tem_op.resimplify (NULL, valueize);
7727 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
7728 : 0 : if (!_r1) goto next_after_fail1663;
7729 : 0 : res_op->ops[1] = _r1;
7730 : : }
7731 : 0 : {
7732 : 0 : tree _o1[1], _r1;
7733 : 0 : _o1[0] = captures[3];
7734 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), ABS_EXPR, TREE_TYPE (_o1[0]), _o1[0]);
7735 : 0 : tem_op.resimplify (NULL, valueize);
7736 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
7737 : 0 : if (!_r1) goto next_after_fail1663;
7738 : 0 : res_op->ops[2] = _r1;
7739 : : }
7740 : 0 : res_op->resimplify (lseq, valueize);
7741 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 948, __FILE__, __LINE__, true);
7742 : 0 : return true;
7743 : : }
7744 : 0 : next_after_fail1663:;
7745 : : }
7746 : 0 : break;
7747 : : }
7748 : : default:;
7749 : : }
7750 : 69193 : else if (gcall *_c1 = dyn_cast <gcall *> (_d1))
7751 : 5636 : switch (gimple_call_combined_fn (_c1))
7752 : : {
7753 : 4 : case CFN_BUILT_IN_COPYSIGNF16:
7754 : 4 : if (gimple_call_num_args (_c1) == 2)
7755 : : {
7756 : 4 : tree _q20 = gimple_call_arg (_c1, 0);
7757 : 4 : _q20 = do_valueize (valueize, _q20);
7758 : 4 : tree _q21 = gimple_call_arg (_c1, 1);
7759 : 4 : _q21 = do_valueize (valueize, _q21);
7760 : 4 : {
7761 : 4 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
7762 : 4 : if (gimple_simplify_1 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGNF16))
7763 : 4 : return true;
7764 : : }
7765 : : }
7766 : : break;
7767 : 0 : case CFN_BUILT_IN_COPYSIGNF32:
7768 : 0 : if (gimple_call_num_args (_c1) == 2)
7769 : : {
7770 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
7771 : 0 : _q20 = do_valueize (valueize, _q20);
7772 : 0 : tree _q21 = gimple_call_arg (_c1, 1);
7773 : 0 : _q21 = do_valueize (valueize, _q21);
7774 : 0 : {
7775 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
7776 : 0 : if (gimple_simplify_1 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGNF32))
7777 : 0 : return true;
7778 : : }
7779 : : }
7780 : : break;
7781 : 0 : case CFN_BUILT_IN_COPYSIGNF64:
7782 : 0 : if (gimple_call_num_args (_c1) == 2)
7783 : : {
7784 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
7785 : 0 : _q20 = do_valueize (valueize, _q20);
7786 : 0 : tree _q21 = gimple_call_arg (_c1, 1);
7787 : 0 : _q21 = do_valueize (valueize, _q21);
7788 : 0 : {
7789 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
7790 : 0 : if (gimple_simplify_1 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGNF64))
7791 : 0 : return true;
7792 : : }
7793 : : }
7794 : : break;
7795 : 0 : case CFN_BUILT_IN_COPYSIGNF128X:
7796 : 0 : if (gimple_call_num_args (_c1) == 2)
7797 : : {
7798 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
7799 : 0 : _q20 = do_valueize (valueize, _q20);
7800 : 0 : tree _q21 = gimple_call_arg (_c1, 1);
7801 : 0 : _q21 = do_valueize (valueize, _q21);
7802 : 0 : {
7803 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
7804 : 0 : if (gimple_simplify_1 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGNF128X))
7805 : 0 : return true;
7806 : : }
7807 : : }
7808 : : break;
7809 : 4 : case CFN_BUILT_IN_COPYSIGNF128:
7810 : 4 : if (gimple_call_num_args (_c1) == 2)
7811 : : {
7812 : 4 : tree _q20 = gimple_call_arg (_c1, 0);
7813 : 4 : _q20 = do_valueize (valueize, _q20);
7814 : 4 : tree _q21 = gimple_call_arg (_c1, 1);
7815 : 4 : _q21 = do_valueize (valueize, _q21);
7816 : 4 : {
7817 : 4 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
7818 : 4 : if (gimple_simplify_1 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGNF128))
7819 : 4 : return true;
7820 : : }
7821 : : }
7822 : : break;
7823 : 0 : case CFN_BUILT_IN_COPYSIGNF32X:
7824 : 0 : if (gimple_call_num_args (_c1) == 2)
7825 : : {
7826 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
7827 : 0 : _q20 = do_valueize (valueize, _q20);
7828 : 0 : tree _q21 = gimple_call_arg (_c1, 1);
7829 : 0 : _q21 = do_valueize (valueize, _q21);
7830 : 0 : {
7831 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
7832 : 0 : if (gimple_simplify_1 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGNF32X))
7833 : 0 : return true;
7834 : : }
7835 : : }
7836 : : break;
7837 : 0 : case CFN_BUILT_IN_COPYSIGNF64X:
7838 : 0 : if (gimple_call_num_args (_c1) == 2)
7839 : : {
7840 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
7841 : 0 : _q20 = do_valueize (valueize, _q20);
7842 : 0 : tree _q21 = gimple_call_arg (_c1, 1);
7843 : 0 : _q21 = do_valueize (valueize, _q21);
7844 : 0 : {
7845 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
7846 : 0 : if (gimple_simplify_1 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGNF64X))
7847 : 0 : return true;
7848 : : }
7849 : : }
7850 : : break;
7851 : 16 : case CFN_BUILT_IN_COPYSIGN:
7852 : 16 : if (gimple_call_num_args (_c1) == 2)
7853 : : {
7854 : 16 : tree _q20 = gimple_call_arg (_c1, 0);
7855 : 16 : _q20 = do_valueize (valueize, _q20);
7856 : 16 : tree _q21 = gimple_call_arg (_c1, 1);
7857 : 16 : _q21 = do_valueize (valueize, _q21);
7858 : 16 : {
7859 : 16 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
7860 : 16 : if (gimple_simplify_1 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGN))
7861 : 16 : return true;
7862 : : }
7863 : : }
7864 : : break;
7865 : 16 : case CFN_BUILT_IN_COPYSIGNF:
7866 : 16 : if (gimple_call_num_args (_c1) == 2)
7867 : : {
7868 : 16 : tree _q20 = gimple_call_arg (_c1, 0);
7869 : 16 : _q20 = do_valueize (valueize, _q20);
7870 : 16 : tree _q21 = gimple_call_arg (_c1, 1);
7871 : 16 : _q21 = do_valueize (valueize, _q21);
7872 : 16 : {
7873 : 16 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
7874 : 16 : if (gimple_simplify_1 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGNF))
7875 : 16 : return true;
7876 : : }
7877 : : }
7878 : : break;
7879 : 4 : case CFN_BUILT_IN_COPYSIGNL:
7880 : 4 : if (gimple_call_num_args (_c1) == 2)
7881 : : {
7882 : 4 : tree _q20 = gimple_call_arg (_c1, 0);
7883 : 4 : _q20 = do_valueize (valueize, _q20);
7884 : 4 : tree _q21 = gimple_call_arg (_c1, 1);
7885 : 4 : _q21 = do_valueize (valueize, _q21);
7886 : 4 : {
7887 : 4 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
7888 : 4 : if (gimple_simplify_1 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_COPYSIGNL))
7889 : 4 : return true;
7890 : : }
7891 : : }
7892 : : break;
7893 : 0 : case CFN_COPYSIGN:
7894 : 0 : if (gimple_call_num_args (_c1) == 2)
7895 : : {
7896 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
7897 : 0 : _q20 = do_valueize (valueize, _q20);
7898 : 0 : tree _q21 = gimple_call_arg (_c1, 1);
7899 : 0 : _q21 = do_valueize (valueize, _q21);
7900 : 0 : {
7901 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
7902 : 0 : if (gimple_simplify_1 (res_op, seq, valueize, type, captures, CFN_COPYSIGN))
7903 : 0 : return true;
7904 : : }
7905 : : }
7906 : : break;
7907 : : default:;
7908 : : }
7909 : : }
7910 : : break;
7911 : 511653 : default:;
7912 : : }
7913 : 511653 : if (tree_expr_nonnegative_p (_p0))
7914 : : {
7915 : 854 : {
7916 : 854 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
7917 : 854 : gimple_seq *lseq = seq;
7918 : 854 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1664;
7919 : 854 : {
7920 : 854 : tree tem;
7921 : 854 : tem = captures[0];
7922 : 854 : res_op->set_value (tem);
7923 : 854 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 949, __FILE__, __LINE__, true);
7924 : 854 : return true;
7925 : : }
7926 : 0 : next_after_fail1664:;
7927 : : }
7928 : : }
7929 : : return false;
7930 : : }
7931 : :
7932 : : bool
7933 : 1958046 : gimple_simplify_FLOAT_EXPR (gimple_match_op *res_op, gimple_seq *seq,
7934 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
7935 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
7936 : : {
7937 : 1958046 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
7938 : 1958046 : {
7939 : 1958046 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
7940 : 1958046 : if ((
7941 : : 1
7942 : 1958046 : && useless_type_conversion_p (type, TREE_TYPE (captures[0])))
7943 : : || (
7944 : :
7945 : : && type == TREE_TYPE (captures[0]))
7946 : : )
7947 : : {
7948 : 0 : gimple_seq *lseq = seq;
7949 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1757;
7950 : 0 : {
7951 : 0 : tree tem;
7952 : 0 : tem = captures[0];
7953 : 0 : res_op->set_value (tem);
7954 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 955, __FILE__, __LINE__, true);
7955 : 0 : return true;
7956 : : }
7957 : 0 : next_after_fail1757:;
7958 : : }
7959 : : }
7960 : 1958046 : switch (TREE_CODE (_p0))
7961 : : {
7962 : 1891379 : case SSA_NAME:
7963 : 1891379 : if (gimple *_d1 = get_def (valueize, _p0))
7964 : : {
7965 : 1270509 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
7966 : 1301190 : switch (gimple_assign_rhs_code (_a1))
7967 : : {
7968 : 93307 : CASE_CONVERT:
7969 : 93307 : {
7970 : 93307 : tree _q20 = gimple_assign_rhs1 (_a1);
7971 : 93307 : _q20 = do_valueize (valueize, _q20);
7972 : 93307 : {
7973 : 93307 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q20 };
7974 : 93307 : {
7975 : 93307 : tree inside_type = TREE_TYPE (captures[1]);
7976 : 93307 : tree inter_type = TREE_TYPE (captures[0]);
7977 : 93307 : int inside_int = INTEGRAL_TYPE_P (inside_type);
7978 : 93307 : int inside_ptr = POINTER_TYPE_P (inside_type);
7979 : 93307 : int inside_float = FLOAT_TYPE_P (inside_type);
7980 : 93307 : int inside_vec = VECTOR_TYPE_P (inside_type);
7981 : 93307 : unsigned int inside_prec = element_precision (inside_type);
7982 : 93307 : int inside_unsignedp = TYPE_UNSIGNED (inside_type);
7983 : 93307 : int inter_int = INTEGRAL_TYPE_P (inter_type);
7984 : 93307 : int inter_ptr = POINTER_TYPE_P (inter_type);
7985 : 93307 : int inter_float = FLOAT_TYPE_P (inter_type);
7986 : 93307 : int inter_vec = VECTOR_TYPE_P (inter_type);
7987 : 93307 : unsigned int inter_prec = element_precision (inter_type);
7988 : 93307 : int inter_unsignedp = TYPE_UNSIGNED (inter_type);
7989 : 93307 : int final_int = INTEGRAL_TYPE_P (type);
7990 : 93307 : int final_ptr = POINTER_TYPE_P (type);
7991 : 93307 : int final_float = FLOAT_TYPE_P (type);
7992 : 93307 : int final_vec = VECTOR_TYPE_P (type);
7993 : 93307 : unsigned int final_prec = element_precision (type);
7994 : 93307 : int final_unsignedp = TYPE_UNSIGNED (type);
7995 : 93307 : if (((
7996 : : 1
7997 : 93307 : && useless_type_conversion_p (type, inside_type))
7998 : : || (
7999 : :
8000 : : && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (inside_type)))
8001 : 0 : && (((inter_int || inter_ptr) && final_int)
8002 : 0 : || (inter_float && final_float))
8003 : 93307 : && inter_prec >= final_prec
8004 : : )
8005 : : {
8006 : 0 : gimple_seq *lseq = seq;
8007 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1758;
8008 : 0 : {
8009 : 0 : res_op->set_op (FLOAT_EXPR, type, 1);
8010 : 0 : res_op->ops[0] = captures[1];
8011 : 0 : res_op->resimplify (lseq, valueize);
8012 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 956, __FILE__, __LINE__, true);
8013 : 0 : return true;
8014 : : }
8015 : 0 : next_after_fail1758:;
8016 : : }
8017 : : else
8018 : : {
8019 : 93307 : if (((inter_int && inside_int) || (inter_float && inside_float))
8020 : 93122 : && (final_int || final_float)
8021 : 93122 : && inter_prec >= inside_prec
8022 : 57943 : && (inter_float || inter_unsignedp == inside_unsignedp)
8023 : : )
8024 : : {
8025 : 876 : gimple_seq *lseq = seq;
8026 : 876 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1759;
8027 : 876 : {
8028 : 876 : res_op->set_op (FLOAT_EXPR, type, 1);
8029 : 876 : res_op->ops[0] = captures[1];
8030 : 876 : res_op->resimplify (lseq, valueize);
8031 : 876 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 957, __FILE__, __LINE__, true);
8032 : 876 : return true;
8033 : : }
8034 : 0 : next_after_fail1759:;
8035 : 0 : }
8036 : : else
8037 : : {
8038 : 92431 : if (inside_int && inter_int && final_int
8039 : 0 : && ((inside_prec < inter_prec && inter_prec < final_prec
8040 : 0 : && inside_unsignedp && !inter_unsignedp)
8041 : 0 : || final_prec == inter_prec
8042 : 0 : || (inside_prec < inter_prec && inter_prec > final_prec
8043 : 0 : && !inside_unsignedp && inter_unsignedp))
8044 : : )
8045 : : {
8046 : 0 : gimple_seq *lseq = seq;
8047 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1760;
8048 : 0 : {
8049 : 0 : res_op->set_op (FLOAT_EXPR, type, 1);
8050 : 0 : res_op->ops[0] = captures[1];
8051 : 0 : res_op->resimplify (lseq, valueize);
8052 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 958, __FILE__, __LINE__, true);
8053 : 0 : return true;
8054 : : }
8055 : 0 : next_after_fail1760:;
8056 : 0 : }
8057 : : else
8058 : : {
8059 : 92431 : if (! inside_float && ! inter_float && ! final_float
8060 : : && ! inside_vec && ! inter_vec && ! final_vec
8061 : 0 : && (inter_prec >= inside_prec || inter_prec >= final_prec)
8062 : 0 : && ! (inside_int && inter_int
8063 : 0 : && inter_unsignedp != inside_unsignedp
8064 : 0 : && inter_prec < final_prec)
8065 : 0 : && ((inter_unsignedp && inter_prec > inside_prec)
8066 : 0 : == (final_unsignedp && final_prec > inter_prec))
8067 : 0 : && ! (inside_ptr && inter_prec != final_prec)
8068 : 0 : && ! (final_ptr && inside_prec != inter_prec)
8069 : : )
8070 : : {
8071 : 0 : gimple_seq *lseq = seq;
8072 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1761;
8073 : 0 : {
8074 : 0 : res_op->set_op (FLOAT_EXPR, type, 1);
8075 : 0 : res_op->ops[0] = captures[1];
8076 : 0 : res_op->resimplify (lseq, valueize);
8077 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 959, __FILE__, __LINE__, true);
8078 : 0 : return true;
8079 : : }
8080 : 0 : next_after_fail1761:;
8081 : 0 : }
8082 : : else
8083 : : {
8084 : 92431 : if (inside_int && inter_int && final_int
8085 : 92246 : && final_prec <= inside_prec
8086 : 0 : && inter_prec >= inside_prec
8087 : : )
8088 : : {
8089 : 0 : gimple_seq *lseq = seq;
8090 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1762;
8091 : 0 : {
8092 : 0 : res_op->set_op (NOP_EXPR, type, 1);
8093 : 0 : res_op->ops[0] = captures[1];
8094 : 0 : res_op->resimplify (lseq, valueize);
8095 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 960, __FILE__, __LINE__, true);
8096 : 0 : return true;
8097 : : }
8098 : 0 : next_after_fail1762:;
8099 : 0 : }
8100 : : else
8101 : : {
8102 : 92431 : if (1
8103 : 92431 : && final_int && inter_int && inside_int
8104 : 0 : && final_prec >= inside_prec
8105 : 0 : && inside_prec > inter_prec
8106 : 0 : && inter_unsignedp
8107 : : )
8108 : : {
8109 : 0 : gimple_seq *lseq = seq;
8110 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1763;
8111 : 0 : {
8112 : 0 : res_op->set_op (NOP_EXPR, type, 1);
8113 : 0 : {
8114 : 0 : tree _o1[2], _r1;
8115 : 0 : _o1[0] = captures[1];
8116 : 0 : _o1[1] = wide_int_to_tree
8117 : 0 : (inside_type,
8118 : 0 : wi::mask (inter_prec, false,
8119 : 0 : TYPE_PRECISION (inside_type)));
8120 : 0 : (*res_op).set_op (BIT_AND_EXPR, TREE_TYPE (_o1[0]), 2);
8121 : 0 : (*res_op).ops[0] = _o1[0];
8122 : 0 : (*res_op).ops[1] = _o1[1];
8123 : 0 : (*res_op).resimplify (lseq, valueize);
8124 : : }
8125 : 0 : if (type != res_op->type
8126 : 0 : && !useless_type_conversion_p (type, res_op->type))
8127 : : {
8128 : 0 : if (!(res_op->ops[0] = maybe_push_res_to_seq (res_op, lseq))) goto next_after_fail1763;
8129 : 0 : res_op->set_op (NOP_EXPR, type, 1);
8130 : 0 : res_op->resimplify (lseq, valueize);
8131 : : }
8132 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 961, __FILE__, __LINE__, true);
8133 : 0 : return true;
8134 : : }
8135 : 92431 : next_after_fail1763:;
8136 : : }
8137 : : else
8138 : : {
8139 : 92431 : if (1
8140 : 92431 : && inside_int && inter_float && final_int &&
8141 : 92431 : (unsigned) significand_size (TYPE_MODE (inter_type))
8142 : 0 : >= inside_prec - !inside_unsignedp
8143 : : )
8144 : : {
8145 : 0 : gimple_seq *lseq = seq;
8146 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1764;
8147 : 0 : {
8148 : 0 : res_op->set_op (NOP_EXPR, type, 1);
8149 : 0 : res_op->ops[0] = captures[1];
8150 : 0 : res_op->resimplify (lseq, valueize);
8151 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 962, __FILE__, __LINE__, true);
8152 : 0 : return true;
8153 : : }
8154 : 0 : next_after_fail1764:;
8155 : : }
8156 : : }
8157 : : }
8158 : : }
8159 : : }
8160 : : }
8161 : : }
8162 : : }
8163 : : }
8164 : 92431 : break;
8165 : : }
8166 : 0 : case FLOAT_EXPR:
8167 : 0 : {
8168 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
8169 : 0 : _q20 = do_valueize (valueize, _q20);
8170 : 0 : {
8171 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q20 };
8172 : 0 : {
8173 : 0 : tree inside_type = TREE_TYPE (captures[1]);
8174 : 0 : tree inter_type = TREE_TYPE (captures[0]);
8175 : 0 : int inside_int = INTEGRAL_TYPE_P (inside_type);
8176 : 0 : int inside_ptr = POINTER_TYPE_P (inside_type);
8177 : 0 : int inside_float = FLOAT_TYPE_P (inside_type);
8178 : 0 : int inside_vec = VECTOR_TYPE_P (inside_type);
8179 : 0 : unsigned int inside_prec = element_precision (inside_type);
8180 : 0 : int inside_unsignedp = TYPE_UNSIGNED (inside_type);
8181 : 0 : int inter_int = INTEGRAL_TYPE_P (inter_type);
8182 : 0 : int inter_ptr = POINTER_TYPE_P (inter_type);
8183 : 0 : int inter_float = FLOAT_TYPE_P (inter_type);
8184 : 0 : int inter_vec = VECTOR_TYPE_P (inter_type);
8185 : 0 : unsigned int inter_prec = element_precision (inter_type);
8186 : 0 : int inter_unsignedp = TYPE_UNSIGNED (inter_type);
8187 : 0 : int final_int = INTEGRAL_TYPE_P (type);
8188 : 0 : int final_ptr = POINTER_TYPE_P (type);
8189 : 0 : int final_float = FLOAT_TYPE_P (type);
8190 : 0 : int final_vec = VECTOR_TYPE_P (type);
8191 : 0 : unsigned int final_prec = element_precision (type);
8192 : 0 : int final_unsignedp = TYPE_UNSIGNED (type);
8193 : 0 : if (((
8194 : : 1
8195 : 0 : && useless_type_conversion_p (type, inside_type))
8196 : : || (
8197 : :
8198 : : && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (inside_type)))
8199 : 0 : && (((inter_int || inter_ptr) && final_int)
8200 : 0 : || (inter_float && final_float))
8201 : 0 : && inter_prec >= final_prec
8202 : : )
8203 : : {
8204 : 0 : gimple_seq *lseq = seq;
8205 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1765;
8206 : 0 : {
8207 : 0 : res_op->set_op (FLOAT_EXPR, type, 1);
8208 : 0 : res_op->ops[0] = captures[1];
8209 : 0 : res_op->resimplify (lseq, valueize);
8210 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 956, __FILE__, __LINE__, true);
8211 : 0 : return true;
8212 : : }
8213 : 0 : next_after_fail1765:;
8214 : : }
8215 : : else
8216 : : {
8217 : 0 : if (((inter_int && inside_int) || (inter_float && inside_float))
8218 : 0 : && (final_int || final_float)
8219 : 0 : && inter_prec >= inside_prec
8220 : 0 : && (inter_float || inter_unsignedp == inside_unsignedp)
8221 : : )
8222 : : {
8223 : 0 : gimple_seq *lseq = seq;
8224 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1766;
8225 : 0 : {
8226 : 0 : res_op->set_op (FLOAT_EXPR, type, 1);
8227 : 0 : res_op->ops[0] = captures[1];
8228 : 0 : res_op->resimplify (lseq, valueize);
8229 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 957, __FILE__, __LINE__, true);
8230 : 0 : return true;
8231 : : }
8232 : 0 : next_after_fail1766:;
8233 : 0 : }
8234 : : else
8235 : : {
8236 : 0 : if (inside_int && inter_int && final_int
8237 : 0 : && ((inside_prec < inter_prec && inter_prec < final_prec
8238 : 0 : && inside_unsignedp && !inter_unsignedp)
8239 : 0 : || final_prec == inter_prec
8240 : 0 : || (inside_prec < inter_prec && inter_prec > final_prec
8241 : 0 : && !inside_unsignedp && inter_unsignedp))
8242 : : )
8243 : : {
8244 : 0 : gimple_seq *lseq = seq;
8245 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1767;
8246 : 0 : {
8247 : 0 : res_op->set_op (FLOAT_EXPR, type, 1);
8248 : 0 : res_op->ops[0] = captures[1];
8249 : 0 : res_op->resimplify (lseq, valueize);
8250 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 958, __FILE__, __LINE__, true);
8251 : 0 : return true;
8252 : : }
8253 : 0 : next_after_fail1767:;
8254 : 0 : }
8255 : : else
8256 : : {
8257 : 0 : if (! inside_float && ! inter_float && ! final_float
8258 : : && ! inside_vec && ! inter_vec && ! final_vec
8259 : 0 : && (inter_prec >= inside_prec || inter_prec >= final_prec)
8260 : 0 : && ! (inside_int && inter_int
8261 : 0 : && inter_unsignedp != inside_unsignedp
8262 : 0 : && inter_prec < final_prec)
8263 : 0 : && ((inter_unsignedp && inter_prec > inside_prec)
8264 : 0 : == (final_unsignedp && final_prec > inter_prec))
8265 : 0 : && ! (inside_ptr && inter_prec != final_prec)
8266 : 0 : && ! (final_ptr && inside_prec != inter_prec)
8267 : : )
8268 : : {
8269 : 0 : gimple_seq *lseq = seq;
8270 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1768;
8271 : 0 : {
8272 : 0 : res_op->set_op (FLOAT_EXPR, type, 1);
8273 : 0 : res_op->ops[0] = captures[1];
8274 : 0 : res_op->resimplify (lseq, valueize);
8275 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 959, __FILE__, __LINE__, true);
8276 : 0 : return true;
8277 : : }
8278 : 0 : next_after_fail1768:;
8279 : 0 : }
8280 : : else
8281 : : {
8282 : 0 : if (inside_int && inter_int && final_int
8283 : 0 : && final_prec <= inside_prec
8284 : 0 : && inter_prec >= inside_prec
8285 : : )
8286 : : {
8287 : 0 : gimple_seq *lseq = seq;
8288 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1769;
8289 : 0 : {
8290 : 0 : res_op->set_op (NOP_EXPR, type, 1);
8291 : 0 : res_op->ops[0] = captures[1];
8292 : 0 : res_op->resimplify (lseq, valueize);
8293 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 960, __FILE__, __LINE__, true);
8294 : 0 : return true;
8295 : : }
8296 : 0 : next_after_fail1769:;
8297 : 0 : }
8298 : : else
8299 : : {
8300 : 0 : if (1
8301 : 0 : && final_int && inter_int && inside_int
8302 : 0 : && final_prec >= inside_prec
8303 : 0 : && inside_prec > inter_prec
8304 : 0 : && inter_unsignedp
8305 : : )
8306 : : {
8307 : 0 : gimple_seq *lseq = seq;
8308 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1770;
8309 : 0 : {
8310 : 0 : res_op->set_op (NOP_EXPR, type, 1);
8311 : 0 : {
8312 : 0 : tree _o1[2], _r1;
8313 : 0 : _o1[0] = captures[1];
8314 : 0 : _o1[1] = wide_int_to_tree
8315 : 0 : (inside_type,
8316 : 0 : wi::mask (inter_prec, false,
8317 : 0 : TYPE_PRECISION (inside_type)));
8318 : 0 : (*res_op).set_op (BIT_AND_EXPR, TREE_TYPE (_o1[0]), 2);
8319 : 0 : (*res_op).ops[0] = _o1[0];
8320 : 0 : (*res_op).ops[1] = _o1[1];
8321 : 0 : (*res_op).resimplify (lseq, valueize);
8322 : : }
8323 : 0 : if (type != res_op->type
8324 : 0 : && !useless_type_conversion_p (type, res_op->type))
8325 : : {
8326 : 0 : if (!(res_op->ops[0] = maybe_push_res_to_seq (res_op, lseq))) goto next_after_fail1770;
8327 : 0 : res_op->set_op (NOP_EXPR, type, 1);
8328 : 0 : res_op->resimplify (lseq, valueize);
8329 : : }
8330 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 961, __FILE__, __LINE__, true);
8331 : 0 : return true;
8332 : : }
8333 : 0 : next_after_fail1770:;
8334 : : }
8335 : : else
8336 : : {
8337 : 0 : if (1
8338 : 0 : && inside_int && inter_float && final_int &&
8339 : 0 : (unsigned) significand_size (TYPE_MODE (inter_type))
8340 : 0 : >= inside_prec - !inside_unsignedp
8341 : : )
8342 : : {
8343 : 0 : gimple_seq *lseq = seq;
8344 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1771;
8345 : 0 : {
8346 : 0 : res_op->set_op (NOP_EXPR, type, 1);
8347 : 0 : res_op->ops[0] = captures[1];
8348 : 0 : res_op->resimplify (lseq, valueize);
8349 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 962, __FILE__, __LINE__, true);
8350 : 0 : return true;
8351 : : }
8352 : 0 : next_after_fail1771:;
8353 : : }
8354 : : }
8355 : : }
8356 : : }
8357 : : }
8358 : : }
8359 : : }
8360 : : }
8361 : : }
8362 : 0 : break;
8363 : : }
8364 : 12534 : case FIX_TRUNC_EXPR:
8365 : 12534 : {
8366 : 12534 : tree _q20 = gimple_assign_rhs1 (_a1);
8367 : 12534 : _q20 = do_valueize (valueize, _q20);
8368 : 12534 : {
8369 : 12534 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
8370 : 12534 : if (!flag_trapping_math
8371 : 913 : && !HONOR_SIGNED_ZEROS (type)
8372 : 577 : && types_match (type, TREE_TYPE (captures[0]))
8373 : 13079 : && direct_internal_fn_supported_p (IFN_TRUNC, type,
8374 : : OPTIMIZE_FOR_BOTH)
8375 : : )
8376 : : {
8377 : 0 : gimple_seq *lseq = seq;
8378 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1772;
8379 : 0 : {
8380 : 0 : res_op->set_op (CFN_TRUNC, type, 1);
8381 : 0 : res_op->ops[0] = captures[0];
8382 : 0 : res_op->resimplify (lseq, valueize);
8383 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 998, __FILE__, __LINE__, true);
8384 : 0 : return true;
8385 : : }
8386 : 0 : next_after_fail1772:;
8387 : : }
8388 : : }
8389 : : break;
8390 : : }
8391 : : default:;
8392 : : }
8393 : : }
8394 : : break;
8395 : : default:;
8396 : : }
8397 : : return false;
8398 : : }
8399 : :
8400 : : bool
8401 : 108 : gimple_simplify_CFN_BUILT_IN_BSWAP128 (gimple_match_op *res_op, gimple_seq *seq,
8402 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
8403 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
8404 : : {
8405 : 108 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
8406 : 108 : switch (TREE_CODE (_p0))
8407 : : {
8408 : 105 : case SSA_NAME:
8409 : 105 : if (gimple *_d1 = get_def (valueize, _p0))
8410 : : {
8411 : 64 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
8412 : 54 : switch (gimple_assign_rhs_code (_a1))
8413 : : {
8414 : 0 : case BIT_NOT_EXPR:
8415 : 0 : {
8416 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
8417 : 0 : _q20 = do_valueize (valueize, _q20);
8418 : 0 : switch (TREE_CODE (_q20))
8419 : : {
8420 : 0 : case SSA_NAME:
8421 : 0 : if (gimple *_d2 = get_def (valueize, _q20))
8422 : : {
8423 : 0 : if (gcall *_c2 = dyn_cast <gcall *> (_d2))
8424 : 0 : switch (gimple_call_combined_fn (_c2))
8425 : : {
8426 : 0 : case CFN_BUILT_IN_BSWAP128:
8427 : 0 : if (gimple_call_num_args (_c2) == 1)
8428 : : {
8429 : 0 : tree _q30 = gimple_call_arg (_c2, 0);
8430 : 0 : _q30 = do_valueize (valueize, _q30);
8431 : 0 : {
8432 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q30 };
8433 : 0 : if (gimple_simplify_614 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_BSWAP128))
8434 : 0 : return true;
8435 : : }
8436 : : }
8437 : : break;
8438 : : default:;
8439 : : }
8440 : : }
8441 : : break;
8442 : : default:;
8443 : : }
8444 : : break;
8445 : : }
8446 : 0 : case BIT_XOR_EXPR:
8447 : 0 : {
8448 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
8449 : 0 : _q20 = do_valueize (valueize, _q20);
8450 : 0 : tree _q21 = gimple_assign_rhs2 (_a1);
8451 : 0 : _q21 = do_valueize (valueize, _q21);
8452 : 0 : if (tree_swap_operands_p (_q20, _q21))
8453 : 0 : std::swap (_q20, _q21);
8454 : 0 : switch (TREE_CODE (_q20))
8455 : : {
8456 : 0 : case SSA_NAME:
8457 : 0 : if (gimple *_d2 = get_def (valueize, _q20))
8458 : : {
8459 : 0 : if (gcall *_c2 = dyn_cast <gcall *> (_d2))
8460 : 0 : switch (gimple_call_combined_fn (_c2))
8461 : : {
8462 : 0 : case CFN_BUILT_IN_BSWAP128:
8463 : 0 : if (gimple_call_num_args (_c2) == 1)
8464 : : {
8465 : 0 : tree _q30 = gimple_call_arg (_c2, 0);
8466 : 0 : _q30 = do_valueize (valueize, _q30);
8467 : 0 : {
8468 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q30, _q21 };
8469 : 0 : if (gimple_simplify_615 (res_op, seq, valueize, type, captures, BIT_XOR_EXPR, CFN_BUILT_IN_BSWAP128))
8470 : 0 : return true;
8471 : : }
8472 : : }
8473 : : break;
8474 : : default:;
8475 : : }
8476 : : }
8477 : : break;
8478 : 0 : default:;
8479 : : }
8480 : 0 : switch (TREE_CODE (_q21))
8481 : : {
8482 : 0 : case SSA_NAME:
8483 : 0 : if (gimple *_d2 = get_def (valueize, _q21))
8484 : : {
8485 : 0 : if (gcall *_c2 = dyn_cast <gcall *> (_d2))
8486 : 0 : switch (gimple_call_combined_fn (_c2))
8487 : : {
8488 : 0 : case CFN_BUILT_IN_BSWAP128:
8489 : 0 : if (gimple_call_num_args (_c2) == 1)
8490 : : {
8491 : 0 : tree _q40 = gimple_call_arg (_c2, 0);
8492 : 0 : _q40 = do_valueize (valueize, _q40);
8493 : 0 : {
8494 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q40, _q20 };
8495 : 0 : if (gimple_simplify_615 (res_op, seq, valueize, type, captures, BIT_XOR_EXPR, CFN_BUILT_IN_BSWAP128))
8496 : 0 : return true;
8497 : : }
8498 : : }
8499 : : break;
8500 : : default:;
8501 : : }
8502 : : }
8503 : : break;
8504 : : default:;
8505 : : }
8506 : 108 : break;
8507 : : }
8508 : 0 : case BIT_IOR_EXPR:
8509 : 0 : {
8510 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
8511 : 0 : _q20 = do_valueize (valueize, _q20);
8512 : 0 : tree _q21 = gimple_assign_rhs2 (_a1);
8513 : 0 : _q21 = do_valueize (valueize, _q21);
8514 : 0 : if (tree_swap_operands_p (_q20, _q21))
8515 : 0 : std::swap (_q20, _q21);
8516 : 0 : switch (TREE_CODE (_q20))
8517 : : {
8518 : 0 : case SSA_NAME:
8519 : 0 : if (gimple *_d2 = get_def (valueize, _q20))
8520 : : {
8521 : 0 : if (gcall *_c2 = dyn_cast <gcall *> (_d2))
8522 : 0 : switch (gimple_call_combined_fn (_c2))
8523 : : {
8524 : 0 : case CFN_BUILT_IN_BSWAP128:
8525 : 0 : if (gimple_call_num_args (_c2) == 1)
8526 : : {
8527 : 0 : tree _q30 = gimple_call_arg (_c2, 0);
8528 : 0 : _q30 = do_valueize (valueize, _q30);
8529 : 0 : {
8530 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q30, _q21 };
8531 : 0 : if (gimple_simplify_615 (res_op, seq, valueize, type, captures, BIT_IOR_EXPR, CFN_BUILT_IN_BSWAP128))
8532 : 0 : return true;
8533 : : }
8534 : : }
8535 : : break;
8536 : : default:;
8537 : : }
8538 : : }
8539 : : break;
8540 : 0 : default:;
8541 : : }
8542 : 0 : switch (TREE_CODE (_q21))
8543 : : {
8544 : 0 : case SSA_NAME:
8545 : 0 : if (gimple *_d2 = get_def (valueize, _q21))
8546 : : {
8547 : 0 : if (gcall *_c2 = dyn_cast <gcall *> (_d2))
8548 : 0 : switch (gimple_call_combined_fn (_c2))
8549 : : {
8550 : 0 : case CFN_BUILT_IN_BSWAP128:
8551 : 0 : if (gimple_call_num_args (_c2) == 1)
8552 : : {
8553 : 0 : tree _q40 = gimple_call_arg (_c2, 0);
8554 : 0 : _q40 = do_valueize (valueize, _q40);
8555 : 0 : {
8556 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q40, _q20 };
8557 : 0 : if (gimple_simplify_615 (res_op, seq, valueize, type, captures, BIT_IOR_EXPR, CFN_BUILT_IN_BSWAP128))
8558 : 0 : return true;
8559 : : }
8560 : : }
8561 : : break;
8562 : : default:;
8563 : : }
8564 : : }
8565 : : break;
8566 : : default:;
8567 : : }
8568 : 108 : break;
8569 : : }
8570 : 0 : case BIT_AND_EXPR:
8571 : 0 : {
8572 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
8573 : 0 : _q20 = do_valueize (valueize, _q20);
8574 : 0 : tree _q21 = gimple_assign_rhs2 (_a1);
8575 : 0 : _q21 = do_valueize (valueize, _q21);
8576 : 0 : if (tree_swap_operands_p (_q20, _q21))
8577 : 0 : std::swap (_q20, _q21);
8578 : 0 : switch (TREE_CODE (_q20))
8579 : : {
8580 : 0 : case SSA_NAME:
8581 : 0 : if (gimple *_d2 = get_def (valueize, _q20))
8582 : : {
8583 : 0 : if (gcall *_c2 = dyn_cast <gcall *> (_d2))
8584 : 0 : switch (gimple_call_combined_fn (_c2))
8585 : : {
8586 : 0 : case CFN_BUILT_IN_BSWAP128:
8587 : 0 : if (gimple_call_num_args (_c2) == 1)
8588 : : {
8589 : 0 : tree _q30 = gimple_call_arg (_c2, 0);
8590 : 0 : _q30 = do_valueize (valueize, _q30);
8591 : 0 : {
8592 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q30, _q21 };
8593 : 0 : if (gimple_simplify_615 (res_op, seq, valueize, type, captures, BIT_AND_EXPR, CFN_BUILT_IN_BSWAP128))
8594 : 0 : return true;
8595 : : }
8596 : : }
8597 : : break;
8598 : : default:;
8599 : : }
8600 : : }
8601 : : break;
8602 : 0 : default:;
8603 : : }
8604 : 0 : switch (TREE_CODE (_q21))
8605 : : {
8606 : 0 : case SSA_NAME:
8607 : 0 : if (gimple *_d2 = get_def (valueize, _q21))
8608 : : {
8609 : 0 : if (gcall *_c2 = dyn_cast <gcall *> (_d2))
8610 : 0 : switch (gimple_call_combined_fn (_c2))
8611 : : {
8612 : 0 : case CFN_BUILT_IN_BSWAP128:
8613 : 0 : if (gimple_call_num_args (_c2) == 1)
8614 : : {
8615 : 0 : tree _q40 = gimple_call_arg (_c2, 0);
8616 : 0 : _q40 = do_valueize (valueize, _q40);
8617 : 0 : {
8618 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q40, _q20 };
8619 : 0 : if (gimple_simplify_615 (res_op, seq, valueize, type, captures, BIT_AND_EXPR, CFN_BUILT_IN_BSWAP128))
8620 : 0 : return true;
8621 : : }
8622 : : }
8623 : : break;
8624 : : default:;
8625 : : }
8626 : : }
8627 : : break;
8628 : : default:;
8629 : : }
8630 : 108 : break;
8631 : : }
8632 : : default:;
8633 : : }
8634 : 10 : else if (gcall *_c1 = dyn_cast <gcall *> (_d1))
8635 : 4 : switch (gimple_call_combined_fn (_c1))
8636 : : {
8637 : 4 : case CFN_BUILT_IN_BSWAP128:
8638 : 4 : if (gimple_call_num_args (_c1) == 1)
8639 : : {
8640 : 4 : tree _q20 = gimple_call_arg (_c1, 0);
8641 : 4 : _q20 = do_valueize (valueize, _q20);
8642 : 4 : {
8643 : 4 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
8644 : 4 : if (gimple_simplify_613 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_BSWAP128))
8645 : 4 : return true;
8646 : : }
8647 : : }
8648 : : break;
8649 : : default:;
8650 : : }
8651 : : }
8652 : : break;
8653 : : default:;
8654 : : }
8655 : : return false;
8656 : : }
8657 : :
8658 : : bool
8659 : 1028 : gimple_simplify_CFN_BUILT_IN_LOG2 (gimple_match_op *res_op, gimple_seq *seq,
8660 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
8661 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
8662 : : {
8663 : 1028 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
8664 : 1028 : switch (TREE_CODE (_p0))
8665 : : {
8666 : 651 : case SSA_NAME:
8667 : 651 : if (gimple *_d1 = get_def (valueize, _p0))
8668 : : {
8669 : 415 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
8670 : 225 : switch (gimple_assign_rhs_code (_a1))
8671 : : {
8672 : 9 : case RDIV_EXPR:
8673 : 9 : {
8674 : 9 : tree _q20 = gimple_assign_rhs1 (_a1);
8675 : 9 : _q20 = do_valueize (valueize, _q20);
8676 : 9 : tree _q21 = gimple_assign_rhs2 (_a1);
8677 : 9 : _q21 = do_valueize (valueize, _q21);
8678 : 9 : switch (TREE_CODE (_q20))
8679 : : {
8680 : 4 : case REAL_CST:
8681 : 4 : {
8682 : 4 : {
8683 : 4 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
8684 : 4 : if (gimple_simplify_642 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_LOG2))
8685 : 2 : return true;
8686 : : }
8687 : 2 : break;
8688 : : }
8689 : 7 : default:;
8690 : : }
8691 : 7 : if (real_onep (_q20))
8692 : : {
8693 : 1 : {
8694 : 1 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
8695 : 1 : if (gimple_simplify_641 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_LOG2))
8696 : 0 : return true;
8697 : : }
8698 : : }
8699 : : break;
8700 : : }
8701 : : default:;
8702 : : }
8703 : 266 : else if (gcall *_c1 = dyn_cast <gcall *> (_d1))
8704 : 105 : switch (gimple_call_combined_fn (_c1))
8705 : : {
8706 : 12 : case CFN_BUILT_IN_EXP:
8707 : 12 : if (gimple_call_num_args (_c1) == 1)
8708 : : {
8709 : 12 : tree _q20 = gimple_call_arg (_c1, 0);
8710 : 12 : _q20 = do_valueize (valueize, _q20);
8711 : 12 : {
8712 : 12 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
8713 : 12 : if (flag_unsafe_math_optimizations
8714 : : )
8715 : : {
8716 : 12 : if (SCALAR_FLOAT_TYPE_P (type)
8717 : : )
8718 : : {
8719 : 12 : {
8720 : 12 : tree x;
8721 : 12 : switch (CFN_BUILT_IN_EXP)
8722 : : {
8723 : 12 : CASE_CFN_EXP:
8724 : 12 : x = build_real_truncate (type, dconst_e ());
8725 : 12 : break;
8726 : : CASE_CFN_EXP2:
8727 : : x = build_real (type, dconst2);
8728 : : break;
8729 : : CASE_CFN_EXP10:
8730 : : CASE_CFN_POW10:
8731 : : {
8732 : : REAL_VALUE_TYPE dconst10;
8733 : : real_from_integer (&dconst10, VOIDmode, 10, SIGNED);
8734 : : x = build_real (type, dconst10);
8735 : : }
8736 : : break;
8737 : : default:
8738 : : gcc_unreachable ();
8739 : : }
8740 : 12 : gimple_seq *lseq = seq;
8741 : 12 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1846;
8742 : 12 : {
8743 : 12 : res_op->set_op (MULT_EXPR, type, 2);
8744 : 12 : {
8745 : 12 : tree _o1[1], _r1;
8746 : 12 : _o1[0] = x;
8747 : 12 : gimple_match_op tem_op (res_op->cond.any_else (), CFN_BUILT_IN_LOG2, TREE_TYPE (_o1[0]), _o1[0]);
8748 : 12 : tem_op.resimplify (lseq, valueize);
8749 : 12 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
8750 : 12 : if (!_r1) goto next_after_fail1846;
8751 : 12 : res_op->ops[0] = _r1;
8752 : : }
8753 : 12 : res_op->ops[1] = captures[0];
8754 : 12 : res_op->resimplify (lseq, valueize);
8755 : 12 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1010, __FILE__, __LINE__, true);
8756 : 12 : return true;
8757 : : }
8758 : : next_after_fail1846:;
8759 : : }
8760 : : }
8761 : : }
8762 : : }
8763 : : }
8764 : : break;
8765 : 12 : case CFN_BUILT_IN_POW:
8766 : 12 : if (gimple_call_num_args (_c1) == 2)
8767 : : {
8768 : 12 : tree _q20 = gimple_call_arg (_c1, 0);
8769 : 12 : _q20 = do_valueize (valueize, _q20);
8770 : 12 : tree _q21 = gimple_call_arg (_c1, 1);
8771 : 12 : _q21 = do_valueize (valueize, _q21);
8772 : 12 : {
8773 : 12 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
8774 : 12 : if (gimple_simplify_643 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_LOG2, CFN_BUILT_IN_POW))
8775 : 6 : return true;
8776 : : }
8777 : : }
8778 : : break;
8779 : 12 : case CFN_BUILT_IN_CBRT:
8780 : 12 : if (gimple_call_num_args (_c1) == 1)
8781 : : {
8782 : 12 : tree _q20 = gimple_call_arg (_c1, 0);
8783 : 12 : _q20 = do_valueize (valueize, _q20);
8784 : 12 : {
8785 : 12 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
8786 : 12 : if (flag_unsafe_math_optimizations
8787 : : )
8788 : : {
8789 : 12 : if (SCALAR_FLOAT_TYPE_P (type)
8790 : : )
8791 : : {
8792 : 12 : {
8793 : 12 : tree x;
8794 : 12 : switch (CFN_BUILT_IN_CBRT)
8795 : : {
8796 : : CASE_CFN_SQRT:
8797 : : x = build_real (type, dconsthalf);
8798 : : break;
8799 : 12 : CASE_CFN_CBRT:
8800 : 12 : x = build_real_truncate (type, dconst_third ());
8801 : 12 : break;
8802 : : default:
8803 : : gcc_unreachable ();
8804 : : }
8805 : 12 : gimple_seq *lseq = seq;
8806 : 12 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1847;
8807 : 12 : {
8808 : 12 : res_op->set_op (MULT_EXPR, type, 2);
8809 : 12 : res_op->ops[0] = x;
8810 : 12 : {
8811 : 12 : tree _o1[1], _r1;
8812 : 12 : _o1[0] = captures[0];
8813 : 12 : gimple_match_op tem_op (res_op->cond.any_else (), CFN_BUILT_IN_LOG2, TREE_TYPE (_o1[0]), _o1[0]);
8814 : 12 : tem_op.resimplify (lseq, valueize);
8815 : 12 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
8816 : 12 : if (!_r1) goto next_after_fail1847;
8817 : 6 : res_op->ops[1] = _r1;
8818 : : }
8819 : 6 : res_op->resimplify (lseq, valueize);
8820 : 6 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1009, __FILE__, __LINE__, true);
8821 : 6 : return true;
8822 : : }
8823 : : next_after_fail1847:;
8824 : : }
8825 : : }
8826 : : }
8827 : : }
8828 : : }
8829 : : break;
8830 : 12 : case CFN_BUILT_IN_EXP2:
8831 : 12 : if (gimple_call_num_args (_c1) == 1)
8832 : : {
8833 : 12 : tree _q20 = gimple_call_arg (_c1, 0);
8834 : 12 : _q20 = do_valueize (valueize, _q20);
8835 : 12 : {
8836 : 12 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
8837 : 12 : if (flag_unsafe_math_optimizations
8838 : : )
8839 : : {
8840 : 12 : gimple_seq *lseq = seq;
8841 : 12 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1848;
8842 : 12 : {
8843 : 12 : tree tem;
8844 : 12 : tem = captures[0];
8845 : 12 : res_op->set_value (tem);
8846 : 12 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1011, __FILE__, __LINE__, true);
8847 : 12 : return true;
8848 : : }
8849 : 0 : next_after_fail1848:;
8850 : : }
8851 : : }
8852 : : }
8853 : : break;
8854 : 12 : case CFN_BUILT_IN_SQRT:
8855 : 12 : if (gimple_call_num_args (_c1) == 1)
8856 : : {
8857 : 12 : tree _q20 = gimple_call_arg (_c1, 0);
8858 : 12 : _q20 = do_valueize (valueize, _q20);
8859 : 12 : {
8860 : 12 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
8861 : 12 : if (flag_unsafe_math_optimizations
8862 : : )
8863 : : {
8864 : 12 : if (SCALAR_FLOAT_TYPE_P (type)
8865 : : )
8866 : : {
8867 : 12 : {
8868 : 12 : tree x;
8869 : 12 : switch (CFN_BUILT_IN_SQRT)
8870 : : {
8871 : 12 : CASE_CFN_SQRT:
8872 : 12 : x = build_real (type, dconsthalf);
8873 : 12 : break;
8874 : : CASE_CFN_CBRT:
8875 : : x = build_real_truncate (type, dconst_third ());
8876 : : break;
8877 : : default:
8878 : : gcc_unreachable ();
8879 : : }
8880 : 12 : gimple_seq *lseq = seq;
8881 : 12 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1849;
8882 : 12 : {
8883 : 12 : res_op->set_op (MULT_EXPR, type, 2);
8884 : 12 : res_op->ops[0] = x;
8885 : 12 : {
8886 : 12 : tree _o1[1], _r1;
8887 : 12 : _o1[0] = captures[0];
8888 : 12 : gimple_match_op tem_op (res_op->cond.any_else (), CFN_BUILT_IN_LOG2, TREE_TYPE (_o1[0]), _o1[0]);
8889 : 12 : tem_op.resimplify (lseq, valueize);
8890 : 12 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
8891 : 12 : if (!_r1) goto next_after_fail1849;
8892 : 6 : res_op->ops[1] = _r1;
8893 : : }
8894 : 6 : res_op->resimplify (lseq, valueize);
8895 : 6 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1009, __FILE__, __LINE__, true);
8896 : 6 : return true;
8897 : : }
8898 : : next_after_fail1849:;
8899 : : }
8900 : : }
8901 : : }
8902 : : }
8903 : : }
8904 : : break;
8905 : 12 : case CFN_BUILT_IN_EXP10:
8906 : 12 : if (gimple_call_num_args (_c1) == 1)
8907 : : {
8908 : 12 : tree _q20 = gimple_call_arg (_c1, 0);
8909 : 12 : _q20 = do_valueize (valueize, _q20);
8910 : 12 : {
8911 : 12 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
8912 : 12 : if (flag_unsafe_math_optimizations
8913 : : )
8914 : : {
8915 : 12 : if (SCALAR_FLOAT_TYPE_P (type)
8916 : : )
8917 : : {
8918 : 12 : {
8919 : 12 : tree x;
8920 : 12 : switch (CFN_BUILT_IN_EXP10)
8921 : : {
8922 : : CASE_CFN_EXP:
8923 : : x = build_real_truncate (type, dconst_e ());
8924 : : break;
8925 : : CASE_CFN_EXP2:
8926 : : x = build_real (type, dconst2);
8927 : : break;
8928 : 12 : CASE_CFN_EXP10:
8929 : 12 : CASE_CFN_POW10:
8930 : 12 : {
8931 : 12 : REAL_VALUE_TYPE dconst10;
8932 : 12 : real_from_integer (&dconst10, VOIDmode, 10, SIGNED);
8933 : 12 : x = build_real (type, dconst10);
8934 : : }
8935 : 12 : break;
8936 : : default:
8937 : : gcc_unreachable ();
8938 : : }
8939 : 12 : gimple_seq *lseq = seq;
8940 : 12 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1850;
8941 : 12 : {
8942 : 12 : res_op->set_op (MULT_EXPR, type, 2);
8943 : 12 : {
8944 : 12 : tree _o1[1], _r1;
8945 : 12 : _o1[0] = x;
8946 : 12 : gimple_match_op tem_op (res_op->cond.any_else (), CFN_BUILT_IN_LOG2, TREE_TYPE (_o1[0]), _o1[0]);
8947 : 12 : tem_op.resimplify (lseq, valueize);
8948 : 12 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
8949 : 12 : if (!_r1) goto next_after_fail1850;
8950 : 12 : res_op->ops[0] = _r1;
8951 : : }
8952 : 12 : res_op->ops[1] = captures[0];
8953 : 12 : res_op->resimplify (lseq, valueize);
8954 : 12 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1010, __FILE__, __LINE__, true);
8955 : 12 : return true;
8956 : : }
8957 : : next_after_fail1850:;
8958 : : }
8959 : : }
8960 : : }
8961 : : }
8962 : : }
8963 : : break;
8964 : 12 : case CFN_BUILT_IN_POW10:
8965 : 12 : if (gimple_call_num_args (_c1) == 1)
8966 : : {
8967 : 12 : tree _q20 = gimple_call_arg (_c1, 0);
8968 : 12 : _q20 = do_valueize (valueize, _q20);
8969 : 12 : {
8970 : 12 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
8971 : 12 : if (flag_unsafe_math_optimizations
8972 : : )
8973 : : {
8974 : 12 : if (SCALAR_FLOAT_TYPE_P (type)
8975 : : )
8976 : : {
8977 : 12 : {
8978 : 12 : tree x;
8979 : 12 : switch (CFN_BUILT_IN_POW10)
8980 : : {
8981 : : CASE_CFN_EXP:
8982 : : x = build_real_truncate (type, dconst_e ());
8983 : : break;
8984 : : CASE_CFN_EXP2:
8985 : : x = build_real (type, dconst2);
8986 : : break;
8987 : 12 : CASE_CFN_EXP10:
8988 : 12 : CASE_CFN_POW10:
8989 : 12 : {
8990 : 12 : REAL_VALUE_TYPE dconst10;
8991 : 12 : real_from_integer (&dconst10, VOIDmode, 10, SIGNED);
8992 : 12 : x = build_real (type, dconst10);
8993 : : }
8994 : 12 : break;
8995 : : default:
8996 : : gcc_unreachable ();
8997 : : }
8998 : 12 : gimple_seq *lseq = seq;
8999 : 12 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1851;
9000 : 12 : {
9001 : 12 : res_op->set_op (MULT_EXPR, type, 2);
9002 : 12 : {
9003 : 12 : tree _o1[1], _r1;
9004 : 12 : _o1[0] = x;
9005 : 12 : gimple_match_op tem_op (res_op->cond.any_else (), CFN_BUILT_IN_LOG2, TREE_TYPE (_o1[0]), _o1[0]);
9006 : 12 : tem_op.resimplify (lseq, valueize);
9007 : 12 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
9008 : 12 : if (!_r1) goto next_after_fail1851;
9009 : 12 : res_op->ops[0] = _r1;
9010 : : }
9011 : 12 : res_op->ops[1] = captures[0];
9012 : 12 : res_op->resimplify (lseq, valueize);
9013 : 12 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1010, __FILE__, __LINE__, true);
9014 : 12 : return true;
9015 : : }
9016 : : next_after_fail1851:;
9017 : : }
9018 : : }
9019 : : }
9020 : : }
9021 : : }
9022 : : break;
9023 : : default:;
9024 : : }
9025 : : }
9026 : : break;
9027 : : default:;
9028 : : }
9029 : : return false;
9030 : : }
9031 : :
9032 : : bool
9033 : 9262 : gimple_simplify_CFN_BUILT_IN_EXP (gimple_match_op *res_op, gimple_seq *seq,
9034 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
9035 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
9036 : : {
9037 : 9262 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
9038 : 9262 : switch (TREE_CODE (_p0))
9039 : : {
9040 : 8913 : case SSA_NAME:
9041 : 8913 : if (gimple *_d1 = get_def (valueize, _p0))
9042 : : {
9043 : 4728 : if (gcall *_c1 = dyn_cast <gcall *> (_d1))
9044 : 264 : switch (gimple_call_combined_fn (_c1))
9045 : : {
9046 : 15 : case CFN_BUILT_IN_LOG:
9047 : 15 : if (gimple_call_num_args (_c1) == 1)
9048 : : {
9049 : 15 : tree _q20 = gimple_call_arg (_c1, 0);
9050 : 15 : _q20 = do_valueize (valueize, _q20);
9051 : 15 : {
9052 : 15 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
9053 : 15 : if (flag_unsafe_math_optimizations
9054 : : )
9055 : : {
9056 : 7 : gimple_seq *lseq = seq;
9057 : 7 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1885;
9058 : 7 : {
9059 : 7 : tree tem;
9060 : 7 : tem = captures[0];
9061 : 7 : res_op->set_value (tem);
9062 : 7 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1012, __FILE__, __LINE__, true);
9063 : 7 : return true;
9064 : : }
9065 : 0 : next_after_fail1885:;
9066 : : }
9067 : : }
9068 : : }
9069 : : break;
9070 : : default:;
9071 : : }
9072 : : }
9073 : : break;
9074 : : default:;
9075 : : }
9076 : : return false;
9077 : : }
9078 : :
9079 : : bool
9080 : 0 : gimple_simplify_CFN_EXP (gimple_match_op *res_op, gimple_seq *seq,
9081 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
9082 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
9083 : : {
9084 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
9085 : 0 : switch (TREE_CODE (_p0))
9086 : : {
9087 : 0 : case SSA_NAME:
9088 : 0 : if (gimple *_d1 = get_def (valueize, _p0))
9089 : : {
9090 : 0 : if (gcall *_c1 = dyn_cast <gcall *> (_d1))
9091 : 0 : switch (gimple_call_combined_fn (_c1))
9092 : : {
9093 : 0 : case CFN_LOG:
9094 : 0 : if (gimple_call_num_args (_c1) == 1)
9095 : : {
9096 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
9097 : 0 : _q20 = do_valueize (valueize, _q20);
9098 : 0 : {
9099 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
9100 : 0 : if (flag_unsafe_math_optimizations
9101 : : )
9102 : : {
9103 : 0 : gimple_seq *lseq = seq;
9104 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1887;
9105 : 0 : {
9106 : 0 : tree tem;
9107 : 0 : tem = captures[0];
9108 : 0 : res_op->set_value (tem);
9109 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1012, __FILE__, __LINE__, true);
9110 : 0 : return true;
9111 : : }
9112 : 0 : next_after_fail1887:;
9113 : : }
9114 : : }
9115 : : }
9116 : : break;
9117 : : default:;
9118 : : }
9119 : : }
9120 : : break;
9121 : : default:;
9122 : : }
9123 : : return false;
9124 : : }
9125 : :
9126 : : bool
9127 : 1334 : gimple_simplify_CFN_BUILT_IN_EXP2L (gimple_match_op *res_op, gimple_seq *seq,
9128 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
9129 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
9130 : : {
9131 : 1334 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
9132 : 1334 : switch (TREE_CODE (_p0))
9133 : : {
9134 : 351 : case SSA_NAME:
9135 : 351 : if (gimple *_d1 = get_def (valueize, _p0))
9136 : : {
9137 : 245 : if (gcall *_c1 = dyn_cast <gcall *> (_d1))
9138 : 6 : switch (gimple_call_combined_fn (_c1))
9139 : : {
9140 : 6 : case CFN_BUILT_IN_LOG2L:
9141 : 6 : if (gimple_call_num_args (_c1) == 1)
9142 : : {
9143 : 6 : tree _q20 = gimple_call_arg (_c1, 0);
9144 : 6 : _q20 = do_valueize (valueize, _q20);
9145 : 6 : {
9146 : 6 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
9147 : 6 : if (flag_unsafe_math_optimizations
9148 : : )
9149 : : {
9150 : 6 : gimple_seq *lseq = seq;
9151 : 6 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1890;
9152 : 6 : {
9153 : 6 : tree tem;
9154 : 6 : tem = captures[0];
9155 : 6 : res_op->set_value (tem);
9156 : 6 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1012, __FILE__, __LINE__, true);
9157 : 6 : return true;
9158 : : }
9159 : 0 : next_after_fail1890:;
9160 : : }
9161 : : }
9162 : : }
9163 : : break;
9164 : : default:;
9165 : : }
9166 : : }
9167 : : break;
9168 : : default:;
9169 : : }
9170 : : return false;
9171 : : }
9172 : :
9173 : : bool
9174 : 329 : gimple_simplify_CFN_BUILT_IN_EXP10L (gimple_match_op *res_op, gimple_seq *seq,
9175 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
9176 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
9177 : : {
9178 : 329 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
9179 : 329 : switch (TREE_CODE (_p0))
9180 : : {
9181 : 275 : case SSA_NAME:
9182 : 275 : if (gimple *_d1 = get_def (valueize, _p0))
9183 : : {
9184 : 197 : if (gcall *_c1 = dyn_cast <gcall *> (_d1))
9185 : 6 : switch (gimple_call_combined_fn (_c1))
9186 : : {
9187 : 6 : case CFN_BUILT_IN_LOG10L:
9188 : 6 : if (gimple_call_num_args (_c1) == 1)
9189 : : {
9190 : 6 : tree _q20 = gimple_call_arg (_c1, 0);
9191 : 6 : _q20 = do_valueize (valueize, _q20);
9192 : 6 : {
9193 : 6 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
9194 : 6 : if (flag_unsafe_math_optimizations
9195 : : )
9196 : : {
9197 : 6 : gimple_seq *lseq = seq;
9198 : 6 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1894;
9199 : 6 : {
9200 : 6 : tree tem;
9201 : 6 : tem = captures[0];
9202 : 6 : res_op->set_value (tem);
9203 : 6 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1012, __FILE__, __LINE__, true);
9204 : 6 : return true;
9205 : : }
9206 : 0 : next_after_fail1894:;
9207 : : }
9208 : : }
9209 : : }
9210 : : break;
9211 : : default:;
9212 : : }
9213 : : }
9214 : : break;
9215 : : default:;
9216 : : }
9217 : : return false;
9218 : : }
9219 : :
9220 : : bool
9221 : 16828 : gimple_simplify_CFN_BUILT_IN_SQRTF (gimple_match_op *res_op, gimple_seq *seq,
9222 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
9223 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
9224 : : {
9225 : 16828 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
9226 : 16828 : switch (TREE_CODE (_p0))
9227 : : {
9228 : 16179 : case SSA_NAME:
9229 : 16179 : if (gimple *_d1 = get_def (valueize, _p0))
9230 : : {
9231 : 7452 : if (gcall *_c1 = dyn_cast <gcall *> (_d1))
9232 : 115 : switch (gimple_call_combined_fn (_c1))
9233 : : {
9234 : 15 : case CFN_BUILT_IN_SQRTF:
9235 : 15 : if (gimple_call_num_args (_c1) == 1)
9236 : : {
9237 : 15 : tree _q20 = gimple_call_arg (_c1, 0);
9238 : 15 : _q20 = do_valueize (valueize, _q20);
9239 : 15 : {
9240 : 15 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
9241 : 15 : if (flag_unsafe_math_optimizations && canonicalize_math_p ()
9242 : : )
9243 : : {
9244 : 12 : gimple_seq *lseq = seq;
9245 : 12 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1899;
9246 : 12 : {
9247 : 12 : res_op->set_op (CFN_BUILT_IN_POWF, type, 2);
9248 : 12 : res_op->ops[0] = captures[0];
9249 : 12 : res_op->ops[1] = build_real (type, dconst_quarter ());
9250 : 12 : res_op->resimplify (lseq, valueize);
9251 : 12 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1013, __FILE__, __LINE__, true);
9252 : 12 : return true;
9253 : : }
9254 : 0 : next_after_fail1899:;
9255 : : }
9256 : : }
9257 : : }
9258 : : break;
9259 : 12 : case CFN_BUILT_IN_EXP10F:
9260 : 12 : if (gimple_call_num_args (_c1) == 1)
9261 : : {
9262 : 12 : tree _q20 = gimple_call_arg (_c1, 0);
9263 : 12 : _q20 = do_valueize (valueize, _q20);
9264 : 12 : {
9265 : 12 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
9266 : 12 : if (flag_unsafe_math_optimizations
9267 : : )
9268 : : {
9269 : 12 : gimple_seq *lseq = seq;
9270 : 12 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1900;
9271 : 12 : {
9272 : 12 : res_op->set_op (CFN_BUILT_IN_EXP10F, type, 1);
9273 : 12 : {
9274 : 12 : tree _o1[2], _r1;
9275 : 12 : _o1[0] = captures[0];
9276 : 12 : _o1[1] = build_real (type, dconsthalf);
9277 : 12 : gimple_match_op tem_op (res_op->cond.any_else (), MULT_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
9278 : 12 : tem_op.resimplify (lseq, valueize);
9279 : 12 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
9280 : 12 : if (!_r1) goto next_after_fail1900;
9281 : 6 : res_op->ops[0] = _r1;
9282 : : }
9283 : 6 : res_op->resimplify (lseq, valueize);
9284 : 6 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1014, __FILE__, __LINE__, true);
9285 : 6 : return true;
9286 : : }
9287 : : next_after_fail1900:;
9288 : : }
9289 : : }
9290 : : }
9291 : : break;
9292 : 14 : case CFN_BUILT_IN_EXPF:
9293 : 14 : if (gimple_call_num_args (_c1) == 1)
9294 : : {
9295 : 14 : tree _q20 = gimple_call_arg (_c1, 0);
9296 : 14 : _q20 = do_valueize (valueize, _q20);
9297 : 14 : {
9298 : 14 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
9299 : 14 : if (flag_unsafe_math_optimizations
9300 : : )
9301 : : {
9302 : 14 : gimple_seq *lseq = seq;
9303 : 14 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1901;
9304 : 14 : {
9305 : 14 : res_op->set_op (CFN_BUILT_IN_EXPF, type, 1);
9306 : 14 : {
9307 : 14 : tree _o1[2], _r1;
9308 : 14 : _o1[0] = captures[0];
9309 : 14 : _o1[1] = build_real (type, dconsthalf);
9310 : 14 : gimple_match_op tem_op (res_op->cond.any_else (), MULT_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
9311 : 14 : tem_op.resimplify (lseq, valueize);
9312 : 14 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
9313 : 14 : if (!_r1) goto next_after_fail1901;
9314 : 7 : res_op->ops[0] = _r1;
9315 : : }
9316 : 7 : res_op->resimplify (lseq, valueize);
9317 : 7 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1014, __FILE__, __LINE__, true);
9318 : 7 : return true;
9319 : : }
9320 : : next_after_fail1901:;
9321 : : }
9322 : : }
9323 : : }
9324 : : break;
9325 : 14 : case CFN_BUILT_IN_POWF:
9326 : 14 : if (gimple_call_num_args (_c1) == 2)
9327 : : {
9328 : 14 : tree _q20 = gimple_call_arg (_c1, 0);
9329 : 14 : _q20 = do_valueize (valueize, _q20);
9330 : 14 : tree _q21 = gimple_call_arg (_c1, 1);
9331 : 14 : _q21 = do_valueize (valueize, _q21);
9332 : 14 : {
9333 : 14 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
9334 : 14 : if (flag_unsafe_math_optimizations && canonicalize_math_p ()
9335 : : )
9336 : : {
9337 : 14 : gimple_seq *lseq = seq;
9338 : 14 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1902;
9339 : 14 : {
9340 : 14 : res_op->set_op (CFN_BUILT_IN_POWF, type, 2);
9341 : 14 : {
9342 : 14 : tree _o1[1], _r1;
9343 : 14 : _o1[0] = captures[0];
9344 : 14 : gimple_match_op tem_op (res_op->cond.any_else (), ABS_EXPR, TREE_TYPE (_o1[0]), _o1[0]);
9345 : 14 : tem_op.resimplify (lseq, valueize);
9346 : 14 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
9347 : 14 : if (!_r1) goto next_after_fail1902;
9348 : 13 : res_op->ops[0] = _r1;
9349 : : }
9350 : 13 : {
9351 : 13 : tree _o1[2], _r1;
9352 : 13 : _o1[0] = captures[1];
9353 : 13 : _o1[1] = build_real (type, dconsthalf);
9354 : 13 : gimple_match_op tem_op (res_op->cond.any_else (), MULT_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
9355 : 13 : tem_op.resimplify (lseq, valueize);
9356 : 13 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
9357 : 13 : if (!_r1) goto next_after_fail1902;
9358 : 7 : res_op->ops[1] = _r1;
9359 : : }
9360 : 7 : res_op->resimplify (lseq, valueize);
9361 : 7 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1015, __FILE__, __LINE__, true);
9362 : 7 : return true;
9363 : : }
9364 : 7 : next_after_fail1902:;
9365 : : }
9366 : : }
9367 : : }
9368 : : break;
9369 : 12 : case CFN_BUILT_IN_POW10F:
9370 : 12 : if (gimple_call_num_args (_c1) == 1)
9371 : : {
9372 : 12 : tree _q20 = gimple_call_arg (_c1, 0);
9373 : 12 : _q20 = do_valueize (valueize, _q20);
9374 : 12 : {
9375 : 12 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
9376 : 12 : if (flag_unsafe_math_optimizations
9377 : : )
9378 : : {
9379 : 12 : gimple_seq *lseq = seq;
9380 : 12 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1903;
9381 : 12 : {
9382 : 12 : res_op->set_op (CFN_BUILT_IN_POW10F, type, 1);
9383 : 12 : {
9384 : 12 : tree _o1[2], _r1;
9385 : 12 : _o1[0] = captures[0];
9386 : 12 : _o1[1] = build_real (type, dconsthalf);
9387 : 12 : gimple_match_op tem_op (res_op->cond.any_else (), MULT_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
9388 : 12 : tem_op.resimplify (lseq, valueize);
9389 : 12 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
9390 : 12 : if (!_r1) goto next_after_fail1903;
9391 : 6 : res_op->ops[0] = _r1;
9392 : : }
9393 : 6 : res_op->resimplify (lseq, valueize);
9394 : 6 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1014, __FILE__, __LINE__, true);
9395 : 6 : return true;
9396 : : }
9397 : : next_after_fail1903:;
9398 : : }
9399 : : }
9400 : : }
9401 : : break;
9402 : 12 : case CFN_BUILT_IN_CBRTF:
9403 : 12 : if (gimple_call_num_args (_c1) == 1)
9404 : : {
9405 : 12 : tree _q20 = gimple_call_arg (_c1, 0);
9406 : 12 : _q20 = do_valueize (valueize, _q20);
9407 : 12 : {
9408 : 12 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
9409 : 12 : if (flag_unsafe_math_optimizations && canonicalize_math_p ()
9410 : : )
9411 : : {
9412 : 12 : gimple_seq *lseq = seq;
9413 : 12 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1904;
9414 : 12 : {
9415 : 12 : res_op->set_op (CFN_BUILT_IN_POWF, type, 2);
9416 : 12 : res_op->ops[0] = captures[0];
9417 : 12 : res_op->ops[1] = build_real_truncate (type, dconst_sixth ());
9418 : 12 : res_op->resimplify (lseq, valueize);
9419 : 12 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1016, __FILE__, __LINE__, true);
9420 : 12 : return true;
9421 : : }
9422 : 0 : next_after_fail1904:;
9423 : : }
9424 : : }
9425 : : }
9426 : : break;
9427 : 12 : case CFN_BUILT_IN_EXP2F:
9428 : 12 : if (gimple_call_num_args (_c1) == 1)
9429 : : {
9430 : 12 : tree _q20 = gimple_call_arg (_c1, 0);
9431 : 12 : _q20 = do_valueize (valueize, _q20);
9432 : 12 : {
9433 : 12 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
9434 : 12 : if (flag_unsafe_math_optimizations
9435 : : )
9436 : : {
9437 : 12 : gimple_seq *lseq = seq;
9438 : 12 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1905;
9439 : 12 : {
9440 : 12 : res_op->set_op (CFN_BUILT_IN_EXP2F, type, 1);
9441 : 12 : {
9442 : 12 : tree _o1[2], _r1;
9443 : 12 : _o1[0] = captures[0];
9444 : 12 : _o1[1] = build_real (type, dconsthalf);
9445 : 12 : gimple_match_op tem_op (res_op->cond.any_else (), MULT_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
9446 : 12 : tem_op.resimplify (lseq, valueize);
9447 : 12 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
9448 : 12 : if (!_r1) goto next_after_fail1905;
9449 : 6 : res_op->ops[0] = _r1;
9450 : : }
9451 : 6 : res_op->resimplify (lseq, valueize);
9452 : 6 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1014, __FILE__, __LINE__, true);
9453 : 6 : return true;
9454 : : }
9455 : : next_after_fail1905:;
9456 : : }
9457 : : }
9458 : : }
9459 : : break;
9460 : : default:;
9461 : : }
9462 : : }
9463 : : break;
9464 : : default:;
9465 : : }
9466 : : return false;
9467 : : }
9468 : :
9469 : : bool
9470 : 1619 : gimple_simplify_CFN_BUILT_IN_SINHF (gimple_match_op *res_op, gimple_seq *seq,
9471 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
9472 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
9473 : : {
9474 : 1619 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
9475 : 1619 : switch (TREE_CODE (_p0))
9476 : : {
9477 : 1546 : case SSA_NAME:
9478 : 1546 : if (gimple *_d1 = get_def (valueize, _p0))
9479 : : {
9480 : 839 : if (gcall *_c1 = dyn_cast <gcall *> (_d1))
9481 : 21 : switch (gimple_call_combined_fn (_c1))
9482 : : {
9483 : 21 : case CFN_BUILT_IN_ATANHF:
9484 : 21 : if (gimple_call_num_args (_c1) == 1)
9485 : : {
9486 : 21 : tree _q20 = gimple_call_arg (_c1, 0);
9487 : 21 : _q20 = do_valueize (valueize, _q20);
9488 : 21 : {
9489 : 21 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q20 };
9490 : 21 : if (gimple_simplify_646 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_SINHF, CFN_BUILT_IN_ATANHF, CFN_BUILT_IN_SQRTF))
9491 : 1 : return true;
9492 : : }
9493 : : }
9494 : : break;
9495 : : default:;
9496 : : }
9497 : : }
9498 : : break;
9499 : : default:;
9500 : : }
9501 : : return false;
9502 : : }
9503 : :
9504 : : bool
9505 : 997 : gimple_simplify_CFN_BUILT_IN_TRUNCL (gimple_match_op *res_op, gimple_seq *seq,
9506 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
9507 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
9508 : : {
9509 : 997 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
9510 : 997 : switch (TREE_CODE (_p0))
9511 : : {
9512 : 963 : case SSA_NAME:
9513 : 963 : if (gimple *_d1 = get_def (valueize, _p0))
9514 : : {
9515 : 592 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
9516 : 672 : switch (gimple_assign_rhs_code (_a1))
9517 : : {
9518 : 110 : CASE_CONVERT:
9519 : 110 : {
9520 : 110 : tree _q20 = gimple_assign_rhs1 (_a1);
9521 : 110 : _q20 = do_valueize (valueize, _q20);
9522 : 110 : if (gimple_double_value_p (_q20, valueize))
9523 : : {
9524 : 36 : {
9525 : 36 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
9526 : 36 : if (gimple_simplify_650 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_TRUNCL, CFN_BUILT_IN_TRUNC))
9527 : 18 : return true;
9528 : : }
9529 : : }
9530 : 92 : if (gimple_float_value_p (_q20, valueize))
9531 : : {
9532 : 72 : {
9533 : 72 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
9534 : 72 : if (gimple_simplify_649 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_TRUNCL, CFN_BUILT_IN_TRUNCF))
9535 : 36 : return true;
9536 : : }
9537 : : }
9538 : : break;
9539 : : }
9540 : : default:;
9541 : : }
9542 : 161 : else if (gcall *_c1 = dyn_cast <gcall *> (_d1))
9543 : 0 : switch (gimple_call_combined_fn (_c1))
9544 : : {
9545 : 0 : case CFN_BUILT_IN_TRUNCL:
9546 : 0 : if (gimple_call_num_args (_c1) == 1)
9547 : : {
9548 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
9549 : 0 : _q20 = do_valueize (valueize, _q20);
9550 : 0 : {
9551 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
9552 : 0 : if (gimple_simplify_647 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_TRUNCL))
9553 : 0 : return true;
9554 : : }
9555 : : }
9556 : : break;
9557 : : default:;
9558 : : }
9559 : : }
9560 : : break;
9561 : 943 : default:;
9562 : : }
9563 : 943 : if (integer_valued_real_p (_p0))
9564 : : {
9565 : 10 : {
9566 : 10 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
9567 : 10 : if (gimple_simplify_648 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_TRUNCL))
9568 : 10 : return true;
9569 : : }
9570 : : }
9571 : : return false;
9572 : : }
9573 : :
9574 : : bool
9575 : 0 : gimple_simplify_CFN_BUILT_IN_FLOORF32 (gimple_match_op *res_op, gimple_seq *seq,
9576 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
9577 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
9578 : : {
9579 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
9580 : 0 : switch (TREE_CODE (_p0))
9581 : : {
9582 : 0 : case SSA_NAME:
9583 : 0 : if (gimple *_d1 = get_def (valueize, _p0))
9584 : : {
9585 : 0 : if (gcall *_c1 = dyn_cast <gcall *> (_d1))
9586 : 0 : switch (gimple_call_combined_fn (_c1))
9587 : : {
9588 : 0 : case CFN_BUILT_IN_FLOORF32:
9589 : 0 : if (gimple_call_num_args (_c1) == 1)
9590 : : {
9591 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
9592 : 0 : _q20 = do_valueize (valueize, _q20);
9593 : 0 : {
9594 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
9595 : 0 : if (gimple_simplify_647 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FLOORF32))
9596 : 0 : return true;
9597 : : }
9598 : : }
9599 : : break;
9600 : : default:;
9601 : : }
9602 : : }
9603 : : break;
9604 : 0 : default:;
9605 : : }
9606 : 0 : if (integer_valued_real_p (_p0))
9607 : : {
9608 : 0 : {
9609 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
9610 : 0 : if (gimple_simplify_648 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FLOORF32))
9611 : 0 : return true;
9612 : : }
9613 : : }
9614 : 0 : if (tree_expr_nonnegative_p (_p0))
9615 : : {
9616 : 0 : {
9617 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
9618 : 0 : if (gimple_simplify_651 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FLOORF32, CFN_BUILT_IN_TRUNCF32))
9619 : 0 : return true;
9620 : : }
9621 : : }
9622 : : return false;
9623 : : }
9624 : :
9625 : : bool
9626 : 217 : gimple_simplify_CFN_FLOOR (gimple_match_op *res_op, gimple_seq *seq,
9627 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
9628 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
9629 : : {
9630 : 217 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
9631 : 217 : switch (TREE_CODE (_p0))
9632 : : {
9633 : 217 : case SSA_NAME:
9634 : 217 : if (gimple *_d1 = get_def (valueize, _p0))
9635 : : {
9636 : 126 : if (gcall *_c1 = dyn_cast <gcall *> (_d1))
9637 : 0 : switch (gimple_call_combined_fn (_c1))
9638 : : {
9639 : 0 : case CFN_FLOOR:
9640 : 0 : if (gimple_call_num_args (_c1) == 1)
9641 : : {
9642 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
9643 : 0 : _q20 = do_valueize (valueize, _q20);
9644 : 0 : {
9645 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
9646 : 0 : if (gimple_simplify_647 (res_op, seq, valueize, type, captures, CFN_FLOOR))
9647 : 0 : return true;
9648 : : }
9649 : : }
9650 : : break;
9651 : : default:;
9652 : : }
9653 : : }
9654 : : break;
9655 : 217 : default:;
9656 : : }
9657 : 217 : if (integer_valued_real_p (_p0))
9658 : : {
9659 : 0 : {
9660 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
9661 : 0 : if (gimple_simplify_648 (res_op, seq, valueize, type, captures, CFN_FLOOR))
9662 : 0 : return true;
9663 : : }
9664 : : }
9665 : 217 : if (tree_expr_nonnegative_p (_p0))
9666 : : {
9667 : 0 : {
9668 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
9669 : 0 : if (gimple_simplify_651 (res_op, seq, valueize, type, captures, CFN_FLOOR, CFN_TRUNC))
9670 : 0 : return true;
9671 : : }
9672 : : }
9673 : : return false;
9674 : : }
9675 : :
9676 : : bool
9677 : 0 : gimple_simplify_CFN_BUILT_IN_CEILF64X (gimple_match_op *res_op, gimple_seq *seq,
9678 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
9679 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
9680 : : {
9681 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
9682 : 0 : switch (TREE_CODE (_p0))
9683 : : {
9684 : 0 : case SSA_NAME:
9685 : 0 : if (gimple *_d1 = get_def (valueize, _p0))
9686 : : {
9687 : 0 : if (gcall *_c1 = dyn_cast <gcall *> (_d1))
9688 : 0 : switch (gimple_call_combined_fn (_c1))
9689 : : {
9690 : 0 : case CFN_BUILT_IN_CEILF64X:
9691 : 0 : if (gimple_call_num_args (_c1) == 1)
9692 : : {
9693 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
9694 : 0 : _q20 = do_valueize (valueize, _q20);
9695 : 0 : {
9696 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
9697 : 0 : if (gimple_simplify_647 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_CEILF64X))
9698 : 0 : return true;
9699 : : }
9700 : : }
9701 : : break;
9702 : : default:;
9703 : : }
9704 : : }
9705 : : break;
9706 : 0 : default:;
9707 : : }
9708 : 0 : if (integer_valued_real_p (_p0))
9709 : : {
9710 : 0 : {
9711 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
9712 : 0 : if (gimple_simplify_648 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_CEILF64X))
9713 : 0 : return true;
9714 : : }
9715 : : }
9716 : : return false;
9717 : : }
9718 : :
9719 : : bool
9720 : 0 : gimple_simplify_CFN_BUILT_IN_ROUNDF64 (gimple_match_op *res_op, gimple_seq *seq,
9721 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
9722 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
9723 : : {
9724 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
9725 : 0 : switch (TREE_CODE (_p0))
9726 : : {
9727 : 0 : case SSA_NAME:
9728 : 0 : if (gimple *_d1 = get_def (valueize, _p0))
9729 : : {
9730 : 0 : if (gcall *_c1 = dyn_cast <gcall *> (_d1))
9731 : 0 : switch (gimple_call_combined_fn (_c1))
9732 : : {
9733 : 0 : case CFN_BUILT_IN_ROUNDF64:
9734 : 0 : if (gimple_call_num_args (_c1) == 1)
9735 : : {
9736 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
9737 : 0 : _q20 = do_valueize (valueize, _q20);
9738 : 0 : {
9739 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
9740 : 0 : if (gimple_simplify_647 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_ROUNDF64))
9741 : 0 : return true;
9742 : : }
9743 : : }
9744 : : break;
9745 : : default:;
9746 : : }
9747 : : }
9748 : : break;
9749 : 0 : default:;
9750 : : }
9751 : 0 : if (integer_valued_real_p (_p0))
9752 : : {
9753 : 0 : {
9754 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
9755 : 0 : if (gimple_simplify_648 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_ROUNDF64))
9756 : 0 : return true;
9757 : : }
9758 : : }
9759 : : return false;
9760 : : }
9761 : :
9762 : : bool
9763 : 1071 : gimple_simplify_CFN_BUILT_IN_NEARBYINT (gimple_match_op *res_op, gimple_seq *seq,
9764 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
9765 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
9766 : : {
9767 : 1071 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
9768 : 1071 : switch (TREE_CODE (_p0))
9769 : : {
9770 : 933 : case SSA_NAME:
9771 : 933 : if (gimple *_d1 = get_def (valueize, _p0))
9772 : : {
9773 : 558 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
9774 : 214 : switch (gimple_assign_rhs_code (_a1))
9775 : : {
9776 : 104 : CASE_CONVERT:
9777 : 104 : {
9778 : 104 : tree _q20 = gimple_assign_rhs1 (_a1);
9779 : 104 : _q20 = do_valueize (valueize, _q20);
9780 : 104 : if (gimple_float_value_p (_q20, valueize))
9781 : : {
9782 : 60 : {
9783 : 60 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
9784 : 60 : if (gimple_simplify_649 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_NEARBYINT, CFN_BUILT_IN_NEARBYINTF))
9785 : 30 : return true;
9786 : : }
9787 : : }
9788 : : break;
9789 : : }
9790 : : default:;
9791 : : }
9792 : 390 : else if (gcall *_c1 = dyn_cast <gcall *> (_d1))
9793 : 0 : switch (gimple_call_combined_fn (_c1))
9794 : : {
9795 : 0 : case CFN_BUILT_IN_NEARBYINT:
9796 : 0 : if (gimple_call_num_args (_c1) == 1)
9797 : : {
9798 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
9799 : 0 : _q20 = do_valueize (valueize, _q20);
9800 : 0 : {
9801 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
9802 : 0 : if (gimple_simplify_647 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_NEARBYINT))
9803 : 0 : return true;
9804 : : }
9805 : : }
9806 : : break;
9807 : : default:;
9808 : : }
9809 : : }
9810 : : break;
9811 : 1041 : default:;
9812 : : }
9813 : 1041 : if (integer_valued_real_p (_p0))
9814 : : {
9815 : 63 : {
9816 : 63 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
9817 : 63 : if (gimple_simplify_648 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_NEARBYINT))
9818 : 63 : return true;
9819 : : }
9820 : : }
9821 : : return false;
9822 : : }
9823 : :
9824 : : bool
9825 : 1809 : gimple_simplify_CFN_BUILT_IN_RINTF (gimple_match_op *res_op, gimple_seq *seq,
9826 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
9827 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
9828 : : {
9829 : 1809 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
9830 : 1809 : switch (TREE_CODE (_p0))
9831 : : {
9832 : 1276 : case SSA_NAME:
9833 : 1276 : if (gimple *_d1 = get_def (valueize, _p0))
9834 : : {
9835 : 813 : if (gcall *_c1 = dyn_cast <gcall *> (_d1))
9836 : 0 : switch (gimple_call_combined_fn (_c1))
9837 : : {
9838 : 0 : case CFN_BUILT_IN_RINTF:
9839 : 0 : if (gimple_call_num_args (_c1) == 1)
9840 : : {
9841 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
9842 : 0 : _q20 = do_valueize (valueize, _q20);
9843 : 0 : {
9844 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
9845 : 0 : if (gimple_simplify_647 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_RINTF))
9846 : 0 : return true;
9847 : : }
9848 : : }
9849 : : break;
9850 : : default:;
9851 : : }
9852 : : }
9853 : : break;
9854 : 1809 : default:;
9855 : : }
9856 : 1809 : if (integer_valued_real_p (_p0))
9857 : : {
9858 : 28 : {
9859 : 28 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
9860 : 28 : if (gimple_simplify_648 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_RINTF))
9861 : 28 : return true;
9862 : : }
9863 : : }
9864 : : return false;
9865 : : }
9866 : :
9867 : : bool
9868 : 0 : gimple_simplify_CFN_BUILT_IN_RINTF64X (gimple_match_op *res_op, gimple_seq *seq,
9869 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
9870 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
9871 : : {
9872 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
9873 : 0 : switch (TREE_CODE (_p0))
9874 : : {
9875 : 0 : case SSA_NAME:
9876 : 0 : if (gimple *_d1 = get_def (valueize, _p0))
9877 : : {
9878 : 0 : if (gcall *_c1 = dyn_cast <gcall *> (_d1))
9879 : 0 : switch (gimple_call_combined_fn (_c1))
9880 : : {
9881 : 0 : case CFN_BUILT_IN_RINTF64X:
9882 : 0 : if (gimple_call_num_args (_c1) == 1)
9883 : : {
9884 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
9885 : 0 : _q20 = do_valueize (valueize, _q20);
9886 : 0 : {
9887 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
9888 : 0 : if (gimple_simplify_647 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_RINTF64X))
9889 : 0 : return true;
9890 : : }
9891 : : }
9892 : : break;
9893 : : default:;
9894 : : }
9895 : : }
9896 : : break;
9897 : 0 : default:;
9898 : : }
9899 : 0 : if (integer_valued_real_p (_p0))
9900 : : {
9901 : 0 : {
9902 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
9903 : 0 : if (gimple_simplify_648 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_RINTF64X))
9904 : 0 : return true;
9905 : : }
9906 : : }
9907 : : return false;
9908 : : }
9909 : :
9910 : : bool
9911 : 1094 : gimple_simplify_CFN_BUILT_IN_LFLOORL (gimple_match_op *res_op, gimple_seq *seq,
9912 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
9913 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
9914 : : {
9915 : 1094 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
9916 : 1094 : switch (TREE_CODE (_p0))
9917 : : {
9918 : 1028 : case SSA_NAME:
9919 : 1028 : if (gimple *_d1 = get_def (valueize, _p0))
9920 : : {
9921 : 656 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
9922 : 336 : switch (gimple_assign_rhs_code (_a1))
9923 : : {
9924 : 336 : CASE_CONVERT:
9925 : 336 : {
9926 : 336 : tree _q20 = gimple_assign_rhs1 (_a1);
9927 : 336 : _q20 = do_valueize (valueize, _q20);
9928 : 336 : if (gimple_double_value_p (_q20, valueize))
9929 : : {
9930 : 120 : {
9931 : 120 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
9932 : 120 : if (gimple_simplify_654 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_LFLOORL, CFN_BUILT_IN_LFLOOR))
9933 : 120 : return true;
9934 : : }
9935 : : }
9936 : 216 : if (gimple_float_value_p (_q20, valueize))
9937 : : {
9938 : 216 : {
9939 : 216 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
9940 : 216 : if (gimple_simplify_655 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_LFLOORL, CFN_BUILT_IN_LFLOORF))
9941 : 216 : return true;
9942 : : }
9943 : : }
9944 : : break;
9945 : : }
9946 : : default:;
9947 : : }
9948 : : }
9949 : : break;
9950 : 758 : default:;
9951 : : }
9952 : 758 : if (tree_expr_nonnegative_p (_p0))
9953 : : {
9954 : 6 : {
9955 : 6 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
9956 : 6 : if (gimple_simplify_656 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_LFLOORL))
9957 : 6 : return true;
9958 : : }
9959 : : }
9960 : 752 : if (integer_valued_real_p (_p0))
9961 : : {
9962 : 20 : {
9963 : 20 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
9964 : 20 : if (gimple_simplify_657 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_LFLOORL))
9965 : 20 : return true;
9966 : : }
9967 : : }
9968 : : return false;
9969 : : }
9970 : :
9971 : : bool
9972 : 130 : gimple_simplify_CFN_BUILT_IN_LLCEILL (gimple_match_op *res_op, gimple_seq *seq,
9973 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
9974 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
9975 : : {
9976 : 130 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
9977 : 130 : switch (TREE_CODE (_p0))
9978 : : {
9979 : 98 : case SSA_NAME:
9980 : 98 : if (gimple *_d1 = get_def (valueize, _p0))
9981 : : {
9982 : 0 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
9983 : 0 : switch (gimple_assign_rhs_code (_a1))
9984 : : {
9985 : 0 : CASE_CONVERT:
9986 : 0 : {
9987 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
9988 : 0 : _q20 = do_valueize (valueize, _q20);
9989 : 0 : if (gimple_double_value_p (_q20, valueize))
9990 : : {
9991 : 0 : {
9992 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
9993 : 0 : if (gimple_simplify_654 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_LLCEILL, CFN_BUILT_IN_LLCEIL))
9994 : 0 : return true;
9995 : : }
9996 : : }
9997 : 0 : if (gimple_float_value_p (_q20, valueize))
9998 : : {
9999 : 0 : {
10000 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
10001 : 0 : if (gimple_simplify_655 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_LLCEILL, CFN_BUILT_IN_LLCEILF))
10002 : 0 : return true;
10003 : : }
10004 : : }
10005 : : break;
10006 : : }
10007 : : default:;
10008 : : }
10009 : : }
10010 : : break;
10011 : 130 : default:;
10012 : : }
10013 : 130 : if (integer_valued_real_p (_p0))
10014 : : {
10015 : 20 : {
10016 : 20 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
10017 : 20 : if (gimple_simplify_657 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_LLCEILL))
10018 : 20 : return true;
10019 : : }
10020 : : }
10021 : 110 : {
10022 : 110 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
10023 : 110 : if (gimple_simplify_659 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_ICEILL, CFN_BUILT_IN_LCEILL, CFN_BUILT_IN_LLCEILL))
10024 : 110 : return true;
10025 : : }
10026 : 0 : return false;
10027 : : }
10028 : :
10029 : : bool
10030 : 190 : gimple_simplify_CFN_BUILT_IN_IFLOOR (gimple_match_op *res_op, gimple_seq *seq,
10031 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
10032 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
10033 : : {
10034 : 190 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
10035 : 190 : switch (TREE_CODE (_p0))
10036 : : {
10037 : 188 : case SSA_NAME:
10038 : 188 : if (gimple *_d1 = get_def (valueize, _p0))
10039 : : {
10040 : 94 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
10041 : 184 : switch (gimple_assign_rhs_code (_a1))
10042 : : {
10043 : 0 : CASE_CONVERT:
10044 : 0 : {
10045 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
10046 : 0 : _q20 = do_valueize (valueize, _q20);
10047 : 0 : if (gimple_float_value_p (_q20, valueize))
10048 : : {
10049 : 0 : {
10050 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
10051 : 0 : if (gimple_simplify_655 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_IFLOOR, CFN_BUILT_IN_IFLOORF))
10052 : 0 : return true;
10053 : : }
10054 : : }
10055 : : break;
10056 : : }
10057 : : default:;
10058 : : }
10059 : : }
10060 : : break;
10061 : 190 : default:;
10062 : : }
10063 : 190 : if (tree_expr_nonnegative_p (_p0))
10064 : : {
10065 : 0 : {
10066 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
10067 : 0 : if (gimple_simplify_656 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_IFLOOR))
10068 : 0 : return true;
10069 : : }
10070 : : }
10071 : 190 : if (integer_valued_real_p (_p0))
10072 : : {
10073 : 1 : {
10074 : 1 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
10075 : 1 : if (gimple_simplify_657 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_IFLOOR))
10076 : 1 : return true;
10077 : : }
10078 : : }
10079 : 189 : {
10080 : 189 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
10081 : 189 : if (gimple_simplify_658 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_IFLOOR, CFN_BUILT_IN_LFLOOR, CFN_BUILT_IN_LLFLOOR))
10082 : 0 : return true;
10083 : : }
10084 : 189 : return false;
10085 : : }
10086 : :
10087 : : bool
10088 : 329 : gimple_simplify_CFN_BUILT_IN_LLRINT (gimple_match_op *res_op, gimple_seq *seq,
10089 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
10090 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
10091 : : {
10092 : 329 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
10093 : 329 : switch (TREE_CODE (_p0))
10094 : : {
10095 : 241 : case SSA_NAME:
10096 : 241 : if (gimple *_d1 = get_def (valueize, _p0))
10097 : : {
10098 : 111 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
10099 : 47 : switch (gimple_assign_rhs_code (_a1))
10100 : : {
10101 : 0 : CASE_CONVERT:
10102 : 0 : {
10103 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
10104 : 0 : _q20 = do_valueize (valueize, _q20);
10105 : 0 : if (gimple_float_value_p (_q20, valueize))
10106 : : {
10107 : 0 : {
10108 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
10109 : 0 : if (gimple_simplify_655 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_LLRINT, CFN_BUILT_IN_LLRINTF))
10110 : 0 : return true;
10111 : : }
10112 : : }
10113 : : break;
10114 : : }
10115 : : default:;
10116 : : }
10117 : : }
10118 : : break;
10119 : 329 : default:;
10120 : : }
10121 : 329 : if (integer_valued_real_p (_p0))
10122 : : {
10123 : 41 : {
10124 : 41 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
10125 : 41 : if (gimple_simplify_660 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_LLRINT))
10126 : 20 : return true;
10127 : : }
10128 : : }
10129 : 309 : {
10130 : 309 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
10131 : 309 : if (gimple_simplify_659 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_IRINT, CFN_BUILT_IN_LRINT, CFN_BUILT_IN_LLRINT))
10132 : 251 : return true;
10133 : : }
10134 : 58 : return false;
10135 : : }
10136 : :
10137 : : bool
10138 : 0 : gimple_simplify_CFN_LCEIL (gimple_match_op *res_op, gimple_seq *seq,
10139 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
10140 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
10141 : : {
10142 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
10143 : 0 : if (integer_valued_real_p (_p0))
10144 : : {
10145 : 0 : {
10146 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
10147 : 0 : if (gimple_simplify_657 (res_op, seq, valueize, type, captures, CFN_LCEIL))
10148 : 0 : return true;
10149 : : }
10150 : : }
10151 : : return false;
10152 : : }
10153 : :
10154 : : bool
10155 : 40 : gimple_simplify_CFN_IROUND (gimple_match_op *res_op, gimple_seq *seq,
10156 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
10157 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
10158 : : {
10159 : 40 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
10160 : 40 : if (integer_valued_real_p (_p0))
10161 : : {
10162 : 0 : {
10163 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
10164 : 0 : if (gimple_simplify_657 (res_op, seq, valueize, type, captures, CFN_IROUND))
10165 : 0 : return true;
10166 : : }
10167 : : }
10168 : 40 : {
10169 : 40 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
10170 : 40 : if (gimple_simplify_658 (res_op, seq, valueize, type, captures, CFN_IROUND, CFN_LROUND, CFN_LLROUND))
10171 : 0 : return true;
10172 : : }
10173 : 40 : return false;
10174 : : }
10175 : :
10176 : : bool
10177 : 467 : gimple_simplify_CFN_BUILT_IN_LLRINTF (gimple_match_op *res_op, gimple_seq *seq,
10178 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
10179 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
10180 : : {
10181 : 467 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
10182 : 467 : if (integer_valued_real_p (_p0))
10183 : : {
10184 : 31 : {
10185 : 31 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
10186 : 31 : if (gimple_simplify_660 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_LLRINTF))
10187 : 20 : return true;
10188 : : }
10189 : : }
10190 : 447 : {
10191 : 447 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
10192 : 447 : if (gimple_simplify_659 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_IRINTF, CFN_BUILT_IN_LRINTF, CFN_BUILT_IN_LLRINTF))
10193 : 351 : return true;
10194 : : }
10195 : 96 : return false;
10196 : : }
10197 : :
10198 : : bool
10199 : 4385 : gimple_simplify_CFN_BUILT_IN_CTZ (gimple_match_op *res_op, gimple_seq *seq,
10200 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
10201 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
10202 : : {
10203 : 4385 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
10204 : 4385 : switch (TREE_CODE (_p0))
10205 : : {
10206 : 4225 : case SSA_NAME:
10207 : 4225 : if (gimple *_d1 = get_def (valueize, _p0))
10208 : : {
10209 : 2139 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
10210 : 1881 : switch (gimple_assign_rhs_code (_a1))
10211 : : {
10212 : 0 : case NEGATE_EXPR:
10213 : 0 : {
10214 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
10215 : 0 : _q20 = do_valueize (valueize, _q20);
10216 : 0 : {
10217 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q20 };
10218 : 0 : if (gimple_simplify_674 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_CTZ))
10219 : 0 : return true;
10220 : : }
10221 : 0 : break;
10222 : : }
10223 : 0 : case ABS_EXPR:
10224 : 0 : {
10225 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
10226 : 0 : _q20 = do_valueize (valueize, _q20);
10227 : 0 : {
10228 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q20 };
10229 : 0 : if (gimple_simplify_675 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_CTZ))
10230 : 0 : return true;
10231 : : }
10232 : 0 : break;
10233 : : }
10234 : 990 : CASE_CONVERT:
10235 : 990 : {
10236 : 990 : tree _q20 = gimple_assign_rhs1 (_a1);
10237 : 990 : _q20 = do_valueize (valueize, _q20);
10238 : 990 : {
10239 : 990 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q20 };
10240 : 990 : if (gimple_simplify_676 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_CTZ))
10241 : 0 : return true;
10242 : : }
10243 : 990 : break;
10244 : : }
10245 : : default:;
10246 : : }
10247 : : }
10248 : : break;
10249 : 4385 : default:;
10250 : : }
10251 : 4385 : {
10252 : 4385 : tree _p0_pops[1];
10253 : 4385 : if (gimple_nop_convert (_p0, _p0_pops, valueize))
10254 : : {
10255 : 563 : tree _q20 = _p0_pops[0];
10256 : 563 : switch (TREE_CODE (_q20))
10257 : : {
10258 : 563 : case SSA_NAME:
10259 : 563 : if (gimple *_d1 = get_def (valueize, _q20))
10260 : : {
10261 : 486 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
10262 : 274 : switch (gimple_assign_rhs_code (_a1))
10263 : : {
10264 : 2 : case NEGATE_EXPR:
10265 : 2 : {
10266 : 2 : tree _q30 = gimple_assign_rhs1 (_a1);
10267 : 2 : _q30 = do_valueize (valueize, _q30);
10268 : 2 : {
10269 : 2 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q30 };
10270 : 2 : if (gimple_simplify_672 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_CTZ))
10271 : 1 : return true;
10272 : : }
10273 : 1 : break;
10274 : : }
10275 : 2 : case ABS_EXPR:
10276 : 2 : {
10277 : 2 : tree _q30 = gimple_assign_rhs1 (_a1);
10278 : 2 : _q30 = do_valueize (valueize, _q30);
10279 : 2 : {
10280 : 2 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q30 };
10281 : 2 : if (gimple_simplify_673 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_CTZ))
10282 : 1 : return true;
10283 : : }
10284 : 1 : break;
10285 : : }
10286 : : default:;
10287 : : }
10288 : : }
10289 : : break;
10290 : : default:;
10291 : : }
10292 : : }
10293 : : }
10294 : 4383 : return false;
10295 : : }
10296 : :
10297 : : bool
10298 : 0 : gimple_simplify_CFN_BUILT_IN_POPCOUNTIMAX (gimple_match_op *res_op, gimple_seq *seq,
10299 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
10300 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
10301 : : {
10302 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
10303 : 0 : switch (TREE_CODE (_p0))
10304 : : {
10305 : 0 : case SSA_NAME:
10306 : 0 : if (gimple *_d1 = get_def (valueize, _p0))
10307 : : {
10308 : 0 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
10309 : 0 : switch (gimple_assign_rhs_code (_a1))
10310 : : {
10311 : 0 : CASE_CONVERT:
10312 : 0 : {
10313 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
10314 : 0 : _q20 = do_valueize (valueize, _q20);
10315 : 0 : switch (TREE_CODE (_q20))
10316 : : {
10317 : 0 : case SSA_NAME:
10318 : 0 : if (gimple *_d2 = get_def (valueize, _q20))
10319 : : {
10320 : 0 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
10321 : 0 : switch (gimple_assign_rhs_code (_a2))
10322 : : {
10323 : 0 : case LROTATE_EXPR:
10324 : 0 : {
10325 : 0 : tree _q30 = gimple_assign_rhs1 (_a2);
10326 : 0 : _q30 = do_valueize (valueize, _q30);
10327 : 0 : tree _q31 = gimple_assign_rhs2 (_a2);
10328 : 0 : _q31 = do_valueize (valueize, _q31);
10329 : 0 : {
10330 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q31 };
10331 : 0 : if (gimple_simplify_678 (res_op, seq, valueize, type, captures, LROTATE_EXPR, CFN_BUILT_IN_POPCOUNTIMAX))
10332 : 0 : return true;
10333 : : }
10334 : 0 : break;
10335 : : }
10336 : 0 : case RROTATE_EXPR:
10337 : 0 : {
10338 : 0 : tree _q30 = gimple_assign_rhs1 (_a2);
10339 : 0 : _q30 = do_valueize (valueize, _q30);
10340 : 0 : tree _q31 = gimple_assign_rhs2 (_a2);
10341 : 0 : _q31 = do_valueize (valueize, _q31);
10342 : 0 : {
10343 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q31 };
10344 : 0 : if (gimple_simplify_678 (res_op, seq, valueize, type, captures, RROTATE_EXPR, CFN_BUILT_IN_POPCOUNTIMAX))
10345 : 0 : return true;
10346 : : }
10347 : 0 : break;
10348 : : }
10349 : : default:;
10350 : : }
10351 : 0 : else if (gcall *_c2 = dyn_cast <gcall *> (_d2))
10352 : 0 : switch (gimple_call_combined_fn (_c2))
10353 : : {
10354 : 0 : case CFN_BUILT_IN_BSWAP128:
10355 : 0 : if (gimple_call_num_args (_c2) == 1)
10356 : : {
10357 : 0 : tree _q30 = gimple_call_arg (_c2, 0);
10358 : 0 : _q30 = do_valueize (valueize, _q30);
10359 : 0 : {
10360 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q30 };
10361 : 0 : if (gimple_simplify_677 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_BSWAP128, CFN_BUILT_IN_POPCOUNTIMAX))
10362 : 0 : return true;
10363 : : }
10364 : : }
10365 : : break;
10366 : 0 : case CFN_BUILT_IN_BSWAP16:
10367 : 0 : if (gimple_call_num_args (_c2) == 1)
10368 : : {
10369 : 0 : tree _q30 = gimple_call_arg (_c2, 0);
10370 : 0 : _q30 = do_valueize (valueize, _q30);
10371 : 0 : {
10372 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q30 };
10373 : 0 : if (gimple_simplify_677 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_BSWAP16, CFN_BUILT_IN_POPCOUNTIMAX))
10374 : 0 : return true;
10375 : : }
10376 : : }
10377 : : break;
10378 : 0 : case CFN_BUILT_IN_BSWAP32:
10379 : 0 : if (gimple_call_num_args (_c2) == 1)
10380 : : {
10381 : 0 : tree _q30 = gimple_call_arg (_c2, 0);
10382 : 0 : _q30 = do_valueize (valueize, _q30);
10383 : 0 : {
10384 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q30 };
10385 : 0 : if (gimple_simplify_677 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_BSWAP32, CFN_BUILT_IN_POPCOUNTIMAX))
10386 : 0 : return true;
10387 : : }
10388 : : }
10389 : : break;
10390 : 0 : case CFN_BUILT_IN_BSWAP64:
10391 : 0 : if (gimple_call_num_args (_c2) == 1)
10392 : : {
10393 : 0 : tree _q30 = gimple_call_arg (_c2, 0);
10394 : 0 : _q30 = do_valueize (valueize, _q30);
10395 : 0 : {
10396 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q30 };
10397 : 0 : if (gimple_simplify_677 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_BSWAP64, CFN_BUILT_IN_POPCOUNTIMAX))
10398 : 0 : return true;
10399 : : }
10400 : : }
10401 : : break;
10402 : : default:;
10403 : : }
10404 : : }
10405 : : break;
10406 : 0 : default:;
10407 : : }
10408 : 0 : {
10409 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q20 };
10410 : 0 : if (gimple_simplify_679 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_POPCOUNTIMAX))
10411 : 0 : return true;
10412 : : }
10413 : 0 : break;
10414 : : }
10415 : 0 : case LROTATE_EXPR:
10416 : 0 : {
10417 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
10418 : 0 : _q20 = do_valueize (valueize, _q20);
10419 : 0 : tree _q21 = gimple_assign_rhs2 (_a1);
10420 : 0 : _q21 = do_valueize (valueize, _q21);
10421 : 0 : {
10422 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _p0, _q20, _q21 };
10423 : 0 : if (gimple_simplify_681 (res_op, seq, valueize, type, captures, LROTATE_EXPR, CFN_BUILT_IN_POPCOUNTIMAX))
10424 : 0 : return true;
10425 : : }
10426 : 0 : break;
10427 : : }
10428 : 0 : case RROTATE_EXPR:
10429 : 0 : {
10430 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
10431 : 0 : _q20 = do_valueize (valueize, _q20);
10432 : 0 : tree _q21 = gimple_assign_rhs2 (_a1);
10433 : 0 : _q21 = do_valueize (valueize, _q21);
10434 : 0 : {
10435 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _p0, _q20, _q21 };
10436 : 0 : if (gimple_simplify_681 (res_op, seq, valueize, type, captures, RROTATE_EXPR, CFN_BUILT_IN_POPCOUNTIMAX))
10437 : 0 : return true;
10438 : : }
10439 : 0 : break;
10440 : : }
10441 : : default:;
10442 : : }
10443 : 0 : else if (gcall *_c1 = dyn_cast <gcall *> (_d1))
10444 : 0 : switch (gimple_call_combined_fn (_c1))
10445 : : {
10446 : 0 : case CFN_BUILT_IN_BSWAP128:
10447 : 0 : if (gimple_call_num_args (_c1) == 1)
10448 : : {
10449 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
10450 : 0 : _q20 = do_valueize (valueize, _q20);
10451 : 0 : {
10452 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p0, _q20 };
10453 : 0 : if (gimple_simplify_680 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_BSWAP128, CFN_BUILT_IN_POPCOUNTIMAX))
10454 : 0 : return true;
10455 : : }
10456 : : }
10457 : : break;
10458 : 0 : case CFN_BUILT_IN_BSWAP16:
10459 : 0 : if (gimple_call_num_args (_c1) == 1)
10460 : : {
10461 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
10462 : 0 : _q20 = do_valueize (valueize, _q20);
10463 : 0 : {
10464 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p0, _q20 };
10465 : 0 : if (gimple_simplify_680 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_BSWAP16, CFN_BUILT_IN_POPCOUNTIMAX))
10466 : 0 : return true;
10467 : : }
10468 : : }
10469 : : break;
10470 : 0 : case CFN_BUILT_IN_BSWAP32:
10471 : 0 : if (gimple_call_num_args (_c1) == 1)
10472 : : {
10473 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
10474 : 0 : _q20 = do_valueize (valueize, _q20);
10475 : 0 : {
10476 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p0, _q20 };
10477 : 0 : if (gimple_simplify_680 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_BSWAP32, CFN_BUILT_IN_POPCOUNTIMAX))
10478 : 0 : return true;
10479 : : }
10480 : : }
10481 : : break;
10482 : 0 : case CFN_BUILT_IN_BSWAP64:
10483 : 0 : if (gimple_call_num_args (_c1) == 1)
10484 : : {
10485 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
10486 : 0 : _q20 = do_valueize (valueize, _q20);
10487 : 0 : {
10488 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p0, _q20 };
10489 : 0 : if (gimple_simplify_680 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_BSWAP64, CFN_BUILT_IN_POPCOUNTIMAX))
10490 : 0 : return true;
10491 : : }
10492 : : }
10493 : : break;
10494 : : default:;
10495 : : }
10496 : : }
10497 : : break;
10498 : 0 : default:;
10499 : : }
10500 : 0 : {
10501 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
10502 : 0 : if (gimple_simplify_682 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_POPCOUNTIMAX))
10503 : 0 : return true;
10504 : : }
10505 : 0 : return false;
10506 : : }
10507 : :
10508 : : bool
10509 : 380 : gimple_simplify_CFN_BUILT_IN_FFSL (gimple_match_op *res_op, gimple_seq *seq,
10510 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
10511 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
10512 : : {
10513 : 380 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
10514 : 380 : switch (TREE_CODE (_p0))
10515 : : {
10516 : 369 : case SSA_NAME:
10517 : 369 : if (gimple *_d1 = get_def (valueize, _p0))
10518 : : {
10519 : 189 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
10520 : 101 : switch (gimple_assign_rhs_code (_a1))
10521 : : {
10522 : 85 : CASE_CONVERT:
10523 : 85 : {
10524 : 85 : tree _q20 = gimple_assign_rhs1 (_a1);
10525 : 85 : _q20 = do_valueize (valueize, _q20);
10526 : 85 : {
10527 : 85 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q20 };
10528 : 85 : if (gimple_simplify_690 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FFSL))
10529 : 1 : return true;
10530 : : }
10531 : 84 : break;
10532 : : }
10533 : : default:;
10534 : : }
10535 : : }
10536 : : break;
10537 : 379 : default:;
10538 : : }
10539 : 379 : if (tree_expr_nonzero_p (_p0))
10540 : : {
10541 : 14 : {
10542 : 14 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
10543 : 14 : if (gimple_simplify_689 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FFSL, CFN_BUILT_IN_CTZL))
10544 : 14 : return true;
10545 : : }
10546 : : }
10547 : : return false;
10548 : : }
10549 : :
10550 : : bool
10551 : 769 : gimple_simplify_CFN_REDUC_XOR (gimple_match_op *res_op, gimple_seq *seq,
10552 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
10553 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0)
10554 : : {
10555 : 769 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
10556 : 769 : switch (TREE_CODE (_p0))
10557 : : {
10558 : 769 : case SSA_NAME:
10559 : 769 : if (gimple *_d1 = get_def (valueize, _p0))
10560 : : {
10561 : 298 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
10562 : 312 : switch (gimple_assign_rhs_code (_a1))
10563 : : {
10564 : 47 : case VIEW_CONVERT_EXPR:
10565 : 47 : {
10566 : 47 : tree _q20 = TREE_OPERAND (gimple_assign_rhs1 (_a1), 0);
10567 : 47 : if ((TREE_CODE (_q20) == SSA_NAME
10568 : 47 : || is_gimple_min_invariant (_q20)))
10569 : : {
10570 : 47 : _q20 = do_valueize (valueize, _q20);
10571 : 47 : switch (TREE_CODE (_q20))
10572 : : {
10573 : 47 : case SSA_NAME:
10574 : 47 : if (gimple *_d2 = get_def (valueize, _q20))
10575 : : {
10576 : 41 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
10577 : 67 : switch (gimple_assign_rhs_code (_a2))
10578 : : {
10579 : 0 : case BIT_AND_EXPR:
10580 : 0 : {
10581 : 0 : tree _q30 = gimple_assign_rhs1 (_a2);
10582 : 0 : _q30 = do_valueize (valueize, _q30);
10583 : 0 : tree _q31 = gimple_assign_rhs2 (_a2);
10584 : 0 : _q31 = do_valueize (valueize, _q31);
10585 : 0 : if (tree_swap_operands_p (_q30, _q31))
10586 : 0 : std::swap (_q30, _q31);
10587 : 0 : switch (TREE_CODE (_q31))
10588 : : {
10589 : 0 : case VECTOR_CST:
10590 : 0 : {
10591 : 0 : {
10592 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q30, _q31 };
10593 : 0 : if (gimple_simplify_693 (res_op, seq, valueize, type, captures, CFN_REDUC_XOR))
10594 : 0 : return true;
10595 : : }
10596 : 0 : break;
10597 : : }
10598 : : default:;
10599 : : }
10600 : 769 : break;
10601 : : }
10602 : : default:;
10603 : : }
10604 : : }
10605 : : break;
10606 : : default:;
10607 : : }
10608 : : }
10609 : : break;
10610 : : }
10611 : 0 : case BIT_AND_EXPR:
10612 : 0 : {
10613 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
10614 : 0 : _q20 = do_valueize (valueize, _q20);
10615 : 0 : tree _q21 = gimple_assign_rhs2 (_a1);
10616 : 0 : _q21 = do_valueize (valueize, _q21);
10617 : 0 : if (tree_swap_operands_p (_q20, _q21))
10618 : 0 : std::swap (_q20, _q21);
10619 : 0 : switch (TREE_CODE (_q21))
10620 : : {
10621 : 0 : case VECTOR_CST:
10622 : 0 : {
10623 : 0 : {
10624 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
10625 : 0 : if (gimple_simplify_693 (res_op, seq, valueize, type, captures, CFN_REDUC_XOR))
10626 : 0 : return true;
10627 : : }
10628 : 0 : break;
10629 : : }
10630 : : default:;
10631 : : }
10632 : 769 : break;
10633 : : }
10634 : 3 : case CONSTRUCTOR:
10635 : 3 : {
10636 : 3 : {
10637 : 3 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
10638 : 3 : if (gimple_simplify_694 (res_op, seq, valueize, type, captures, CFN_REDUC_XOR))
10639 : 3 : return true;
10640 : : }
10641 : 0 : break;
10642 : : }
10643 : 205 : case BIT_XOR_EXPR:
10644 : 205 : {
10645 : 205 : tree _q20 = gimple_assign_rhs1 (_a1);
10646 : 205 : _q20 = do_valueize (valueize, _q20);
10647 : 205 : tree _q21 = gimple_assign_rhs2 (_a1);
10648 : 205 : _q21 = do_valueize (valueize, _q21);
10649 : 205 : if (tree_swap_operands_p (_q20, _q21))
10650 : 8 : std::swap (_q20, _q21);
10651 : 205 : switch (TREE_CODE (_q21))
10652 : : {
10653 : 4 : case VECTOR_CST:
10654 : 4 : {
10655 : 4 : {
10656 : 4 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
10657 : 4 : gimple_seq *lseq = seq;
10658 : 4 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail1960;
10659 : 4 : {
10660 : 4 : res_op->set_op (BIT_XOR_EXPR, type, 2);
10661 : 4 : {
10662 : 4 : tree _o1[1], _r1;
10663 : 4 : _o1[0] = captures[0];
10664 : 4 : gimple_match_op tem_op (res_op->cond.any_else (), CFN_REDUC_XOR, type, _o1[0]);
10665 : 4 : tem_op.resimplify (lseq, valueize);
10666 : 4 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
10667 : 4 : if (!_r1) goto next_after_fail1960;
10668 : 2 : res_op->ops[0] = _r1;
10669 : : }
10670 : 2 : {
10671 : 2 : tree _o1[1], _r1;
10672 : 2 : _o1[0] = captures[1];
10673 : 2 : gimple_match_op tem_op (res_op->cond.any_else (), CFN_REDUC_XOR, type, _o1[0]);
10674 : 2 : tem_op.resimplify (lseq, valueize);
10675 : 2 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
10676 : 2 : if (!_r1) goto next_after_fail1960;
10677 : 2 : res_op->ops[1] = _r1;
10678 : : }
10679 : 2 : res_op->resimplify (lseq, valueize);
10680 : 2 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1025, __FILE__, __LINE__, true);
10681 : 2 : return true;
10682 : : }
10683 : 2 : next_after_fail1960:;
10684 : : }
10685 : 2 : break;
10686 : : }
10687 : : default:;
10688 : : }
10689 : 769 : break;
10690 : : }
10691 : : default:;
10692 : : }
10693 : : }
10694 : : break;
10695 : : default:;
10696 : : }
10697 : : return false;
10698 : : }
10699 : :
10700 : : bool
10701 : 32927679 : gimple_simplify_POINTER_PLUS_EXPR (gimple_match_op *res_op, gimple_seq *seq,
10702 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
10703 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1)
10704 : : {
10705 : 32927679 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
10706 : 32927679 : if (integer_zerop (_p1))
10707 : : {
10708 : 2122904 : {
10709 : 2122904 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
10710 : 2122904 : gimple_seq *lseq = seq;
10711 : 2122904 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2028;
10712 : 2122904 : {
10713 : 2122904 : tree tem;
10714 : 2122904 : tem = captures[0];
10715 : 2122904 : res_op->set_value (tem);
10716 : 2122904 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1026, __FILE__, __LINE__, true);
10717 : 2122904 : return true;
10718 : : }
10719 : 0 : next_after_fail2028:;
10720 : : }
10721 : : }
10722 : 30804775 : switch (TREE_CODE (_p0))
10723 : : {
10724 : 22491195 : case SSA_NAME:
10725 : 22491195 : if (gimple *_d1 = get_def (valueize, _p0))
10726 : : {
10727 : 16882911 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
10728 : 15207152 : switch (gimple_assign_rhs_code (_a1))
10729 : : {
10730 : 2210975 : case POINTER_PLUS_EXPR:
10731 : 2210975 : {
10732 : 2210975 : tree _q20 = gimple_assign_rhs1 (_a1);
10733 : 2210975 : _q20 = do_valueize (valueize, _q20);
10734 : 2210975 : tree _q21 = gimple_assign_rhs2 (_a1);
10735 : 2210975 : _q21 = do_valueize (valueize, _q21);
10736 : 2210975 : {
10737 : 2210975 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _p1 };
10738 : 2210975 : gimple_seq *lseq = seq;
10739 : 2210975 : if (lseq
10740 : 258035 : && (!single_use (captures[0])))
10741 : 2191888 : lseq = NULL;
10742 : 2210975 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2029;
10743 : 2210975 : {
10744 : 2210975 : res_op->set_op (POINTER_PLUS_EXPR, type, 2);
10745 : 2210975 : res_op->ops[0] = captures[1];
10746 : 2210975 : {
10747 : 2210975 : tree _o1[2], _r1;
10748 : 2210975 : _o1[0] = captures[2];
10749 : 2210975 : _o1[1] = captures[3];
10750 : 2210975 : gimple_match_op tem_op (res_op->cond.any_else (), PLUS_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
10751 : 2210975 : tem_op.resimplify (lseq, valueize);
10752 : 2210975 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
10753 : 2210975 : if (!_r1) goto next_after_fail2029;
10754 : 1041853 : res_op->ops[1] = _r1;
10755 : : }
10756 : 1041853 : res_op->resimplify (lseq, valueize);
10757 : 1041853 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1043, __FILE__, __LINE__, true);
10758 : 1041853 : return true;
10759 : : }
10760 : 1169122 : next_after_fail2029:;
10761 : : }
10762 : 1169122 : break;
10763 : : }
10764 : : default:;
10765 : : }
10766 : : }
10767 : : break;
10768 : 29762922 : default:;
10769 : : }
10770 : 29762922 : if (integer_zerop (_p0))
10771 : : {
10772 : 13936 : {
10773 : 13936 : tree captures[1] ATTRIBUTE_UNUSED = { _p1 };
10774 : 13936 : gimple_seq *lseq = seq;
10775 : 13936 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2030;
10776 : 13936 : {
10777 : 13936 : res_op->set_op (NOP_EXPR, type, 1);
10778 : 13936 : res_op->ops[0] = captures[0];
10779 : 13936 : res_op->resimplify (lseq, valueize);
10780 : 13936 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1044, __FILE__, __LINE__, true);
10781 : 13936 : return true;
10782 : : }
10783 : 0 : next_after_fail2030:;
10784 : : }
10785 : : }
10786 : 29748986 : switch (TREE_CODE (_p1))
10787 : : {
10788 : 20527268 : case SSA_NAME:
10789 : 20527268 : if (gimple *_d1 = get_def (valueize, _p1))
10790 : : {
10791 : 12179718 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
10792 : 11326414 : switch (gimple_assign_rhs_code (_a1))
10793 : : {
10794 : 3535346 : CASE_CONVERT:
10795 : 3535346 : {
10796 : 3535346 : tree _q30 = gimple_assign_rhs1 (_a1);
10797 : 3535346 : _q30 = do_valueize (valueize, _q30);
10798 : 3535346 : switch (TREE_CODE (_q30))
10799 : : {
10800 : 3535344 : case SSA_NAME:
10801 : 3535344 : if (gimple *_d2 = get_def (valueize, _q30))
10802 : : {
10803 : 3404995 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
10804 : 3832329 : switch (gimple_assign_rhs_code (_a2))
10805 : : {
10806 : 33462 : case MINUS_EXPR:
10807 : 33462 : {
10808 : 33462 : tree _q40 = gimple_assign_rhs1 (_a2);
10809 : 33462 : _q40 = do_valueize (valueize, _q40);
10810 : 33462 : tree _q41 = gimple_assign_rhs2 (_a2);
10811 : 33462 : _q41 = do_valueize (valueize, _q41);
10812 : 33462 : switch (TREE_CODE (_q40))
10813 : : {
10814 : 13781 : case SSA_NAME:
10815 : 13781 : if (gimple *_d3 = get_def (valueize, _q40))
10816 : : {
10817 : 12983 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
10818 : 14343 : switch (gimple_assign_rhs_code (_a3))
10819 : : {
10820 : 424 : CASE_CONVERT:
10821 : 424 : {
10822 : 424 : tree _q50 = gimple_assign_rhs1 (_a3);
10823 : 424 : _q50 = do_valueize (valueize, _q50);
10824 : 424 : switch (TREE_CODE (_q41))
10825 : : {
10826 : 381 : case SSA_NAME:
10827 : 381 : if (gimple *_d4 = get_def (valueize, _q41))
10828 : : {
10829 : 381 : if (gassign *_a4 = dyn_cast <gassign *> (_d4))
10830 : 362 : switch (gimple_assign_rhs_code (_a4))
10831 : : {
10832 : 292 : CASE_CONVERT:
10833 : 292 : {
10834 : 292 : tree _q70 = gimple_assign_rhs1 (_a4);
10835 : 292 : _q70 = do_valueize (valueize, _q70);
10836 : 292 : if ((_q70 == _p0 && ! TREE_SIDE_EFFECTS (_q70)) || (operand_equal_p (_q70, _p0, 0) && types_match (_q70, _p0)))
10837 : : {
10838 : 125 : {
10839 : 125 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _p1, _q30, _q50 };
10840 : 125 : if (TYPE_PRECISION (TREE_TYPE (captures[1])) == TYPE_PRECISION (TREE_TYPE (captures[2]))
10841 : 250 : && ((
10842 : : 1
10843 : 125 : && useless_type_conversion_p (type, TREE_TYPE (captures[3])))
10844 : : || (
10845 : :
10846 : : && type == TREE_TYPE (captures[3])))
10847 : : )
10848 : : {
10849 : 125 : gimple_seq *lseq = seq;
10850 : 125 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2031;
10851 : 125 : {
10852 : 125 : tree tem;
10853 : 125 : tem = captures[3];
10854 : 125 : res_op->set_value (tem);
10855 : 125 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1045, __FILE__, __LINE__, true);
10856 : 125 : return true;
10857 : : }
10858 : 0 : next_after_fail2031:;
10859 : : }
10860 : : }
10861 : : }
10862 : : break;
10863 : : }
10864 : : default:;
10865 : : }
10866 : : }
10867 : : break;
10868 : : default:;
10869 : : }
10870 : : break;
10871 : : }
10872 : : default:;
10873 : : }
10874 : : }
10875 : : break;
10876 : : default:;
10877 : : }
10878 : : break;
10879 : : }
10880 : 211373 : case POINTER_DIFF_EXPR:
10881 : 211373 : {
10882 : 211373 : tree _q40 = gimple_assign_rhs1 (_a2);
10883 : 211373 : _q40 = do_valueize (valueize, _q40);
10884 : 211373 : tree _q41 = gimple_assign_rhs2 (_a2);
10885 : 211373 : _q41 = do_valueize (valueize, _q41);
10886 : 211373 : if ((_q41 == _p0 && ! TREE_SIDE_EFFECTS (_q41)) || operand_equal_p (_q41, _p0, 0))
10887 : : {
10888 : 3899 : {
10889 : 3899 : tree captures[5] ATTRIBUTE_UNUSED = { _q41, _p1, _q30, _q40, _p0 };
10890 : 3899 : if (TYPE_PRECISION (TREE_TYPE (captures[1])) >= TYPE_PRECISION (TREE_TYPE (captures[2]))
10891 : : )
10892 : : {
10893 : 3899 : gimple_seq *lseq = seq;
10894 : 3899 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2032;
10895 : 3899 : {
10896 : 3899 : res_op->set_op (NOP_EXPR, type, 1);
10897 : 3899 : res_op->ops[0] = captures[3];
10898 : 3899 : res_op->resimplify (lseq, valueize);
10899 : 3899 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1046, __FILE__, __LINE__, true);
10900 : 3899 : return true;
10901 : : }
10902 : 0 : next_after_fail2032:;
10903 : : }
10904 : : }
10905 : : }
10906 : : break;
10907 : : }
10908 : : default:;
10909 : : }
10910 : : }
10911 : : break;
10912 : : default:;
10913 : : }
10914 : : break;
10915 : : }
10916 : 67651 : case MINUS_EXPR:
10917 : 67651 : {
10918 : 67651 : tree _q30 = gimple_assign_rhs1 (_a1);
10919 : 67651 : _q30 = do_valueize (valueize, _q30);
10920 : 67651 : tree _q31 = gimple_assign_rhs2 (_a1);
10921 : 67651 : _q31 = do_valueize (valueize, _q31);
10922 : 67651 : switch (TREE_CODE (_q30))
10923 : : {
10924 : 64510 : case SSA_NAME:
10925 : 64510 : if (gimple *_d2 = get_def (valueize, _q30))
10926 : : {
10927 : 64078 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
10928 : 88975 : switch (gimple_assign_rhs_code (_a2))
10929 : : {
10930 : 25105 : CASE_CONVERT:
10931 : 25105 : {
10932 : 25105 : tree _q40 = gimple_assign_rhs1 (_a2);
10933 : 25105 : _q40 = do_valueize (valueize, _q40);
10934 : 25105 : switch (TREE_CODE (_q31))
10935 : : {
10936 : 25036 : case SSA_NAME:
10937 : 25036 : if (gimple *_d3 = get_def (valueize, _q31))
10938 : : {
10939 : 24976 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
10940 : 24962 : switch (gimple_assign_rhs_code (_a3))
10941 : : {
10942 : 24622 : CASE_CONVERT:
10943 : 24622 : {
10944 : 24622 : tree _q60 = gimple_assign_rhs1 (_a3);
10945 : 24622 : _q60 = do_valueize (valueize, _q60);
10946 : 24622 : if ((_q60 == _p0 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _p0, 0) && types_match (_q60, _p0)))
10947 : : {
10948 : 134 : {
10949 : 134 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _p1, _p1, _q40 };
10950 : 134 : if (TYPE_PRECISION (TREE_TYPE (captures[1])) == TYPE_PRECISION (TREE_TYPE (captures[2]))
10951 : 134 : && ((
10952 : : 1
10953 : 134 : && useless_type_conversion_p (type, TREE_TYPE (captures[3])))
10954 : : || (
10955 : :
10956 : : && type == TREE_TYPE (captures[3])))
10957 : : )
10958 : : {
10959 : 134 : gimple_seq *lseq = seq;
10960 : 134 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2033;
10961 : 134 : {
10962 : 134 : tree tem;
10963 : 134 : tem = captures[3];
10964 : 134 : res_op->set_value (tem);
10965 : 134 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1045, __FILE__, __LINE__, true);
10966 : 134 : return true;
10967 : : }
10968 : 0 : next_after_fail2033:;
10969 : : }
10970 : : }
10971 : : }
10972 : : break;
10973 : : }
10974 : : default:;
10975 : : }
10976 : : }
10977 : : break;
10978 : : default:;
10979 : : }
10980 : : break;
10981 : : }
10982 : : default:;
10983 : : }
10984 : : }
10985 : : break;
10986 : 3141 : case INTEGER_CST:
10987 : 3141 : {
10988 : 3141 : switch (TREE_CODE (_q31))
10989 : : {
10990 : 3141 : case SSA_NAME:
10991 : 3141 : if (gimple *_d2 = get_def (valueize, _q31))
10992 : : {
10993 : 3001 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
10994 : 2653 : switch (gimple_assign_rhs_code (_a2))
10995 : : {
10996 : 150 : case BIT_AND_EXPR:
10997 : 150 : {
10998 : 150 : tree _q50 = gimple_assign_rhs1 (_a2);
10999 : 150 : _q50 = do_valueize (valueize, _q50);
11000 : 150 : tree _q51 = gimple_assign_rhs2 (_a2);
11001 : 150 : _q51 = do_valueize (valueize, _q51);
11002 : 150 : if (tree_swap_operands_p (_q50, _q51))
11003 : 0 : std::swap (_q50, _q51);
11004 : 150 : switch (TREE_CODE (_q50))
11005 : : {
11006 : 150 : case SSA_NAME:
11007 : 150 : if (gimple *_d3 = get_def (valueize, _q50))
11008 : : {
11009 : 150 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
11010 : 184 : switch (gimple_assign_rhs_code (_a3))
11011 : : {
11012 : 116 : CASE_CONVERT:
11013 : 116 : {
11014 : 116 : tree _q60 = gimple_assign_rhs1 (_a3);
11015 : 116 : _q60 = do_valueize (valueize, _q60);
11016 : 116 : if ((_q60 == _p0 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _p0, 0) && types_match (_q60, _p0)))
11017 : : {
11018 : 74 : switch (TREE_CODE (_q51))
11019 : : {
11020 : 74 : case INTEGER_CST:
11021 : 74 : {
11022 : 74 : {
11023 : 74 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _p1, _q30, _q51 };
11024 : 74 : if (tree_int_cst_min_precision (captures[3], UNSIGNED) <= tree_ctz (captures[2])
11025 : : )
11026 : : {
11027 : 2 : {
11028 : 2 : tree algn = wide_int_to_tree (TREE_TYPE (captures[0]), ~wi::to_wide (captures[3]));
11029 : 2 : gimple_seq *lseq = seq;
11030 : 2 : if (lseq
11031 : 1 : && (!single_use (captures[1])))
11032 : 1 : lseq = NULL;
11033 : 2 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2034;
11034 : 2 : {
11035 : 2 : res_op->set_op (POINTER_PLUS_EXPR, type, 2);
11036 : 2 : {
11037 : 2 : tree _o1[2], _r1;
11038 : 2 : _o1[0] = captures[0];
11039 : 2 : _o1[1] = algn;
11040 : 2 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_AND_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
11041 : 2 : tem_op.resimplify (lseq, valueize);
11042 : 2 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
11043 : 2 : if (!_r1) goto next_after_fail2034;
11044 : 1 : res_op->ops[0] = _r1;
11045 : : }
11046 : 1 : res_op->ops[1] = captures[2];
11047 : 1 : res_op->resimplify (lseq, valueize);
11048 : 1 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1047, __FILE__, __LINE__, true);
11049 : 1 : return true;
11050 : : }
11051 : 73 : next_after_fail2034:;
11052 : : }
11053 : : }
11054 : : }
11055 : 73 : break;
11056 : : }
11057 : : default:;
11058 : : }
11059 : : }
11060 : 115 : switch (TREE_CODE (_q60))
11061 : : {
11062 : 115 : case SSA_NAME:
11063 : 115 : if (gimple *_d4 = get_def (valueize, _q60))
11064 : : {
11065 : 103 : if (gassign *_a4 = dyn_cast <gassign *> (_d4))
11066 : 44 : switch (gimple_assign_rhs_code (_a4))
11067 : : {
11068 : 40 : case POINTER_PLUS_EXPR:
11069 : 40 : {
11070 : 40 : tree _q70 = gimple_assign_rhs1 (_a4);
11071 : 40 : _q70 = do_valueize (valueize, _q70);
11072 : 40 : tree _q71 = gimple_assign_rhs2 (_a4);
11073 : 40 : _q71 = do_valueize (valueize, _q71);
11074 : 40 : if ((_q70 == _p0 && ! TREE_SIDE_EFFECTS (_q70)) || (operand_equal_p (_q70, _p0, 0) && types_match (_q70, _p0)))
11075 : : {
11076 : 40 : switch (TREE_CODE (_q71))
11077 : : {
11078 : 40 : case INTEGER_CST:
11079 : 40 : {
11080 : 40 : switch (TREE_CODE (_q51))
11081 : : {
11082 : 40 : case INTEGER_CST:
11083 : 40 : {
11084 : 40 : {
11085 : 40 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _p1, _q30, _q71, _q51 };
11086 : 40 : {
11087 : 40 : auto mask_width = tree_int_cst_min_precision (captures[4], UNSIGNED);
11088 : 40 : if (mask_width <= tree_ctz (captures[2]) && mask_width <= tree_ctz (captures[3])
11089 : : )
11090 : : {
11091 : 4 : {
11092 : 4 : tree algn = wide_int_to_tree (TREE_TYPE (captures[0]), ~wi::to_wide (captures[4]));
11093 : 4 : gimple_seq *lseq = seq;
11094 : 4 : if (lseq
11095 : 2 : && (!single_use (captures[1])))
11096 : 2 : lseq = NULL;
11097 : 4 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2035;
11098 : 4 : {
11099 : 4 : res_op->set_op (POINTER_PLUS_EXPR, type, 2);
11100 : 4 : {
11101 : 4 : tree _o1[2], _r1;
11102 : 4 : _o1[0] = captures[0];
11103 : 4 : _o1[1] = algn;
11104 : 4 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_AND_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
11105 : 4 : tem_op.resimplify (lseq, valueize);
11106 : 4 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
11107 : 4 : if (!_r1) goto next_after_fail2035;
11108 : 2 : res_op->ops[0] = _r1;
11109 : : }
11110 : 2 : res_op->ops[1] = captures[2];
11111 : 2 : res_op->resimplify (lseq, valueize);
11112 : 2 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1048, __FILE__, __LINE__, true);
11113 : 2 : return true;
11114 : : }
11115 : 38 : next_after_fail2035:;
11116 : : }
11117 : : }
11118 : : }
11119 : : }
11120 : 38 : break;
11121 : : }
11122 : : default:;
11123 : : }
11124 : : break;
11125 : : }
11126 : : default:;
11127 : : }
11128 : : }
11129 : : break;
11130 : : }
11131 : : default:;
11132 : : }
11133 : : }
11134 : : break;
11135 : : default:;
11136 : : }
11137 : : break;
11138 : : }
11139 : : default:;
11140 : : }
11141 : : }
11142 : : break;
11143 : : default:;
11144 : : }
11145 : 32927679 : break;
11146 : : }
11147 : : default:;
11148 : : }
11149 : : }
11150 : : break;
11151 : : default:;
11152 : : }
11153 : : break;
11154 : : }
11155 : : default:;
11156 : : }
11157 : : break;
11158 : : }
11159 : 0 : case POINTER_DIFF_EXPR:
11160 : 0 : {
11161 : 0 : tree _q30 = gimple_assign_rhs1 (_a1);
11162 : 0 : _q30 = do_valueize (valueize, _q30);
11163 : 0 : tree _q31 = gimple_assign_rhs2 (_a1);
11164 : 0 : _q31 = do_valueize (valueize, _q31);
11165 : 0 : if ((_q31 == _p0 && ! TREE_SIDE_EFFECTS (_q31)) || operand_equal_p (_q31, _p0, 0))
11166 : : {
11167 : 0 : {
11168 : 0 : tree captures[5] ATTRIBUTE_UNUSED = { _q31, _p1, _p1, _q30, _p0 };
11169 : 0 : if (TYPE_PRECISION (TREE_TYPE (captures[1])) >= TYPE_PRECISION (TREE_TYPE (captures[2]))
11170 : : )
11171 : : {
11172 : 0 : gimple_seq *lseq = seq;
11173 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2036;
11174 : 0 : {
11175 : 0 : res_op->set_op (NOP_EXPR, type, 1);
11176 : 0 : res_op->ops[0] = captures[3];
11177 : 0 : res_op->resimplify (lseq, valueize);
11178 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1046, __FILE__, __LINE__, true);
11179 : 0 : return true;
11180 : : }
11181 : 0 : next_after_fail2036:;
11182 : : }
11183 : : }
11184 : : }
11185 : : break;
11186 : : }
11187 : 192393 : case NEGATE_EXPR:
11188 : 192393 : {
11189 : 192393 : tree _q30 = gimple_assign_rhs1 (_a1);
11190 : 192393 : _q30 = do_valueize (valueize, _q30);
11191 : 192393 : switch (TREE_CODE (_q30))
11192 : : {
11193 : 192393 : case SSA_NAME:
11194 : 192393 : if (gimple *_d2 = get_def (valueize, _q30))
11195 : : {
11196 : 185150 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
11197 : 173919 : switch (gimple_assign_rhs_code (_a2))
11198 : : {
11199 : 140 : case BIT_AND_EXPR:
11200 : 140 : {
11201 : 140 : tree _q40 = gimple_assign_rhs1 (_a2);
11202 : 140 : _q40 = do_valueize (valueize, _q40);
11203 : 140 : tree _q41 = gimple_assign_rhs2 (_a2);
11204 : 140 : _q41 = do_valueize (valueize, _q41);
11205 : 140 : if (tree_swap_operands_p (_q40, _q41))
11206 : 0 : std::swap (_q40, _q41);
11207 : 140 : switch (TREE_CODE (_q40))
11208 : : {
11209 : 140 : case SSA_NAME:
11210 : 140 : if (gimple *_d3 = get_def (valueize, _q40))
11211 : : {
11212 : 140 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
11213 : 170 : switch (gimple_assign_rhs_code (_a3))
11214 : : {
11215 : 96 : CASE_CONVERT:
11216 : 96 : {
11217 : 96 : tree _q50 = gimple_assign_rhs1 (_a3);
11218 : 96 : _q50 = do_valueize (valueize, _q50);
11219 : 96 : if ((_q50 == _p0 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _p0, 0) && types_match (_q50, _p0)))
11220 : : {
11221 : 0 : switch (TREE_CODE (_q41))
11222 : : {
11223 : 0 : case INTEGER_CST:
11224 : 0 : {
11225 : 0 : {
11226 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q41 };
11227 : 0 : {
11228 : 0 : tree algn = wide_int_to_tree (TREE_TYPE (captures[0]), ~wi::to_wide (captures[1]));
11229 : 0 : gimple_seq *lseq = seq;
11230 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2037;
11231 : 0 : {
11232 : 0 : res_op->set_op (BIT_AND_EXPR, type, 2);
11233 : 0 : res_op->ops[0] = captures[0];
11234 : 0 : res_op->ops[1] = algn;
11235 : 0 : res_op->resimplify (lseq, valueize);
11236 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1049, __FILE__, __LINE__, true);
11237 : 0 : return true;
11238 : : }
11239 : 0 : next_after_fail2037:;
11240 : : }
11241 : : }
11242 : 0 : break;
11243 : : }
11244 : : default:;
11245 : : }
11246 : : }
11247 : 96 : switch (TREE_CODE (_q50))
11248 : : {
11249 : 96 : case SSA_NAME:
11250 : 96 : if (gimple *_d4 = get_def (valueize, _q50))
11251 : : {
11252 : 96 : if (gassign *_a4 = dyn_cast <gassign *> (_d4))
11253 : 112 : switch (gimple_assign_rhs_code (_a4))
11254 : : {
11255 : 74 : case POINTER_PLUS_EXPR:
11256 : 74 : {
11257 : 74 : tree _q60 = gimple_assign_rhs1 (_a4);
11258 : 74 : _q60 = do_valueize (valueize, _q60);
11259 : 74 : tree _q61 = gimple_assign_rhs2 (_a4);
11260 : 74 : _q61 = do_valueize (valueize, _q61);
11261 : 74 : if ((_q60 == _p0 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _p0, 0) && types_match (_q60, _p0)))
11262 : : {
11263 : 74 : switch (TREE_CODE (_q61))
11264 : : {
11265 : 74 : case INTEGER_CST:
11266 : 74 : {
11267 : 74 : switch (TREE_CODE (_q41))
11268 : : {
11269 : 74 : case INTEGER_CST:
11270 : 74 : {
11271 : 74 : {
11272 : 74 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q61, _q41 };
11273 : 74 : if (tree_int_cst_min_precision (captures[2], UNSIGNED) <= tree_ctz (captures[1])
11274 : : )
11275 : : {
11276 : 2 : {
11277 : 2 : tree algn = wide_int_to_tree (TREE_TYPE (captures[0]), ~wi::to_wide (captures[2]));
11278 : 2 : gimple_seq *lseq = seq;
11279 : 2 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2038;
11280 : 2 : {
11281 : 2 : res_op->set_op (BIT_AND_EXPR, type, 2);
11282 : 2 : res_op->ops[0] = captures[0];
11283 : 2 : res_op->ops[1] = algn;
11284 : 2 : res_op->resimplify (lseq, valueize);
11285 : 2 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1050, __FILE__, __LINE__, true);
11286 : 2 : return true;
11287 : : }
11288 : 0 : next_after_fail2038:;
11289 : : }
11290 : : }
11291 : : }
11292 : 72 : break;
11293 : : }
11294 : : default:;
11295 : : }
11296 : : break;
11297 : : }
11298 : : default:;
11299 : : }
11300 : : }
11301 : : break;
11302 : : }
11303 : : default:;
11304 : : }
11305 : : }
11306 : : break;
11307 : : default:;
11308 : : }
11309 : : break;
11310 : : }
11311 : : default:;
11312 : : }
11313 : : }
11314 : : break;
11315 : : default:;
11316 : : }
11317 : 32927679 : break;
11318 : : }
11319 : : default:;
11320 : : }
11321 : : }
11322 : : break;
11323 : : default:;
11324 : : }
11325 : : break;
11326 : : }
11327 : : default:;
11328 : : }
11329 : : }
11330 : : break;
11331 : : default:;
11332 : : }
11333 : : return false;
11334 : : }
11335 : :
11336 : : bool
11337 : 128183795 : gimple_simplify_NE_EXPR (gimple_match_op *res_op, gimple_seq *seq,
11338 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
11339 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1)
11340 : : {
11341 : 128183795 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
11342 : 128183795 : switch (TREE_CODE (_p1))
11343 : : {
11344 : 22778281 : case SSA_NAME:
11345 : 22778281 : if (gimple *_d1 = get_def (valueize, _p1))
11346 : : {
11347 : 7227194 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
11348 : 10256213 : switch (gimple_assign_rhs_code (_a1))
11349 : : {
11350 : 13160 : case NEGATE_EXPR:
11351 : 13160 : {
11352 : 13160 : tree _q30 = gimple_assign_rhs1 (_a1);
11353 : 13160 : _q30 = do_valueize (valueize, _q30);
11354 : 13160 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || (operand_equal_p (_q30, _p0, 0) && types_match (_q30, _p0)))
11355 : : {
11356 : 270 : {
11357 : 270 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
11358 : 270 : if (gimple_simplify_222 (res_op, seq, valueize, type, captures, NE_EXPR))
11359 : 12 : return true;
11360 : : }
11361 : : }
11362 : : break;
11363 : : }
11364 : : default:;
11365 : : }
11366 : : }
11367 : : break;
11368 : 128183783 : default:;
11369 : : }
11370 : 128183783 : switch (TREE_CODE (_p0))
11371 : : {
11372 : 125260428 : case SSA_NAME:
11373 : 125260428 : if (gimple *_d1 = get_def (valueize, _p0))
11374 : : {
11375 : 42939162 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
11376 : 46872540 : switch (gimple_assign_rhs_code (_a1))
11377 : : {
11378 : 14324 : case NEGATE_EXPR:
11379 : 14324 : {
11380 : 14324 : tree _q20 = gimple_assign_rhs1 (_a1);
11381 : 14324 : _q20 = do_valueize (valueize, _q20);
11382 : 14324 : if ((_p1 == _q20 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q20, 0) && types_match (_p1, _q20)))
11383 : : {
11384 : 101 : {
11385 : 101 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
11386 : 101 : if (gimple_simplify_222 (res_op, seq, valueize, type, captures, NE_EXPR))
11387 : 35 : return true;
11388 : : }
11389 : : }
11390 : : break;
11391 : : }
11392 : 0 : case CEIL_MOD_EXPR:
11393 : 0 : {
11394 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
11395 : 0 : _q20 = do_valueize (valueize, _q20);
11396 : 0 : tree _q21 = gimple_assign_rhs2 (_a1);
11397 : 0 : _q21 = do_valueize (valueize, _q21);
11398 : 0 : if (integer_pow2p (_q21))
11399 : : {
11400 : 0 : if (integer_zerop (_p1))
11401 : : {
11402 : 0 : {
11403 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
11404 : 0 : if (gimple_simplify_223 (res_op, seq, valueize, type, captures, NE_EXPR, CEIL_MOD_EXPR))
11405 : 0 : return true;
11406 : : }
11407 : : }
11408 : : }
11409 : : break;
11410 : : }
11411 : 1871 : case FLOOR_MOD_EXPR:
11412 : 1871 : {
11413 : 1871 : tree _q20 = gimple_assign_rhs1 (_a1);
11414 : 1871 : _q20 = do_valueize (valueize, _q20);
11415 : 1871 : tree _q21 = gimple_assign_rhs2 (_a1);
11416 : 1871 : _q21 = do_valueize (valueize, _q21);
11417 : 1871 : if (integer_pow2p (_q21))
11418 : : {
11419 : 0 : if (integer_zerop (_p1))
11420 : : {
11421 : 0 : {
11422 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
11423 : 0 : if (gimple_simplify_223 (res_op, seq, valueize, type, captures, NE_EXPR, FLOOR_MOD_EXPR))
11424 : 0 : return true;
11425 : : }
11426 : : }
11427 : : }
11428 : : break;
11429 : : }
11430 : 0 : case ROUND_MOD_EXPR:
11431 : 0 : {
11432 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
11433 : 0 : _q20 = do_valueize (valueize, _q20);
11434 : 0 : tree _q21 = gimple_assign_rhs2 (_a1);
11435 : 0 : _q21 = do_valueize (valueize, _q21);
11436 : 0 : if (integer_pow2p (_q21))
11437 : : {
11438 : 0 : if (integer_zerop (_p1))
11439 : : {
11440 : 0 : {
11441 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
11442 : 0 : if (gimple_simplify_223 (res_op, seq, valueize, type, captures, NE_EXPR, ROUND_MOD_EXPR))
11443 : 0 : return true;
11444 : : }
11445 : : }
11446 : : }
11447 : : break;
11448 : : }
11449 : 93064 : case TRUNC_MOD_EXPR:
11450 : 93064 : {
11451 : 93064 : tree _q20 = gimple_assign_rhs1 (_a1);
11452 : 93064 : _q20 = do_valueize (valueize, _q20);
11453 : 93064 : tree _q21 = gimple_assign_rhs2 (_a1);
11454 : 93064 : _q21 = do_valueize (valueize, _q21);
11455 : 93064 : if (integer_pow2p (_q21))
11456 : : {
11457 : 3693 : if (integer_zerop (_p1))
11458 : : {
11459 : 1385 : {
11460 : 1385 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
11461 : 1385 : if (gimple_simplify_223 (res_op, seq, valueize, type, captures, NE_EXPR, TRUNC_MOD_EXPR))
11462 : 572 : return true;
11463 : : }
11464 : : }
11465 : : }
11466 : : break;
11467 : : }
11468 : 11735 : case LSHIFT_EXPR:
11469 : 11735 : {
11470 : 11735 : tree _q20 = gimple_assign_rhs1 (_a1);
11471 : 11735 : _q20 = do_valueize (valueize, _q20);
11472 : 11735 : tree _q21 = gimple_assign_rhs2 (_a1);
11473 : 11735 : _q21 = do_valueize (valueize, _q21);
11474 : 11735 : if (gimple_zero_one_valued_p (_q20, valueize))
11475 : : {
11476 : 1184 : switch (TREE_CODE (_q21))
11477 : : {
11478 : 344 : case INTEGER_CST:
11479 : 344 : {
11480 : 344 : if (integer_zerop (_p1))
11481 : : {
11482 : 122 : {
11483 : 122 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
11484 : 122 : if (tree_fits_shwi_p (captures[1])
11485 : 122 : && tree_to_shwi (captures[1]) > 0
11486 : 244 : && tree_to_shwi (captures[1]) < TYPE_PRECISION (TREE_TYPE (captures[0]))
11487 : : )
11488 : : {
11489 : 122 : gimple_seq *lseq = seq;
11490 : 122 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2260;
11491 : 122 : {
11492 : 122 : res_op->set_op (NOP_EXPR, type, 1);
11493 : 122 : res_op->ops[0] = captures[0];
11494 : 122 : res_op->resimplify (lseq, valueize);
11495 : 122 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1127, __FILE__, __LINE__, true);
11496 : 122 : return true;
11497 : : }
11498 : 0 : next_after_fail2260:;
11499 : : }
11500 : : }
11501 : : }
11502 : : break;
11503 : : }
11504 : : default:;
11505 : : }
11506 : : }
11507 : : break;
11508 : : }
11509 : 102314 : case MULT_EXPR:
11510 : 102314 : {
11511 : 102314 : tree _q20 = gimple_assign_rhs1 (_a1);
11512 : 102314 : _q20 = do_valueize (valueize, _q20);
11513 : 102314 : tree _q21 = gimple_assign_rhs2 (_a1);
11514 : 102314 : _q21 = do_valueize (valueize, _q21);
11515 : 102314 : if (tree_swap_operands_p (_q20, _q21))
11516 : 1476 : std::swap (_q20, _q21);
11517 : 102314 : switch (TREE_CODE (_p1))
11518 : : {
11519 : 42510 : case SSA_NAME:
11520 : 42510 : if (gimple *_d2 = get_def (valueize, _p1))
11521 : : {
11522 : 34862 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
11523 : 47958 : switch (gimple_assign_rhs_code (_a2))
11524 : : {
11525 : 5025 : case MULT_EXPR:
11526 : 5025 : {
11527 : 5025 : tree _q50 = gimple_assign_rhs1 (_a2);
11528 : 5025 : _q50 = do_valueize (valueize, _q50);
11529 : 5025 : tree _q51 = gimple_assign_rhs2 (_a2);
11530 : 5025 : _q51 = do_valueize (valueize, _q51);
11531 : 5025 : if (tree_swap_operands_p (_q50, _q51))
11532 : 372 : std::swap (_q50, _q51);
11533 : 5025 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
11534 : : {
11535 : 2248 : {
11536 : 2248 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q50 };
11537 : 2248 : if (gimple_simplify_226 (res_op, seq, valueize, type, captures, NE_EXPR))
11538 : 183 : return true;
11539 : : }
11540 : : }
11541 : 4842 : if ((_q50 == _q21 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q21, 0) && types_match (_q50, _q21)))
11542 : : {
11543 : 198 : {
11544 : 198 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q51 };
11545 : 198 : if (gimple_simplify_226 (res_op, seq, valueize, type, captures, NE_EXPR))
11546 : 0 : return true;
11547 : : }
11548 : : }
11549 : 4842 : if ((_q51 == _q20 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q20, 0) && types_match (_q51, _q20)))
11550 : : {
11551 : 75 : {
11552 : 75 : tree captures[3] ATTRIBUTE_UNUSED = { _q21, _q20, _q50 };
11553 : 75 : if (gimple_simplify_226 (res_op, seq, valueize, type, captures, NE_EXPR))
11554 : 0 : return true;
11555 : : }
11556 : : }
11557 : 4842 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
11558 : : {
11559 : 726 : {
11560 : 726 : tree captures[3] ATTRIBUTE_UNUSED = { _q21, _q20, _q51 };
11561 : 726 : if (gimple_simplify_226 (res_op, seq, valueize, type, captures, NE_EXPR))
11562 : 0 : return true;
11563 : : }
11564 : : }
11565 : 102131 : break;
11566 : : }
11567 : : default:;
11568 : : }
11569 : : }
11570 : : break;
11571 : 102131 : default:;
11572 : : }
11573 : 102131 : switch (TREE_CODE (_q21))
11574 : : {
11575 : 69629 : case INTEGER_CST:
11576 : 69629 : {
11577 : 69629 : switch (TREE_CODE (_p1))
11578 : : {
11579 : 31407 : case SSA_NAME:
11580 : 31407 : if (gimple *_d2 = get_def (valueize, _p1))
11581 : : {
11582 : 24203 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
11583 : 32353 : switch (gimple_assign_rhs_code (_a2))
11584 : : {
11585 : 2688 : case MULT_EXPR:
11586 : 2688 : {
11587 : 2688 : tree _q50 = gimple_assign_rhs1 (_a2);
11588 : 2688 : _q50 = do_valueize (valueize, _q50);
11589 : 2688 : tree _q51 = gimple_assign_rhs2 (_a2);
11590 : 2688 : _q51 = do_valueize (valueize, _q51);
11591 : 2688 : if (tree_swap_operands_p (_q50, _q51))
11592 : 290 : std::swap (_q50, _q51);
11593 : 2688 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
11594 : : {
11595 : 1040 : {
11596 : 1040 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q50 };
11597 : 1040 : if (gimple_simplify_227 (res_op, seq, valueize, type, captures, NE_EXPR))
11598 : 6 : return true;
11599 : : }
11600 : : }
11601 : 128152792 : break;
11602 : : }
11603 : : default:;
11604 : : }
11605 : : }
11606 : : break;
11607 : : default:;
11608 : : }
11609 : : break;
11610 : : }
11611 : : default:;
11612 : : }
11613 : 128152792 : break;
11614 : : }
11615 : 2396326 : CASE_CONVERT:
11616 : 2396326 : {
11617 : 2396326 : tree _q20 = gimple_assign_rhs1 (_a1);
11618 : 2396326 : _q20 = do_valueize (valueize, _q20);
11619 : 2396326 : switch (TREE_CODE (_q20))
11620 : : {
11621 : 2385042 : case SSA_NAME:
11622 : 2385042 : if (gimple *_d2 = get_def (valueize, _q20))
11623 : : {
11624 : 2348162 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
11625 : 2731762 : switch (gimple_assign_rhs_code (_a2))
11626 : : {
11627 : 74673 : case EXACT_DIV_EXPR:
11628 : 74673 : {
11629 : 74673 : tree _q30 = gimple_assign_rhs1 (_a2);
11630 : 74673 : _q30 = do_valueize (valueize, _q30);
11631 : 74673 : tree _q31 = gimple_assign_rhs2 (_a2);
11632 : 74673 : _q31 = do_valueize (valueize, _q31);
11633 : 74673 : switch (TREE_CODE (_q31))
11634 : : {
11635 : 74673 : case INTEGER_CST:
11636 : 74673 : {
11637 : 74673 : switch (TREE_CODE (_p1))
11638 : : {
11639 : 4664 : case SSA_NAME:
11640 : 4664 : if (gimple *_d3 = get_def (valueize, _p1))
11641 : : {
11642 : 4551 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
11643 : 8219 : switch (gimple_assign_rhs_code (_a3))
11644 : : {
11645 : 270 : CASE_CONVERT:
11646 : 270 : {
11647 : 270 : tree _q60 = gimple_assign_rhs1 (_a3);
11648 : 270 : _q60 = do_valueize (valueize, _q60);
11649 : 270 : switch (TREE_CODE (_q60))
11650 : : {
11651 : 270 : case SSA_NAME:
11652 : 270 : if (gimple *_d4 = get_def (valueize, _q60))
11653 : : {
11654 : 270 : if (gassign *_a4 = dyn_cast <gassign *> (_d4))
11655 : 270 : switch (gimple_assign_rhs_code (_a4))
11656 : : {
11657 : 270 : case EXACT_DIV_EXPR:
11658 : 270 : {
11659 : 270 : tree _q70 = gimple_assign_rhs1 (_a4);
11660 : 270 : _q70 = do_valueize (valueize, _q70);
11661 : 270 : tree _q71 = gimple_assign_rhs2 (_a4);
11662 : 270 : _q71 = do_valueize (valueize, _q71);
11663 : 270 : if ((_q71 == _q31 && ! TREE_SIDE_EFFECTS (_q71)) || (operand_equal_p (_q71, _q31, 0) && types_match (_q71, _q31)))
11664 : : {
11665 : 270 : {
11666 : 270 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q30, _q31, _q70 };
11667 : 270 : if (gimple_simplify_228 (res_op, seq, valueize, type, captures, NE_EXPR))
11668 : 46 : return true;
11669 : : }
11670 : : }
11671 : : break;
11672 : : }
11673 : : default:;
11674 : : }
11675 : : }
11676 : : break;
11677 : : default:;
11678 : : }
11679 : : break;
11680 : : }
11681 : : default:;
11682 : : }
11683 : : }
11684 : : break;
11685 : : default:;
11686 : : }
11687 : : break;
11688 : : }
11689 : : default:;
11690 : : }
11691 : : break;
11692 : : }
11693 : : default:;
11694 : : }
11695 : : }
11696 : : break;
11697 : 2396280 : default:;
11698 : : }
11699 : 2396280 : switch (TREE_CODE (_p1))
11700 : : {
11701 : 592244 : case SSA_NAME:
11702 : 592244 : if (gimple *_d2 = get_def (valueize, _p1))
11703 : : {
11704 : 536890 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
11705 : 637257 : switch (gimple_assign_rhs_code (_a2))
11706 : : {
11707 : 99360 : case PLUS_EXPR:
11708 : 99360 : {
11709 : 99360 : tree _q40 = gimple_assign_rhs1 (_a2);
11710 : 99360 : _q40 = do_valueize (valueize, _q40);
11711 : 99360 : tree _q41 = gimple_assign_rhs2 (_a2);
11712 : 99360 : _q41 = do_valueize (valueize, _q41);
11713 : 99360 : if (tree_swap_operands_p (_q40, _q41))
11714 : 770 : std::swap (_q40, _q41);
11715 : 99360 : switch (TREE_CODE (_q41))
11716 : : {
11717 : 9267 : case SSA_NAME:
11718 : 9267 : if (gimple *_d3 = get_def (valueize, _q41))
11719 : : {
11720 : 8767 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
11721 : 7392 : switch (gimple_assign_rhs_code (_a3))
11722 : : {
11723 : 5234 : CASE_CONVERT:
11724 : 5234 : {
11725 : 5234 : tree _q60 = gimple_assign_rhs1 (_a3);
11726 : 5234 : _q60 = do_valueize (valueize, _q60);
11727 : 5234 : if ((_q60 == _q20 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _q20, 0) && types_match (_q60, _q20)))
11728 : : {
11729 : 19 : {
11730 : 19 : tree captures[4] ATTRIBUTE_UNUSED = { _p1, _p1, _q40, _q20 };
11731 : 19 : if (gimple_simplify_230 (res_op, seq, valueize, type, captures, NE_EXPR))
11732 : 1 : return true;
11733 : : }
11734 : : }
11735 : : break;
11736 : : }
11737 : : default:;
11738 : : }
11739 : : }
11740 : : break;
11741 : 99359 : default:;
11742 : : }
11743 : 99359 : switch (TREE_CODE (_q40))
11744 : : {
11745 : 99359 : case SSA_NAME:
11746 : 99359 : if (gimple *_d3 = get_def (valueize, _q40))
11747 : : {
11748 : 96565 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
11749 : 42897 : switch (gimple_assign_rhs_code (_a3))
11750 : : {
11751 : 30156 : CASE_CONVERT:
11752 : 30156 : {
11753 : 30156 : tree _q50 = gimple_assign_rhs1 (_a3);
11754 : 30156 : _q50 = do_valueize (valueize, _q50);
11755 : 30156 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
11756 : : {
11757 : 314 : {
11758 : 314 : tree captures[4] ATTRIBUTE_UNUSED = { _p1, _p1, _q41, _q20 };
11759 : 314 : if (gimple_simplify_230 (res_op, seq, valueize, type, captures, NE_EXPR))
11760 : 70 : return true;
11761 : : }
11762 : : }
11763 : : break;
11764 : : }
11765 : : default:;
11766 : : }
11767 : : }
11768 : : break;
11769 : 99289 : default:;
11770 : : }
11771 : 99289 : if ((_q41 == _q20 && ! TREE_SIDE_EFFECTS (_q41)) || (operand_equal_p (_q41, _q20, 0) && types_match (_q41, _q20)))
11772 : : {
11773 : 0 : {
11774 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p1, _p1, _q40, _q20 };
11775 : 0 : if (gimple_simplify_230 (res_op, seq, valueize, type, captures, NE_EXPR))
11776 : 0 : return true;
11777 : : }
11778 : : }
11779 : 99289 : if ((_q40 == _q20 && ! TREE_SIDE_EFFECTS (_q40)) || (operand_equal_p (_q40, _q20, 0) && types_match (_q40, _q20)))
11780 : : {
11781 : 0 : {
11782 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p1, _p1, _q41, _q20 };
11783 : 0 : if (gimple_simplify_230 (res_op, seq, valueize, type, captures, NE_EXPR))
11784 : 0 : return true;
11785 : : }
11786 : : }
11787 : 2396209 : break;
11788 : : }
11789 : : default:;
11790 : : }
11791 : : }
11792 : : break;
11793 : 2396209 : default:;
11794 : : }
11795 : 2396209 : {
11796 : 2396209 : tree _p1_pops[1];
11797 : 2396209 : if (gimple_nop_convert (_p1, _p1_pops, valueize))
11798 : : {
11799 : 29598 : tree _q40 = _p1_pops[0];
11800 : 29598 : switch (TREE_CODE (_q40))
11801 : : {
11802 : 26284 : case SSA_NAME:
11803 : 26284 : if (gimple *_d2 = get_def (valueize, _q40))
11804 : : {
11805 : 25694 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
11806 : 33787 : switch (gimple_assign_rhs_code (_a2))
11807 : : {
11808 : 7048 : case PLUS_EXPR:
11809 : 7048 : {
11810 : 7048 : tree _q50 = gimple_assign_rhs1 (_a2);
11811 : 7048 : _q50 = do_valueize (valueize, _q50);
11812 : 7048 : tree _q51 = gimple_assign_rhs2 (_a2);
11813 : 7048 : _q51 = do_valueize (valueize, _q51);
11814 : 7048 : if (tree_swap_operands_p (_q50, _q51))
11815 : 201 : std::swap (_q50, _q51);
11816 : 7048 : switch (TREE_CODE (_q51))
11817 : : {
11818 : 3404 : case SSA_NAME:
11819 : 3404 : if (gimple *_d3 = get_def (valueize, _q51))
11820 : : {
11821 : 3394 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
11822 : 3341 : switch (gimple_assign_rhs_code (_a3))
11823 : : {
11824 : 2387 : CASE_CONVERT:
11825 : 2387 : {
11826 : 2387 : tree _q70 = gimple_assign_rhs1 (_a3);
11827 : 2387 : _q70 = do_valueize (valueize, _q70);
11828 : 2387 : if ((_q70 == _q20 && ! TREE_SIDE_EFFECTS (_q70)) || (operand_equal_p (_q70, _q20, 0) && types_match (_q70, _q20)))
11829 : : {
11830 : 0 : {
11831 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p1, _q40, _q50, _q20 };
11832 : 0 : if (gimple_simplify_229 (res_op, seq, valueize, type, captures, NE_EXPR))
11833 : 0 : return true;
11834 : : }
11835 : : }
11836 : : break;
11837 : : }
11838 : : default:;
11839 : : }
11840 : : }
11841 : : break;
11842 : 7048 : default:;
11843 : : }
11844 : 7048 : switch (TREE_CODE (_q50))
11845 : : {
11846 : 7048 : case SSA_NAME:
11847 : 7048 : if (gimple *_d3 = get_def (valueize, _q50))
11848 : : {
11849 : 6721 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
11850 : 5644 : switch (gimple_assign_rhs_code (_a3))
11851 : : {
11852 : 2278 : CASE_CONVERT:
11853 : 2278 : {
11854 : 2278 : tree _q60 = gimple_assign_rhs1 (_a3);
11855 : 2278 : _q60 = do_valueize (valueize, _q60);
11856 : 2278 : if ((_q60 == _q20 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _q20, 0) && types_match (_q60, _q20)))
11857 : : {
11858 : 27 : {
11859 : 27 : tree captures[4] ATTRIBUTE_UNUSED = { _p1, _q40, _q51, _q20 };
11860 : 27 : if (gimple_simplify_229 (res_op, seq, valueize, type, captures, NE_EXPR))
11861 : 0 : return true;
11862 : : }
11863 : : }
11864 : : break;
11865 : : }
11866 : : default:;
11867 : : }
11868 : : }
11869 : : break;
11870 : 7048 : default:;
11871 : : }
11872 : 7048 : if ((_q51 == _q20 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q20, 0) && types_match (_q51, _q20)))
11873 : : {
11874 : 16 : {
11875 : 16 : tree captures[4] ATTRIBUTE_UNUSED = { _p1, _q40, _q50, _q20 };
11876 : 16 : if (gimple_simplify_229 (res_op, seq, valueize, type, captures, NE_EXPR))
11877 : 16 : return true;
11878 : : }
11879 : : }
11880 : 7032 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
11881 : : {
11882 : 13 : {
11883 : 13 : tree captures[4] ATTRIBUTE_UNUSED = { _p1, _q40, _q51, _q20 };
11884 : 13 : if (gimple_simplify_229 (res_op, seq, valueize, type, captures, NE_EXPR))
11885 : 13 : return true;
11886 : : }
11887 : : }
11888 : 2396180 : break;
11889 : : }
11890 : : default:;
11891 : : }
11892 : : }
11893 : : break;
11894 : : default:;
11895 : : }
11896 : : }
11897 : : }
11898 : 2396180 : break;
11899 : : }
11900 : 26646 : case EXACT_DIV_EXPR:
11901 : 26646 : {
11902 : 26646 : tree _q20 = gimple_assign_rhs1 (_a1);
11903 : 26646 : _q20 = do_valueize (valueize, _q20);
11904 : 26646 : tree _q21 = gimple_assign_rhs2 (_a1);
11905 : 26646 : _q21 = do_valueize (valueize, _q21);
11906 : 26646 : switch (TREE_CODE (_q21))
11907 : : {
11908 : 26646 : case INTEGER_CST:
11909 : 26646 : {
11910 : 26646 : switch (TREE_CODE (_p1))
11911 : : {
11912 : 6958 : case SSA_NAME:
11913 : 6958 : if (gimple *_d2 = get_def (valueize, _p1))
11914 : : {
11915 : 5090 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
11916 : 2392 : switch (gimple_assign_rhs_code (_a2))
11917 : : {
11918 : 1542 : case EXACT_DIV_EXPR:
11919 : 1542 : {
11920 : 1542 : tree _q50 = gimple_assign_rhs1 (_a2);
11921 : 1542 : _q50 = do_valueize (valueize, _q50);
11922 : 1542 : tree _q51 = gimple_assign_rhs2 (_a2);
11923 : 1542 : _q51 = do_valueize (valueize, _q51);
11924 : 1542 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
11925 : : {
11926 : 1502 : {
11927 : 1502 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q50 };
11928 : 1502 : if (gimple_simplify_228 (res_op, seq, valueize, type, captures, NE_EXPR))
11929 : 1502 : return true;
11930 : : }
11931 : : }
11932 : : break;
11933 : : }
11934 : : default:;
11935 : : }
11936 : : }
11937 : : break;
11938 : : default:;
11939 : : }
11940 : : break;
11941 : : }
11942 : : default:;
11943 : : }
11944 : : break;
11945 : : }
11946 : 20646 : case TRUNC_DIV_EXPR:
11947 : 20646 : {
11948 : 20646 : tree _q20 = gimple_assign_rhs1 (_a1);
11949 : 20646 : _q20 = do_valueize (valueize, _q20);
11950 : 20646 : tree _q21 = gimple_assign_rhs2 (_a1);
11951 : 20646 : _q21 = do_valueize (valueize, _q21);
11952 : 20646 : switch (TREE_CODE (_q21))
11953 : : {
11954 : 11383 : case INTEGER_CST:
11955 : 11383 : {
11956 : 11383 : switch (TREE_CODE (_p1))
11957 : : {
11958 : 9503 : case INTEGER_CST:
11959 : 9503 : {
11960 : 9503 : {
11961 : 9503 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _p1 };
11962 : 9503 : if (gimple_simplify_231 (res_op, seq, valueize, type, captures, NE_EXPR))
11963 : 587 : return true;
11964 : : }
11965 : 8916 : break;
11966 : : }
11967 : : default:;
11968 : : }
11969 : : break;
11970 : : }
11971 : : default:;
11972 : : }
11973 : : break;
11974 : : }
11975 : 1596542 : case PLUS_EXPR:
11976 : 1596542 : {
11977 : 1596542 : tree _q20 = gimple_assign_rhs1 (_a1);
11978 : 1596542 : _q20 = do_valueize (valueize, _q20);
11979 : 1596542 : tree _q21 = gimple_assign_rhs2 (_a1);
11980 : 1596542 : _q21 = do_valueize (valueize, _q21);
11981 : 1596542 : if (tree_swap_operands_p (_q20, _q21))
11982 : 9090 : std::swap (_q20, _q21);
11983 : 1596542 : switch (TREE_CODE (_p1))
11984 : : {
11985 : 531946 : case SSA_NAME:
11986 : 531946 : if (gimple *_d2 = get_def (valueize, _p1))
11987 : : {
11988 : 451068 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
11989 : 550796 : switch (gimple_assign_rhs_code (_a2))
11990 : : {
11991 : 219456 : case PLUS_EXPR:
11992 : 219456 : {
11993 : 219456 : tree _q50 = gimple_assign_rhs1 (_a2);
11994 : 219456 : _q50 = do_valueize (valueize, _q50);
11995 : 219456 : tree _q51 = gimple_assign_rhs2 (_a2);
11996 : 219456 : _q51 = do_valueize (valueize, _q51);
11997 : 219456 : if (tree_swap_operands_p (_q50, _q51))
11998 : 1072 : std::swap (_q50, _q51);
11999 : 219456 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
12000 : : {
12001 : 12043 : {
12002 : 12043 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q50 };
12003 : 24086 : if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
12004 : 24031 : && (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[0]))
12005 : 10373 : || TYPE_OVERFLOW_WRAPS (TREE_TYPE (captures[0])))
12006 : : )
12007 : : {
12008 : 11988 : gimple_seq *lseq = seq;
12009 : 11988 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2261;
12010 : 11988 : {
12011 : 11988 : res_op->set_op (NE_EXPR, type, 2);
12012 : 11988 : res_op->ops[0] = captures[0];
12013 : 11988 : res_op->ops[1] = captures[2];
12014 : 11988 : res_op->resimplify (lseq, valueize);
12015 : 11988 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1065, __FILE__, __LINE__, true);
12016 : 11988 : return true;
12017 : : }
12018 : 0 : next_after_fail2261:;
12019 : : }
12020 : : }
12021 : : }
12022 : 207468 : if ((_q50 == _q21 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q21, 0) && types_match (_q50, _q21)))
12023 : : {
12024 : 103 : {
12025 : 103 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q51 };
12026 : 206 : if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
12027 : 206 : && (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[0]))
12028 : 21 : || TYPE_OVERFLOW_WRAPS (TREE_TYPE (captures[0])))
12029 : : )
12030 : : {
12031 : 103 : gimple_seq *lseq = seq;
12032 : 103 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2262;
12033 : 103 : {
12034 : 103 : res_op->set_op (NE_EXPR, type, 2);
12035 : 103 : res_op->ops[0] = captures[0];
12036 : 103 : res_op->ops[1] = captures[2];
12037 : 103 : res_op->resimplify (lseq, valueize);
12038 : 103 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1065, __FILE__, __LINE__, true);
12039 : 103 : return true;
12040 : : }
12041 : 0 : next_after_fail2262:;
12042 : : }
12043 : : }
12044 : : }
12045 : 207365 : if ((_q51 == _q20 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q20, 0) && types_match (_q51, _q20)))
12046 : : {
12047 : 3 : {
12048 : 3 : tree captures[3] ATTRIBUTE_UNUSED = { _q21, _q20, _q50 };
12049 : 6 : if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
12050 : 6 : && (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[0]))
12051 : 3 : || TYPE_OVERFLOW_WRAPS (TREE_TYPE (captures[0])))
12052 : : )
12053 : : {
12054 : 3 : gimple_seq *lseq = seq;
12055 : 3 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2263;
12056 : 3 : {
12057 : 3 : res_op->set_op (NE_EXPR, type, 2);
12058 : 3 : res_op->ops[0] = captures[0];
12059 : 3 : res_op->ops[1] = captures[2];
12060 : 3 : res_op->resimplify (lseq, valueize);
12061 : 3 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1065, __FILE__, __LINE__, true);
12062 : 3 : return true;
12063 : : }
12064 : 0 : next_after_fail2263:;
12065 : : }
12066 : : }
12067 : : }
12068 : 207362 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
12069 : : {
12070 : 257 : {
12071 : 257 : tree captures[3] ATTRIBUTE_UNUSED = { _q21, _q20, _q51 };
12072 : 514 : if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
12073 : 459 : && (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[0]))
12074 : 167 : || TYPE_OVERFLOW_WRAPS (TREE_TYPE (captures[0])))
12075 : : )
12076 : : {
12077 : 202 : gimple_seq *lseq = seq;
12078 : 202 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2264;
12079 : 202 : {
12080 : 202 : res_op->set_op (NE_EXPR, type, 2);
12081 : 202 : res_op->ops[0] = captures[0];
12082 : 202 : res_op->ops[1] = captures[2];
12083 : 202 : res_op->resimplify (lseq, valueize);
12084 : 202 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1065, __FILE__, __LINE__, true);
12085 : 202 : return true;
12086 : : }
12087 : 0 : next_after_fail2264:;
12088 : : }
12089 : : }
12090 : : }
12091 : 1584246 : break;
12092 : : }
12093 : : default:;
12094 : : }
12095 : : }
12096 : : break;
12097 : 1584246 : default:;
12098 : : }
12099 : 1584246 : switch (TREE_CODE (_q21))
12100 : : {
12101 : 188784 : case SSA_NAME:
12102 : 188784 : if (gimple *_d2 = get_def (valueize, _q21))
12103 : : {
12104 : 181927 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
12105 : 185084 : switch (gimple_assign_rhs_code (_a2))
12106 : : {
12107 : 42922 : CASE_CONVERT:
12108 : 42922 : {
12109 : 42922 : tree _q40 = gimple_assign_rhs1 (_a2);
12110 : 42922 : _q40 = do_valueize (valueize, _q40);
12111 : 42922 : switch (TREE_CODE (_p1))
12112 : : {
12113 : 17463 : case SSA_NAME:
12114 : 17463 : if (gimple *_d3 = get_def (valueize, _p1))
12115 : : {
12116 : 15166 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
12117 : 16252 : switch (gimple_assign_rhs_code (_a3))
12118 : : {
12119 : 1974 : CASE_CONVERT:
12120 : 1974 : {
12121 : 1974 : tree _q60 = gimple_assign_rhs1 (_a3);
12122 : 1974 : _q60 = do_valueize (valueize, _q60);
12123 : 1974 : if ((_q60 == _q40 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _q40, 0) && types_match (_q60, _q40)))
12124 : : {
12125 : 10 : {
12126 : 10 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _p0, _q20, _q40 };
12127 : 10 : if (gimple_simplify_230 (res_op, seq, valueize, type, captures, NE_EXPR))
12128 : 8 : return true;
12129 : : }
12130 : : }
12131 : : break;
12132 : : }
12133 : : default:;
12134 : : }
12135 : : }
12136 : : break;
12137 : : default:;
12138 : : }
12139 : : break;
12140 : : }
12141 : : default:;
12142 : : }
12143 : : }
12144 : : break;
12145 : 1584238 : default:;
12146 : : }
12147 : 1584238 : switch (TREE_CODE (_q20))
12148 : : {
12149 : 1584235 : case SSA_NAME:
12150 : 1584235 : if (gimple *_d2 = get_def (valueize, _q20))
12151 : : {
12152 : 1526205 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
12153 : 631957 : switch (gimple_assign_rhs_code (_a2))
12154 : : {
12155 : 168946 : CASE_CONVERT:
12156 : 168946 : {
12157 : 168946 : tree _q30 = gimple_assign_rhs1 (_a2);
12158 : 168946 : _q30 = do_valueize (valueize, _q30);
12159 : 168946 : switch (TREE_CODE (_p1))
12160 : : {
12161 : 120240 : case SSA_NAME:
12162 : 120240 : if (gimple *_d3 = get_def (valueize, _p1))
12163 : : {
12164 : 71706 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
12165 : 70546 : switch (gimple_assign_rhs_code (_a3))
12166 : : {
12167 : 3777 : CASE_CONVERT:
12168 : 3777 : {
12169 : 3777 : tree _q60 = gimple_assign_rhs1 (_a3);
12170 : 3777 : _q60 = do_valueize (valueize, _q60);
12171 : 3777 : if ((_q60 == _q30 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _q30, 0) && types_match (_q60, _q30)))
12172 : : {
12173 : 4 : {
12174 : 4 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _p0, _q21, _q30 };
12175 : 4 : if (gimple_simplify_230 (res_op, seq, valueize, type, captures, NE_EXPR))
12176 : 4 : return true;
12177 : : }
12178 : : }
12179 : : break;
12180 : : }
12181 : : default:;
12182 : : }
12183 : : }
12184 : : break;
12185 : 168942 : default:;
12186 : : }
12187 : 168942 : if ((_p1 == _q30 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q30, 0) && types_match (_p1, _q30)))
12188 : : {
12189 : 0 : {
12190 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _p0, _q21, _q30 };
12191 : 0 : if (gimple_simplify_230 (res_op, seq, valueize, type, captures, NE_EXPR))
12192 : 0 : return true;
12193 : : }
12194 : : }
12195 : : break;
12196 : : }
12197 : : default:;
12198 : : }
12199 : : }
12200 : : break;
12201 : 1584234 : default:;
12202 : : }
12203 : 1584234 : switch (TREE_CODE (_q21))
12204 : : {
12205 : 188772 : case SSA_NAME:
12206 : 188772 : if (gimple *_d2 = get_def (valueize, _q21))
12207 : : {
12208 : 181915 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
12209 : 185072 : switch (gimple_assign_rhs_code (_a2))
12210 : : {
12211 : 42910 : CASE_CONVERT:
12212 : 42910 : {
12213 : 42910 : tree _q40 = gimple_assign_rhs1 (_a2);
12214 : 42910 : _q40 = do_valueize (valueize, _q40);
12215 : 42910 : if ((_p1 == _q40 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q40, 0) && types_match (_p1, _q40)))
12216 : : {
12217 : 0 : {
12218 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _p0, _q20, _q40 };
12219 : 0 : if (gimple_simplify_230 (res_op, seq, valueize, type, captures, NE_EXPR))
12220 : 0 : return true;
12221 : : }
12222 : : }
12223 : : break;
12224 : : }
12225 : : default:;
12226 : : }
12227 : : }
12228 : : break;
12229 : 1584234 : default:;
12230 : : }
12231 : 1584234 : switch (TREE_CODE (_p1))
12232 : : {
12233 : 519638 : case SSA_NAME:
12234 : 519638 : if (gimple *_d2 = get_def (valueize, _p1))
12235 : : {
12236 : 438760 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
12237 : 538488 : switch (gimple_assign_rhs_code (_a2))
12238 : : {
12239 : 54642 : CASE_CONVERT:
12240 : 54642 : {
12241 : 54642 : tree _q50 = gimple_assign_rhs1 (_a2);
12242 : 54642 : _q50 = do_valueize (valueize, _q50);
12243 : 54642 : if ((_q50 == _q21 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q21, 0) && types_match (_q50, _q21)))
12244 : : {
12245 : 0 : {
12246 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _p0, _q20, _q21 };
12247 : 0 : if (gimple_simplify_230 (res_op, seq, valueize, type, captures, NE_EXPR))
12248 : 0 : return true;
12249 : : }
12250 : : }
12251 : 54642 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
12252 : : {
12253 : 0 : {
12254 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _p0, _q21, _q20 };
12255 : 0 : if (gimple_simplify_230 (res_op, seq, valueize, type, captures, NE_EXPR))
12256 : 0 : return true;
12257 : : }
12258 : : }
12259 : : break;
12260 : : }
12261 : : default:;
12262 : : }
12263 : : }
12264 : : break;
12265 : 1584234 : default:;
12266 : : }
12267 : 1584234 : if ((_p1 == _q21 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q21, 0) && types_match (_p1, _q21)))
12268 : : {
12269 : 55954 : {
12270 : 55954 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _p0, _q20, _q21 };
12271 : 55954 : if (gimple_simplify_230 (res_op, seq, valueize, type, captures, NE_EXPR))
12272 : 3904 : return true;
12273 : : }
12274 : : }
12275 : 1580330 : if ((_p1 == _q20 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q20, 0) && types_match (_p1, _q20)))
12276 : : {
12277 : 360 : {
12278 : 360 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _p0, _q21, _q20 };
12279 : 360 : if (gimple_simplify_230 (res_op, seq, valueize, type, captures, NE_EXPR))
12280 : 276 : return true;
12281 : : }
12282 : : }
12283 : 128152792 : break;
12284 : : }
12285 : 286432 : case POINTER_PLUS_EXPR:
12286 : 286432 : {
12287 : 286432 : tree _q20 = gimple_assign_rhs1 (_a1);
12288 : 286432 : _q20 = do_valueize (valueize, _q20);
12289 : 286432 : tree _q21 = gimple_assign_rhs2 (_a1);
12290 : 286432 : _q21 = do_valueize (valueize, _q21);
12291 : 286432 : switch (TREE_CODE (_p1))
12292 : : {
12293 : 211004 : case SSA_NAME:
12294 : 211004 : if (gimple *_d2 = get_def (valueize, _p1))
12295 : : {
12296 : 205651 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
12297 : 176518 : switch (gimple_assign_rhs_code (_a2))
12298 : : {
12299 : 56070 : case POINTER_PLUS_EXPR:
12300 : 56070 : {
12301 : 56070 : tree _q50 = gimple_assign_rhs1 (_a2);
12302 : 56070 : _q50 = do_valueize (valueize, _q50);
12303 : 56070 : tree _q51 = gimple_assign_rhs2 (_a2);
12304 : 56070 : _q51 = do_valueize (valueize, _q51);
12305 : 56070 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
12306 : : {
12307 : 5951 : {
12308 : 5951 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q51 };
12309 : 5951 : if (gimple_simplify_232 (res_op, seq, valueize, type, captures, NE_EXPR))
12310 : 5951 : return true;
12311 : : }
12312 : : }
12313 : : break;
12314 : : }
12315 : : default:;
12316 : : }
12317 : : }
12318 : : break;
12319 : 280481 : default:;
12320 : : }
12321 : 280481 : switch (TREE_CODE (_q20))
12322 : : {
12323 : 265161 : case SSA_NAME:
12324 : 265161 : if (gimple *_d2 = get_def (valueize, _q20))
12325 : : {
12326 : 248690 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
12327 : 203052 : switch (gimple_assign_rhs_code (_a2))
12328 : : {
12329 : 676 : CASE_CONVERT:
12330 : 676 : {
12331 : 676 : tree _q30 = gimple_assign_rhs1 (_a2);
12332 : 676 : _q30 = do_valueize (valueize, _q30);
12333 : 676 : switch (TREE_CODE (_p1))
12334 : : {
12335 : 667 : case SSA_NAME:
12336 : 667 : if (gimple *_d3 = get_def (valueize, _p1))
12337 : : {
12338 : 638 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
12339 : 651 : switch (gimple_assign_rhs_code (_a3))
12340 : : {
12341 : 29 : CASE_CONVERT:
12342 : 29 : {
12343 : 29 : tree _q60 = gimple_assign_rhs1 (_a3);
12344 : 29 : _q60 = do_valueize (valueize, _q60);
12345 : 29 : if ((_q60 == _q30 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _q30, 0) && types_match (_q60, _q30)))
12346 : : {
12347 : 2 : {
12348 : 2 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _p0, _q30, _q21 };
12349 : 2 : if (gimple_simplify_233 (res_op, seq, valueize, type, captures, NE_EXPR))
12350 : 2 : return true;
12351 : : }
12352 : : }
12353 : : break;
12354 : : }
12355 : : default:;
12356 : : }
12357 : : }
12358 : : break;
12359 : 674 : default:;
12360 : : }
12361 : 674 : if ((_p1 == _q30 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q30, 0) && types_match (_p1, _q30)))
12362 : : {
12363 : 0 : {
12364 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _p0, _q30, _q21 };
12365 : 0 : if (gimple_simplify_233 (res_op, seq, valueize, type, captures, NE_EXPR))
12366 : 0 : return true;
12367 : : }
12368 : : }
12369 : : break;
12370 : : }
12371 : : default:;
12372 : : }
12373 : : }
12374 : : break;
12375 : 280479 : default:;
12376 : : }
12377 : 280479 : switch (TREE_CODE (_p1))
12378 : : {
12379 : 205051 : case SSA_NAME:
12380 : 205051 : if (gimple *_d2 = get_def (valueize, _p1))
12381 : : {
12382 : 199698 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
12383 : 170565 : switch (gimple_assign_rhs_code (_a2))
12384 : : {
12385 : 3872 : CASE_CONVERT:
12386 : 3872 : {
12387 : 3872 : tree _q50 = gimple_assign_rhs1 (_a2);
12388 : 3872 : _q50 = do_valueize (valueize, _q50);
12389 : 3872 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
12390 : : {
12391 : 0 : {
12392 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _p0, _q20, _q21 };
12393 : 0 : if (gimple_simplify_233 (res_op, seq, valueize, type, captures, NE_EXPR))
12394 : 0 : return true;
12395 : : }
12396 : : }
12397 : : break;
12398 : : }
12399 : : default:;
12400 : : }
12401 : : }
12402 : : break;
12403 : 280479 : default:;
12404 : : }
12405 : 280479 : if ((_p1 == _q20 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q20, 0) && types_match (_p1, _q20)))
12406 : : {
12407 : 21669 : {
12408 : 21669 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _p0, _q20, _q21 };
12409 : 21669 : if (gimple_simplify_233 (res_op, seq, valueize, type, captures, NE_EXPR))
12410 : 4757 : return true;
12411 : : }
12412 : : }
12413 : : break;
12414 : : }
12415 : 211991 : case MINUS_EXPR:
12416 : 211991 : {
12417 : 211991 : tree _q20 = gimple_assign_rhs1 (_a1);
12418 : 211991 : _q20 = do_valueize (valueize, _q20);
12419 : 211991 : tree _q21 = gimple_assign_rhs2 (_a1);
12420 : 211991 : _q21 = do_valueize (valueize, _q21);
12421 : 211991 : switch (TREE_CODE (_p1))
12422 : : {
12423 : 67328 : case SSA_NAME:
12424 : 67328 : if (gimple *_d2 = get_def (valueize, _p1))
12425 : : {
12426 : 62417 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
12427 : 62147 : switch (gimple_assign_rhs_code (_a2))
12428 : : {
12429 : 28067 : case MINUS_EXPR:
12430 : 28067 : {
12431 : 28067 : tree _q50 = gimple_assign_rhs1 (_a2);
12432 : 28067 : _q50 = do_valueize (valueize, _q50);
12433 : 28067 : tree _q51 = gimple_assign_rhs2 (_a2);
12434 : 28067 : _q51 = do_valueize (valueize, _q51);
12435 : 28067 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
12436 : : {
12437 : 755 : {
12438 : 755 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q50 };
12439 : 1510 : if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (captures[0]))
12440 : 984 : && (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[0]))
12441 : 202 : || TYPE_OVERFLOW_WRAPS (TREE_TYPE (captures[0])))
12442 : : )
12443 : : {
12444 : 229 : gimple_seq *lseq = seq;
12445 : 229 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2265;
12446 : 229 : {
12447 : 229 : res_op->set_op (NE_EXPR, type, 2);
12448 : 229 : res_op->ops[0] = captures[0];
12449 : 229 : res_op->ops[1] = captures[2];
12450 : 229 : res_op->resimplify (lseq, valueize);
12451 : 229 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1066, __FILE__, __LINE__, true);
12452 : 229 : return true;
12453 : : }
12454 : 0 : next_after_fail2265:;
12455 : : }
12456 : : }
12457 : : }
12458 : 27838 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
12459 : : {
12460 : 519 : {
12461 : 519 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q51 };
12462 : 1038 : if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
12463 : 523 : && (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[1]))
12464 : 0 : || TYPE_OVERFLOW_WRAPS (TREE_TYPE (captures[1])))
12465 : : )
12466 : : {
12467 : 4 : gimple_seq *lseq = seq;
12468 : 4 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2266;
12469 : 4 : {
12470 : 4 : res_op->set_op (NE_EXPR, type, 2);
12471 : 4 : res_op->ops[0] = captures[2];
12472 : 4 : res_op->ops[1] = captures[1];
12473 : 4 : res_op->resimplify (lseq, valueize);
12474 : 4 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1067, __FILE__, __LINE__, true);
12475 : 4 : return true;
12476 : : }
12477 : 0 : next_after_fail2266:;
12478 : : }
12479 : : }
12480 : : }
12481 : : break;
12482 : : }
12483 : : default:;
12484 : : }
12485 : : }
12486 : : break;
12487 : 211758 : default:;
12488 : : }
12489 : 211758 : if ((_p1 == _q20 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q20, 0) && types_match (_p1, _q20)))
12490 : : {
12491 : 2411 : {
12492 : 2411 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _p0, _q21 };
12493 : 2411 : if (gimple_simplify_234 (res_op, seq, valueize, type, captures, NE_EXPR))
12494 : 93 : return true;
12495 : : }
12496 : : }
12497 : : break;
12498 : : }
12499 : 102301 : case POINTER_DIFF_EXPR:
12500 : 102301 : {
12501 : 102301 : tree _q20 = gimple_assign_rhs1 (_a1);
12502 : 102301 : _q20 = do_valueize (valueize, _q20);
12503 : 102301 : tree _q21 = gimple_assign_rhs2 (_a1);
12504 : 102301 : _q21 = do_valueize (valueize, _q21);
12505 : 102301 : switch (TREE_CODE (_p1))
12506 : : {
12507 : 12179 : case SSA_NAME:
12508 : 12179 : if (gimple *_d2 = get_def (valueize, _p1))
12509 : : {
12510 : 12011 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
12511 : 11123 : switch (gimple_assign_rhs_code (_a2))
12512 : : {
12513 : 10235 : case POINTER_DIFF_EXPR:
12514 : 10235 : {
12515 : 10235 : tree _q50 = gimple_assign_rhs1 (_a2);
12516 : 10235 : _q50 = do_valueize (valueize, _q50);
12517 : 10235 : tree _q51 = gimple_assign_rhs2 (_a2);
12518 : 10235 : _q51 = do_valueize (valueize, _q51);
12519 : 10235 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
12520 : : {
12521 : 314 : {
12522 : 314 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q50 };
12523 : 314 : if (gimple_simplify_235 (res_op, seq, valueize, type, captures, NE_EXPR))
12524 : 314 : return true;
12525 : : }
12526 : : }
12527 : 9921 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
12528 : : {
12529 : 0 : {
12530 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q51 };
12531 : 0 : if (gimple_simplify_236 (res_op, seq, valueize, type, captures, NE_EXPR))
12532 : 0 : return true;
12533 : : }
12534 : : }
12535 : : break;
12536 : : }
12537 : : default:;
12538 : : }
12539 : : }
12540 : : break;
12541 : : default:;
12542 : : }
12543 : : break;
12544 : : }
12545 : : default:;
12546 : : }
12547 : : }
12548 : : break;
12549 : 128152792 : default:;
12550 : : }
12551 : 128152792 : {
12552 : 128152792 : tree _p0_pops[1];
12553 : 128152792 : if (gimple_logical_inverted_value (_p0, _p0_pops, valueize))
12554 : : {
12555 : 799156 : tree _q20 = _p0_pops[0];
12556 : 799156 : if ((_p1 == _q20 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q20, 0) && types_match (_p1, _q20)))
12557 : : {
12558 : 0 : if (gimple_truth_valued_p (_p1, valueize))
12559 : : {
12560 : 0 : {
12561 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
12562 : 0 : if (gimple_simplify_224 (res_op, seq, valueize, type, captures, NE_EXPR))
12563 : 0 : return true;
12564 : : }
12565 : : }
12566 : : }
12567 : : }
12568 : : }
12569 : 128152792 : {
12570 : 128152792 : tree _p0_pops[1];
12571 : 128152792 : if (gimple_nop_convert (_p0, _p0_pops, valueize))
12572 : : {
12573 : 602699 : tree _q20 = _p0_pops[0];
12574 : 602699 : switch (TREE_CODE (_q20))
12575 : : {
12576 : 591907 : case SSA_NAME:
12577 : 591907 : if (gimple *_d1 = get_def (valueize, _q20))
12578 : : {
12579 : 575769 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
12580 : 590859 : switch (gimple_assign_rhs_code (_a1))
12581 : : {
12582 : 66890 : case PLUS_EXPR:
12583 : 66890 : {
12584 : 66890 : tree _q30 = gimple_assign_rhs1 (_a1);
12585 : 66890 : _q30 = do_valueize (valueize, _q30);
12586 : 66890 : tree _q31 = gimple_assign_rhs2 (_a1);
12587 : 66890 : _q31 = do_valueize (valueize, _q31);
12588 : 66890 : if (tree_swap_operands_p (_q30, _q31))
12589 : 1546 : std::swap (_q30, _q31);
12590 : 66890 : switch (TREE_CODE (_q31))
12591 : : {
12592 : 26538 : case SSA_NAME:
12593 : 26538 : if (gimple *_d2 = get_def (valueize, _q31))
12594 : : {
12595 : 26370 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
12596 : 26066 : switch (gimple_assign_rhs_code (_a2))
12597 : : {
12598 : 10884 : CASE_CONVERT:
12599 : 10884 : {
12600 : 10884 : tree _q50 = gimple_assign_rhs1 (_a2);
12601 : 10884 : _q50 = do_valueize (valueize, _q50);
12602 : 10884 : switch (TREE_CODE (_p1))
12603 : : {
12604 : 4159 : case SSA_NAME:
12605 : 4159 : if (gimple *_d3 = get_def (valueize, _p1))
12606 : : {
12607 : 4123 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
12608 : 6779 : switch (gimple_assign_rhs_code (_a3))
12609 : : {
12610 : 340 : CASE_CONVERT:
12611 : 340 : {
12612 : 340 : tree _q70 = gimple_assign_rhs1 (_a3);
12613 : 340 : _q70 = do_valueize (valueize, _q70);
12614 : 340 : if ((_q70 == _q50 && ! TREE_SIDE_EFFECTS (_q70)) || (operand_equal_p (_q70, _q50, 0) && types_match (_q70, _q50)))
12615 : : {
12616 : 0 : {
12617 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q50 };
12618 : 0 : if (gimple_simplify_229 (res_op, seq, valueize, type, captures, NE_EXPR))
12619 : 0 : return true;
12620 : : }
12621 : : }
12622 : : break;
12623 : : }
12624 : : default:;
12625 : : }
12626 : : }
12627 : : break;
12628 : : default:;
12629 : : }
12630 : : break;
12631 : : }
12632 : : default:;
12633 : : }
12634 : : }
12635 : : break;
12636 : 66890 : default:;
12637 : : }
12638 : 66890 : switch (TREE_CODE (_q30))
12639 : : {
12640 : 66890 : case SSA_NAME:
12641 : 66890 : if (gimple *_d2 = get_def (valueize, _q30))
12642 : : {
12643 : 64492 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
12644 : 59766 : switch (gimple_assign_rhs_code (_a2))
12645 : : {
12646 : 31256 : CASE_CONVERT:
12647 : 31256 : {
12648 : 31256 : tree _q40 = gimple_assign_rhs1 (_a2);
12649 : 31256 : _q40 = do_valueize (valueize, _q40);
12650 : 31256 : switch (TREE_CODE (_p1))
12651 : : {
12652 : 17051 : case SSA_NAME:
12653 : 17051 : if (gimple *_d3 = get_def (valueize, _p1))
12654 : : {
12655 : 10112 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
12656 : 10699 : switch (gimple_assign_rhs_code (_a3))
12657 : : {
12658 : 1349 : CASE_CONVERT:
12659 : 1349 : {
12660 : 1349 : tree _q70 = gimple_assign_rhs1 (_a3);
12661 : 1349 : _q70 = do_valueize (valueize, _q70);
12662 : 1349 : if ((_q70 == _q40 && ! TREE_SIDE_EFFECTS (_q70)) || (operand_equal_p (_q70, _q40, 0) && types_match (_q70, _q40)))
12663 : : {
12664 : 0 : {
12665 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q31, _q40 };
12666 : 0 : if (gimple_simplify_229 (res_op, seq, valueize, type, captures, NE_EXPR))
12667 : 0 : return true;
12668 : : }
12669 : : }
12670 : : break;
12671 : : }
12672 : : default:;
12673 : : }
12674 : : }
12675 : : break;
12676 : 31256 : default:;
12677 : : }
12678 : 31256 : if ((_p1 == _q40 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q40, 0) && types_match (_p1, _q40)))
12679 : : {
12680 : 2 : {
12681 : 2 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q31, _q40 };
12682 : 2 : if (gimple_simplify_229 (res_op, seq, valueize, type, captures, NE_EXPR))
12683 : 1 : return true;
12684 : : }
12685 : : }
12686 : : break;
12687 : : }
12688 : : default:;
12689 : : }
12690 : : }
12691 : : break;
12692 : 66889 : default:;
12693 : : }
12694 : 66889 : switch (TREE_CODE (_q31))
12695 : : {
12696 : 26538 : case SSA_NAME:
12697 : 26538 : if (gimple *_d2 = get_def (valueize, _q31))
12698 : : {
12699 : 26370 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
12700 : 26066 : switch (gimple_assign_rhs_code (_a2))
12701 : : {
12702 : 10884 : CASE_CONVERT:
12703 : 10884 : {
12704 : 10884 : tree _q50 = gimple_assign_rhs1 (_a2);
12705 : 10884 : _q50 = do_valueize (valueize, _q50);
12706 : 10884 : if ((_p1 == _q50 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q50, 0) && types_match (_p1, _q50)))
12707 : : {
12708 : 7 : {
12709 : 7 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q50 };
12710 : 7 : if (gimple_simplify_229 (res_op, seq, valueize, type, captures, NE_EXPR))
12711 : 4 : return true;
12712 : : }
12713 : : }
12714 : : break;
12715 : : }
12716 : : default:;
12717 : : }
12718 : : }
12719 : : break;
12720 : 66885 : default:;
12721 : : }
12722 : 66885 : switch (TREE_CODE (_p1))
12723 : : {
12724 : 35685 : case SSA_NAME:
12725 : 35685 : if (gimple *_d2 = get_def (valueize, _p1))
12726 : : {
12727 : 28482 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
12728 : 42703 : switch (gimple_assign_rhs_code (_a2))
12729 : : {
12730 : 2586 : CASE_CONVERT:
12731 : 2586 : {
12732 : 2586 : tree _q60 = gimple_assign_rhs1 (_a2);
12733 : 2586 : _q60 = do_valueize (valueize, _q60);
12734 : 2586 : if ((_q60 == _q31 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _q31, 0) && types_match (_q60, _q31)))
12735 : : {
12736 : 2 : {
12737 : 2 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q31 };
12738 : 2 : if (gimple_simplify_229 (res_op, seq, valueize, type, captures, NE_EXPR))
12739 : 0 : return true;
12740 : : }
12741 : : }
12742 : 2586 : if ((_q60 == _q30 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _q30, 0) && types_match (_q60, _q30)))
12743 : : {
12744 : 0 : {
12745 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q31, _q30 };
12746 : 0 : if (gimple_simplify_229 (res_op, seq, valueize, type, captures, NE_EXPR))
12747 : 0 : return true;
12748 : : }
12749 : : }
12750 : : break;
12751 : : }
12752 : : default:;
12753 : : }
12754 : : }
12755 : : break;
12756 : 66885 : default:;
12757 : : }
12758 : 66885 : if ((_p1 == _q31 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q31, 0) && types_match (_p1, _q31)))
12759 : : {
12760 : 0 : {
12761 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q31 };
12762 : 0 : if (gimple_simplify_229 (res_op, seq, valueize, type, captures, NE_EXPR))
12763 : 0 : return true;
12764 : : }
12765 : : }
12766 : 66885 : if ((_p1 == _q30 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q30, 0) && types_match (_p1, _q30)))
12767 : : {
12768 : 0 : {
12769 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q31, _q30 };
12770 : 0 : if (gimple_simplify_229 (res_op, seq, valueize, type, captures, NE_EXPR))
12771 : 0 : return true;
12772 : : }
12773 : : }
12774 : 128152785 : break;
12775 : : }
12776 : 831 : case POINTER_PLUS_EXPR:
12777 : 831 : {
12778 : 831 : tree _q30 = gimple_assign_rhs1 (_a1);
12779 : 831 : _q30 = do_valueize (valueize, _q30);
12780 : 831 : tree _q31 = gimple_assign_rhs2 (_a1);
12781 : 831 : _q31 = do_valueize (valueize, _q31);
12782 : 831 : switch (TREE_CODE (_q30))
12783 : : {
12784 : 821 : case SSA_NAME:
12785 : 821 : if (gimple *_d2 = get_def (valueize, _q30))
12786 : : {
12787 : 790 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
12788 : 725 : switch (gimple_assign_rhs_code (_a2))
12789 : : {
12790 : 0 : CASE_CONVERT:
12791 : 0 : {
12792 : 0 : tree _q40 = gimple_assign_rhs1 (_a2);
12793 : 0 : _q40 = do_valueize (valueize, _q40);
12794 : 0 : switch (TREE_CODE (_p1))
12795 : : {
12796 : 0 : case SSA_NAME:
12797 : 0 : if (gimple *_d3 = get_def (valueize, _p1))
12798 : : {
12799 : 0 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
12800 : 0 : switch (gimple_assign_rhs_code (_a3))
12801 : : {
12802 : 0 : CASE_CONVERT:
12803 : 0 : {
12804 : 0 : tree _q70 = gimple_assign_rhs1 (_a3);
12805 : 0 : _q70 = do_valueize (valueize, _q70);
12806 : 0 : if ((_q70 == _q40 && ! TREE_SIDE_EFFECTS (_q70)) || (operand_equal_p (_q70, _q40, 0) && types_match (_q70, _q40)))
12807 : : {
12808 : 0 : {
12809 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q40, _q31 };
12810 : 0 : if (gimple_simplify_237 (res_op, seq, valueize, type, captures, NE_EXPR))
12811 : 0 : return true;
12812 : : }
12813 : : }
12814 : : break;
12815 : : }
12816 : : default:;
12817 : : }
12818 : : }
12819 : : break;
12820 : 0 : default:;
12821 : : }
12822 : 0 : if ((_p1 == _q40 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q40, 0) && types_match (_p1, _q40)))
12823 : : {
12824 : 0 : {
12825 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q40, _q31 };
12826 : 0 : if (gimple_simplify_237 (res_op, seq, valueize, type, captures, NE_EXPR))
12827 : 0 : return true;
12828 : : }
12829 : : }
12830 : : break;
12831 : : }
12832 : : default:;
12833 : : }
12834 : : }
12835 : : break;
12836 : 831 : default:;
12837 : : }
12838 : 831 : switch (TREE_CODE (_p1))
12839 : : {
12840 : 831 : case SSA_NAME:
12841 : 831 : if (gimple *_d2 = get_def (valueize, _p1))
12842 : : {
12843 : 822 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
12844 : 774 : switch (gimple_assign_rhs_code (_a2))
12845 : : {
12846 : 259 : CASE_CONVERT:
12847 : 259 : {
12848 : 259 : tree _q60 = gimple_assign_rhs1 (_a2);
12849 : 259 : _q60 = do_valueize (valueize, _q60);
12850 : 259 : if ((_q60 == _q30 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _q30, 0) && types_match (_q60, _q30)))
12851 : : {
12852 : 2 : {
12853 : 2 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q31 };
12854 : 2 : if (gimple_simplify_237 (res_op, seq, valueize, type, captures, NE_EXPR))
12855 : 2 : return true;
12856 : : }
12857 : : }
12858 : : break;
12859 : : }
12860 : : default:;
12861 : : }
12862 : : }
12863 : : break;
12864 : 829 : default:;
12865 : : }
12866 : 829 : if ((_p1 == _q30 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q30, 0) && types_match (_p1, _q30)))
12867 : : {
12868 : 0 : {
12869 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q31 };
12870 : 0 : if (gimple_simplify_237 (res_op, seq, valueize, type, captures, NE_EXPR))
12871 : 0 : return true;
12872 : : }
12873 : : }
12874 : : break;
12875 : : }
12876 : : default:;
12877 : : }
12878 : : }
12879 : : break;
12880 : : default:;
12881 : : }
12882 : : }
12883 : : }
12884 : 128152785 : if (gimple_truth_valued_p (_p0, valueize))
12885 : : {
12886 : 33483464 : {
12887 : 33483464 : tree _p1_pops[1];
12888 : 33483464 : if (gimple_logical_inverted_value (_p1, _p1_pops, valueize))
12889 : : {
12890 : 6244 : tree _q30 = _p1_pops[0];
12891 : 6244 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || (operand_equal_p (_q30, _p0, 0) && types_match (_q30, _p0)))
12892 : : {
12893 : 0 : {
12894 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
12895 : 0 : if (gimple_simplify_224 (res_op, seq, valueize, type, captures, NE_EXPR))
12896 : 0 : return true;
12897 : : }
12898 : : }
12899 : : }
12900 : : }
12901 : : }
12902 : 128152785 : switch (TREE_CODE (_p1))
12903 : : {
12904 : 22752559 : case SSA_NAME:
12905 : 22752559 : if (gimple *_d1 = get_def (valueize, _p1))
12906 : : {
12907 : 7201497 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
12908 : 10230158 : switch (gimple_assign_rhs_code (_a1))
12909 : : {
12910 : 633087 : case PLUS_EXPR:
12911 : 633087 : {
12912 : 633087 : tree _q30 = gimple_assign_rhs1 (_a1);
12913 : 633087 : _q30 = do_valueize (valueize, _q30);
12914 : 633087 : tree _q31 = gimple_assign_rhs2 (_a1);
12915 : 633087 : _q31 = do_valueize (valueize, _q31);
12916 : 633087 : if (tree_swap_operands_p (_q30, _q31))
12917 : 4216 : std::swap (_q30, _q31);
12918 : 633087 : switch (TREE_CODE (_q31))
12919 : : {
12920 : 101490 : case SSA_NAME:
12921 : 101490 : if (gimple *_d2 = get_def (valueize, _q31))
12922 : : {
12923 : 95093 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
12924 : 95649 : switch (gimple_assign_rhs_code (_a2))
12925 : : {
12926 : 16571 : CASE_CONVERT:
12927 : 16571 : {
12928 : 16571 : tree _q50 = gimple_assign_rhs1 (_a2);
12929 : 16571 : _q50 = do_valueize (valueize, _q50);
12930 : 16571 : if ((_q50 == _p0 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _p0, 0) && types_match (_q50, _p0)))
12931 : : {
12932 : 0 : {
12933 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p1, _p1, _q30, _p0 };
12934 : 0 : if (gimple_simplify_230 (res_op, seq, valueize, type, captures, NE_EXPR))
12935 : 0 : return true;
12936 : : }
12937 : : }
12938 : : break;
12939 : : }
12940 : : default:;
12941 : : }
12942 : : }
12943 : : break;
12944 : 633087 : default:;
12945 : : }
12946 : 633087 : switch (TREE_CODE (_q30))
12947 : : {
12948 : 633087 : case SSA_NAME:
12949 : 633087 : if (gimple *_d2 = get_def (valueize, _q30))
12950 : : {
12951 : 570148 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
12952 : 320772 : switch (gimple_assign_rhs_code (_a2))
12953 : : {
12954 : 179340 : CASE_CONVERT:
12955 : 179340 : {
12956 : 179340 : tree _q40 = gimple_assign_rhs1 (_a2);
12957 : 179340 : _q40 = do_valueize (valueize, _q40);
12958 : 179340 : if ((_q40 == _p0 && ! TREE_SIDE_EFFECTS (_q40)) || (operand_equal_p (_q40, _p0, 0) && types_match (_q40, _p0)))
12959 : : {
12960 : 0 : {
12961 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p1, _p1, _q31, _p0 };
12962 : 0 : if (gimple_simplify_230 (res_op, seq, valueize, type, captures, NE_EXPR))
12963 : 0 : return true;
12964 : : }
12965 : : }
12966 : : break;
12967 : : }
12968 : : default:;
12969 : : }
12970 : : }
12971 : : break;
12972 : 633087 : default:;
12973 : : }
12974 : 633087 : if ((_q31 == _p0 && ! TREE_SIDE_EFFECTS (_q31)) || (operand_equal_p (_q31, _p0, 0) && types_match (_q31, _p0)))
12975 : : {
12976 : 911 : {
12977 : 911 : tree captures[4] ATTRIBUTE_UNUSED = { _p1, _p1, _q30, _p0 };
12978 : 911 : if (gimple_simplify_230 (res_op, seq, valueize, type, captures, NE_EXPR))
12979 : 72 : return true;
12980 : : }
12981 : : }
12982 : 633015 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || (operand_equal_p (_q30, _p0, 0) && types_match (_q30, _p0)))
12983 : : {
12984 : 2126 : {
12985 : 2126 : tree captures[4] ATTRIBUTE_UNUSED = { _p1, _p1, _q31, _p0 };
12986 : 2126 : if (gimple_simplify_230 (res_op, seq, valueize, type, captures, NE_EXPR))
12987 : 578 : return true;
12988 : : }
12989 : : }
12990 : 128152135 : break;
12991 : : }
12992 : : default:;
12993 : : }
12994 : : }
12995 : : break;
12996 : 128152135 : default:;
12997 : : }
12998 : 128152135 : {
12999 : 128152135 : tree _p1_pops[1];
13000 : 128152135 : if (gimple_nop_convert (_p1, _p1_pops, valueize))
13001 : : {
13002 : 211463 : tree _q30 = _p1_pops[0];
13003 : 211463 : switch (TREE_CODE (_q30))
13004 : : {
13005 : 194359 : case SSA_NAME:
13006 : 194359 : if (gimple *_d1 = get_def (valueize, _q30))
13007 : : {
13008 : 178227 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
13009 : 221973 : switch (gimple_assign_rhs_code (_a1))
13010 : : {
13011 : 63274 : case PLUS_EXPR:
13012 : 63274 : {
13013 : 63274 : tree _q40 = gimple_assign_rhs1 (_a1);
13014 : 63274 : _q40 = do_valueize (valueize, _q40);
13015 : 63274 : tree _q41 = gimple_assign_rhs2 (_a1);
13016 : 63274 : _q41 = do_valueize (valueize, _q41);
13017 : 63274 : if (tree_swap_operands_p (_q40, _q41))
13018 : 481 : std::swap (_q40, _q41);
13019 : 63274 : switch (TREE_CODE (_q41))
13020 : : {
13021 : 9475 : case SSA_NAME:
13022 : 9475 : if (gimple *_d2 = get_def (valueize, _q41))
13023 : : {
13024 : 9112 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
13025 : 8347 : switch (gimple_assign_rhs_code (_a2))
13026 : : {
13027 : 5351 : CASE_CONVERT:
13028 : 5351 : {
13029 : 5351 : tree _q60 = gimple_assign_rhs1 (_a2);
13030 : 5351 : _q60 = do_valueize (valueize, _q60);
13031 : 5351 : if ((_q60 == _p0 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _p0, 0) && types_match (_q60, _p0)))
13032 : : {
13033 : 471 : {
13034 : 471 : tree captures[4] ATTRIBUTE_UNUSED = { _p1, _q30, _q40, _p0 };
13035 : 471 : if (gimple_simplify_229 (res_op, seq, valueize, type, captures, NE_EXPR))
13036 : 0 : return true;
13037 : : }
13038 : : }
13039 : : break;
13040 : : }
13041 : : default:;
13042 : : }
13043 : : }
13044 : : break;
13045 : 63274 : default:;
13046 : : }
13047 : 63274 : switch (TREE_CODE (_q40))
13048 : : {
13049 : 63274 : case SSA_NAME:
13050 : 63274 : if (gimple *_d2 = get_def (valueize, _q40))
13051 : : {
13052 : 53719 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
13053 : 39492 : switch (gimple_assign_rhs_code (_a2))
13054 : : {
13055 : 30456 : CASE_CONVERT:
13056 : 30456 : {
13057 : 30456 : tree _q50 = gimple_assign_rhs1 (_a2);
13058 : 30456 : _q50 = do_valueize (valueize, _q50);
13059 : 30456 : if ((_q50 == _p0 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _p0, 0) && types_match (_q50, _p0)))
13060 : : {
13061 : 111 : {
13062 : 111 : tree captures[4] ATTRIBUTE_UNUSED = { _p1, _q30, _q41, _p0 };
13063 : 111 : if (gimple_simplify_229 (res_op, seq, valueize, type, captures, NE_EXPR))
13064 : 27 : return true;
13065 : : }
13066 : : }
13067 : : break;
13068 : : }
13069 : : default:;
13070 : : }
13071 : : }
13072 : : break;
13073 : 63247 : default:;
13074 : : }
13075 : 63247 : if ((_q41 == _p0 && ! TREE_SIDE_EFFECTS (_q41)) || (operand_equal_p (_q41, _p0, 0) && types_match (_q41, _p0)))
13076 : : {
13077 : 0 : {
13078 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p1, _q30, _q40, _p0 };
13079 : 0 : if (gimple_simplify_229 (res_op, seq, valueize, type, captures, NE_EXPR))
13080 : 0 : return true;
13081 : : }
13082 : : }
13083 : 63247 : if ((_q40 == _p0 && ! TREE_SIDE_EFFECTS (_q40)) || (operand_equal_p (_q40, _p0, 0) && types_match (_q40, _p0)))
13084 : : {
13085 : 0 : {
13086 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p1, _q30, _q41, _p0 };
13087 : 0 : if (gimple_simplify_229 (res_op, seq, valueize, type, captures, NE_EXPR))
13088 : 0 : return true;
13089 : : }
13090 : : }
13091 : 128152108 : break;
13092 : : }
13093 : : default:;
13094 : : }
13095 : : }
13096 : : break;
13097 : : default:;
13098 : : }
13099 : : }
13100 : : }
13101 : 128152108 : switch (TREE_CODE (_p0))
13102 : : {
13103 : 125228753 : case SSA_NAME:
13104 : 125228753 : if (gimple *_d1 = get_def (valueize, _p0))
13105 : : {
13106 : 42907491 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
13107 : 46841296 : switch (gimple_assign_rhs_code (_a1))
13108 : : {
13109 : 2396151 : CASE_CONVERT:
13110 : 2396151 : {
13111 : 2396151 : tree _q20 = gimple_assign_rhs1 (_a1);
13112 : 2396151 : _q20 = do_valueize (valueize, _q20);
13113 : 2396151 : switch (TREE_CODE (_p1))
13114 : : {
13115 : 592115 : case SSA_NAME:
13116 : 592115 : if (gimple *_d2 = get_def (valueize, _p1))
13117 : : {
13118 : 536763 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
13119 : 637133 : switch (gimple_assign_rhs_code (_a2))
13120 : : {
13121 : 2464 : case POINTER_PLUS_EXPR:
13122 : 2464 : {
13123 : 2464 : tree _q40 = gimple_assign_rhs1 (_a2);
13124 : 2464 : _q40 = do_valueize (valueize, _q40);
13125 : 2464 : tree _q41 = gimple_assign_rhs2 (_a2);
13126 : 2464 : _q41 = do_valueize (valueize, _q41);
13127 : 2464 : switch (TREE_CODE (_q40))
13128 : : {
13129 : 2438 : case SSA_NAME:
13130 : 2438 : if (gimple *_d3 = get_def (valueize, _q40))
13131 : : {
13132 : 2345 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
13133 : 963 : switch (gimple_assign_rhs_code (_a3))
13134 : : {
13135 : 57 : CASE_CONVERT:
13136 : 57 : {
13137 : 57 : tree _q50 = gimple_assign_rhs1 (_a3);
13138 : 57 : _q50 = do_valueize (valueize, _q50);
13139 : 57 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
13140 : : {
13141 : 8 : {
13142 : 8 : tree captures[4] ATTRIBUTE_UNUSED = { _p1, _p1, _q20, _q41 };
13143 : 8 : if (gimple_simplify_233 (res_op, seq, valueize, type, captures, NE_EXPR))
13144 : 8 : return true;
13145 : : }
13146 : : }
13147 : : break;
13148 : : }
13149 : : default:;
13150 : : }
13151 : : }
13152 : : break;
13153 : 2456 : default:;
13154 : : }
13155 : 2456 : if ((_q40 == _q20 && ! TREE_SIDE_EFFECTS (_q40)) || (operand_equal_p (_q40, _q20, 0) && types_match (_q40, _q20)))
13156 : : {
13157 : 0 : {
13158 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p1, _p1, _q20, _q41 };
13159 : 0 : if (gimple_simplify_233 (res_op, seq, valueize, type, captures, NE_EXPR))
13160 : 0 : return true;
13161 : : }
13162 : : }
13163 : : break;
13164 : : }
13165 : : default:;
13166 : : }
13167 : : }
13168 : : break;
13169 : 2396143 : default:;
13170 : : }
13171 : 2396143 : {
13172 : 2396143 : tree _p1_pops[1];
13173 : 2396143 : if (gimple_nop_convert (_p1, _p1_pops, valueize))
13174 : : {
13175 : 29567 : tree _q40 = _p1_pops[0];
13176 : 29567 : switch (TREE_CODE (_q40))
13177 : : {
13178 : 26253 : case SSA_NAME:
13179 : 26253 : if (gimple *_d2 = get_def (valueize, _q40))
13180 : : {
13181 : 25663 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
13182 : 33758 : switch (gimple_assign_rhs_code (_a2))
13183 : : {
13184 : 317 : case POINTER_PLUS_EXPR:
13185 : 317 : {
13186 : 317 : tree _q50 = gimple_assign_rhs1 (_a2);
13187 : 317 : _q50 = do_valueize (valueize, _q50);
13188 : 317 : tree _q51 = gimple_assign_rhs2 (_a2);
13189 : 317 : _q51 = do_valueize (valueize, _q51);
13190 : 317 : switch (TREE_CODE (_q50))
13191 : : {
13192 : 317 : case SSA_NAME:
13193 : 317 : if (gimple *_d3 = get_def (valueize, _q50))
13194 : : {
13195 : 315 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
13196 : 220 : switch (gimple_assign_rhs_code (_a3))
13197 : : {
13198 : 0 : CASE_CONVERT:
13199 : 0 : {
13200 : 0 : tree _q60 = gimple_assign_rhs1 (_a3);
13201 : 0 : _q60 = do_valueize (valueize, _q60);
13202 : 0 : if ((_q60 == _q20 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _q20, 0) && types_match (_q60, _q20)))
13203 : : {
13204 : 0 : {
13205 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p1, _q40, _q20, _q51 };
13206 : 0 : if (gimple_simplify_237 (res_op, seq, valueize, type, captures, NE_EXPR))
13207 : 0 : return true;
13208 : : }
13209 : : }
13210 : : break;
13211 : : }
13212 : : default:;
13213 : : }
13214 : : }
13215 : : break;
13216 : 317 : default:;
13217 : : }
13218 : 317 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
13219 : : {
13220 : 6 : {
13221 : 6 : tree captures[4] ATTRIBUTE_UNUSED = { _p1, _q40, _q20, _q51 };
13222 : 6 : if (gimple_simplify_237 (res_op, seq, valueize, type, captures, NE_EXPR))
13223 : 6 : return true;
13224 : : }
13225 : : }
13226 : : break;
13227 : : }
13228 : : default:;
13229 : : }
13230 : : }
13231 : : break;
13232 : : default:;
13233 : : }
13234 : : }
13235 : : }
13236 : 2396137 : break;
13237 : : }
13238 : : default:;
13239 : : }
13240 : : }
13241 : : break;
13242 : 128152094 : default:;
13243 : : }
13244 : 128152094 : switch (TREE_CODE (_p1))
13245 : : {
13246 : 22751868 : case SSA_NAME:
13247 : 22751868 : if (gimple *_d1 = get_def (valueize, _p1))
13248 : : {
13249 : 7200806 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
13250 : 10229467 : switch (gimple_assign_rhs_code (_a1))
13251 : : {
13252 : 353537 : case POINTER_PLUS_EXPR:
13253 : 353537 : {
13254 : 353537 : tree _q30 = gimple_assign_rhs1 (_a1);
13255 : 353537 : _q30 = do_valueize (valueize, _q30);
13256 : 353537 : tree _q31 = gimple_assign_rhs2 (_a1);
13257 : 353537 : _q31 = do_valueize (valueize, _q31);
13258 : 353537 : switch (TREE_CODE (_q30))
13259 : : {
13260 : 352279 : case SSA_NAME:
13261 : 352279 : if (gimple *_d2 = get_def (valueize, _q30))
13262 : : {
13263 : 308075 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
13264 : 247915 : switch (gimple_assign_rhs_code (_a2))
13265 : : {
13266 : 537 : CASE_CONVERT:
13267 : 537 : {
13268 : 537 : tree _q40 = gimple_assign_rhs1 (_a2);
13269 : 537 : _q40 = do_valueize (valueize, _q40);
13270 : 537 : if ((_q40 == _p0 && ! TREE_SIDE_EFFECTS (_q40)) || (operand_equal_p (_q40, _p0, 0) && types_match (_q40, _p0)))
13271 : : {
13272 : 0 : {
13273 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p1, _p1, _p0, _q31 };
13274 : 0 : if (gimple_simplify_233 (res_op, seq, valueize, type, captures, NE_EXPR))
13275 : 0 : return true;
13276 : : }
13277 : : }
13278 : : break;
13279 : : }
13280 : : default:;
13281 : : }
13282 : : }
13283 : : break;
13284 : 353537 : default:;
13285 : : }
13286 : 353537 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || (operand_equal_p (_q30, _p0, 0) && types_match (_q30, _p0)))
13287 : : {
13288 : 29176 : {
13289 : 29176 : tree captures[4] ATTRIBUTE_UNUSED = { _p1, _p1, _p0, _q31 };
13290 : 29176 : if (gimple_simplify_233 (res_op, seq, valueize, type, captures, NE_EXPR))
13291 : 10006 : return true;
13292 : : }
13293 : : }
13294 : : break;
13295 : : }
13296 : : default:;
13297 : : }
13298 : : }
13299 : : break;
13300 : 128142088 : default:;
13301 : : }
13302 : 128142088 : {
13303 : 128142088 : tree _p1_pops[1];
13304 : 128142088 : if (gimple_nop_convert (_p1, _p1_pops, valueize))
13305 : : {
13306 : 211430 : tree _q30 = _p1_pops[0];
13307 : 211430 : switch (TREE_CODE (_q30))
13308 : : {
13309 : 194326 : case SSA_NAME:
13310 : 194326 : if (gimple *_d1 = get_def (valueize, _q30))
13311 : : {
13312 : 178194 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
13313 : 221940 : switch (gimple_assign_rhs_code (_a1))
13314 : : {
13315 : 1637 : case POINTER_PLUS_EXPR:
13316 : 1637 : {
13317 : 1637 : tree _q40 = gimple_assign_rhs1 (_a1);
13318 : 1637 : _q40 = do_valueize (valueize, _q40);
13319 : 1637 : tree _q41 = gimple_assign_rhs2 (_a1);
13320 : 1637 : _q41 = do_valueize (valueize, _q41);
13321 : 1637 : switch (TREE_CODE (_q40))
13322 : : {
13323 : 1637 : case SSA_NAME:
13324 : 1637 : if (gimple *_d2 = get_def (valueize, _q40))
13325 : : {
13326 : 1607 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
13327 : 1737 : switch (gimple_assign_rhs_code (_a2))
13328 : : {
13329 : 0 : CASE_CONVERT:
13330 : 0 : {
13331 : 0 : tree _q50 = gimple_assign_rhs1 (_a2);
13332 : 0 : _q50 = do_valueize (valueize, _q50);
13333 : 0 : if ((_q50 == _p0 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _p0, 0) && types_match (_q50, _p0)))
13334 : : {
13335 : 0 : {
13336 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p1, _q30, _p0, _q41 };
13337 : 0 : if (gimple_simplify_237 (res_op, seq, valueize, type, captures, NE_EXPR))
13338 : 0 : return true;
13339 : : }
13340 : : }
13341 : : break;
13342 : : }
13343 : : default:;
13344 : : }
13345 : : }
13346 : : break;
13347 : 1637 : default:;
13348 : : }
13349 : 1637 : if ((_q40 == _p0 && ! TREE_SIDE_EFFECTS (_q40)) || (operand_equal_p (_q40, _p0, 0) && types_match (_q40, _p0)))
13350 : : {
13351 : 0 : {
13352 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p1, _q30, _p0, _q41 };
13353 : 0 : if (gimple_simplify_237 (res_op, seq, valueize, type, captures, NE_EXPR))
13354 : 0 : return true;
13355 : : }
13356 : : }
13357 : : break;
13358 : : }
13359 : : default:;
13360 : : }
13361 : : }
13362 : : break;
13363 : : default:;
13364 : : }
13365 : : }
13366 : : }
13367 : 128142088 : switch (TREE_CODE (_p0))
13368 : : {
13369 : 125218733 : case SSA_NAME:
13370 : 125218733 : if (gimple *_d1 = get_def (valueize, _p0))
13371 : : {
13372 : 42897488 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
13373 : 46827086 : switch (gimple_assign_rhs_code (_a1))
13374 : : {
13375 : 275135 : case POINTER_PLUS_EXPR:
13376 : 275135 : {
13377 : 275135 : tree _q20 = gimple_assign_rhs1 (_a1);
13378 : 275135 : _q20 = do_valueize (valueize, _q20);
13379 : 275135 : tree _q21 = gimple_assign_rhs2 (_a1);
13380 : 275135 : _q21 = do_valueize (valueize, _q21);
13381 : 275135 : switch (TREE_CODE (_p1))
13382 : : {
13383 : 199771 : case SSA_NAME:
13384 : 199771 : if (gimple *_d2 = get_def (valueize, _p1))
13385 : : {
13386 : 194423 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
13387 : 164956 : switch (gimple_assign_rhs_code (_a2))
13388 : : {
13389 : 539 : case ADDR_EXPR:
13390 : 539 : {
13391 : 539 : {
13392 : 539 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
13393 : 539 : if (gimple_simplify_238 (res_op, seq, valueize, type, captures, NE_EXPR))
13394 : 92 : return true;
13395 : : }
13396 : 447 : break;
13397 : : }
13398 : : default:;
13399 : : }
13400 : : }
13401 : : break;
13402 : 65218 : case ADDR_EXPR:
13403 : 65218 : {
13404 : 65218 : {
13405 : 65218 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
13406 : 65218 : if (gimple_simplify_238 (res_op, seq, valueize, type, captures, NE_EXPR))
13407 : 2346 : return true;
13408 : : }
13409 : 62872 : break;
13410 : : }
13411 : 272697 : default:;
13412 : : }
13413 : 272697 : switch (TREE_CODE (_q20))
13414 : : {
13415 : 259789 : case SSA_NAME:
13416 : 259789 : if (gimple *_d2 = get_def (valueize, _q20))
13417 : : {
13418 : 243323 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
13419 : 197337 : switch (gimple_assign_rhs_code (_a2))
13420 : : {
13421 : 425 : case ADDR_EXPR:
13422 : 425 : {
13423 : 425 : switch (TREE_CODE (_p1))
13424 : : {
13425 : 338 : case SSA_NAME:
13426 : 338 : if (gimple *_d3 = get_def (valueize, _p1))
13427 : : {
13428 : 321 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
13429 : 137 : switch (gimple_assign_rhs_code (_a3))
13430 : : {
13431 : 89 : case POINTER_PLUS_EXPR:
13432 : 89 : {
13433 : 89 : tree _q50 = gimple_assign_rhs1 (_a3);
13434 : 89 : _q50 = do_valueize (valueize, _q50);
13435 : 89 : tree _q51 = gimple_assign_rhs2 (_a3);
13436 : 89 : _q51 = do_valueize (valueize, _q51);
13437 : 89 : switch (TREE_CODE (_q50))
13438 : : {
13439 : 89 : case SSA_NAME:
13440 : 89 : if (gimple *_d4 = get_def (valueize, _q50))
13441 : : {
13442 : 73 : if (gassign *_a4 = dyn_cast <gassign *> (_d4))
13443 : 24 : switch (gimple_assign_rhs_code (_a4))
13444 : : {
13445 : 4 : case ADDR_EXPR:
13446 : 4 : {
13447 : 4 : {
13448 : 4 : tree captures[4] ATTRIBUTE_UNUSED = { _q20, _q21, _q50, _q51 };
13449 : 4 : if (gimple_simplify_239 (res_op, seq, valueize, type, captures, NE_EXPR))
13450 : 4 : return true;
13451 : : }
13452 : 0 : break;
13453 : : }
13454 : : default:;
13455 : : }
13456 : : }
13457 : : break;
13458 : 0 : case ADDR_EXPR:
13459 : 0 : {
13460 : 0 : {
13461 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _q20, _q21, _q50, _q51 };
13462 : 0 : if (gimple_simplify_239 (res_op, seq, valueize, type, captures, NE_EXPR))
13463 : 0 : return true;
13464 : : }
13465 : 0 : break;
13466 : : }
13467 : : default:;
13468 : : }
13469 : : break;
13470 : : }
13471 : : default:;
13472 : : }
13473 : : }
13474 : : break;
13475 : : default:;
13476 : : }
13477 : : break;
13478 : : }
13479 : : default:;
13480 : : }
13481 : : }
13482 : : break;
13483 : 12907 : case ADDR_EXPR:
13484 : 12907 : {
13485 : 12907 : switch (TREE_CODE (_p1))
13486 : : {
13487 : 12891 : case SSA_NAME:
13488 : 12891 : if (gimple *_d2 = get_def (valueize, _p1))
13489 : : {
13490 : 12578 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
13491 : 7488 : switch (gimple_assign_rhs_code (_a2))
13492 : : {
13493 : 352 : case POINTER_PLUS_EXPR:
13494 : 352 : {
13495 : 352 : tree _q50 = gimple_assign_rhs1 (_a2);
13496 : 352 : _q50 = do_valueize (valueize, _q50);
13497 : 352 : tree _q51 = gimple_assign_rhs2 (_a2);
13498 : 352 : _q51 = do_valueize (valueize, _q51);
13499 : 352 : switch (TREE_CODE (_q50))
13500 : : {
13501 : 324 : case SSA_NAME:
13502 : 324 : if (gimple *_d3 = get_def (valueize, _q50))
13503 : : {
13504 : 315 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
13505 : 24 : switch (gimple_assign_rhs_code (_a3))
13506 : : {
13507 : 0 : case ADDR_EXPR:
13508 : 0 : {
13509 : 0 : {
13510 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _q20, _q21, _q50, _q51 };
13511 : 0 : if (gimple_simplify_239 (res_op, seq, valueize, type, captures, NE_EXPR))
13512 : 0 : return true;
13513 : : }
13514 : 0 : break;
13515 : : }
13516 : : default:;
13517 : : }
13518 : : }
13519 : : break;
13520 : 28 : case ADDR_EXPR:
13521 : 28 : {
13522 : 28 : {
13523 : 28 : tree captures[4] ATTRIBUTE_UNUSED = { _q20, _q21, _q50, _q51 };
13524 : 28 : if (gimple_simplify_239 (res_op, seq, valueize, type, captures, NE_EXPR))
13525 : 12 : return true;
13526 : : }
13527 : 16 : break;
13528 : : }
13529 : : default:;
13530 : : }
13531 : : break;
13532 : : }
13533 : : default:;
13534 : : }
13535 : : }
13536 : : break;
13537 : : default:;
13538 : : }
13539 : : break;
13540 : : }
13541 : : default:;
13542 : : }
13543 : : break;
13544 : : }
13545 : 37719 : case ADDR_EXPR:
13546 : 37719 : {
13547 : 37719 : switch (TREE_CODE (_p1))
13548 : : {
13549 : 27258 : case SSA_NAME:
13550 : 27258 : if (gimple *_d2 = get_def (valueize, _p1))
13551 : : {
13552 : 26602 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
13553 : 34954 : switch (gimple_assign_rhs_code (_a2))
13554 : : {
13555 : 913 : case POINTER_PLUS_EXPR:
13556 : 913 : {
13557 : 913 : tree _q30 = gimple_assign_rhs1 (_a2);
13558 : 913 : _q30 = do_valueize (valueize, _q30);
13559 : 913 : tree _q31 = gimple_assign_rhs2 (_a2);
13560 : 913 : _q31 = do_valueize (valueize, _q31);
13561 : 913 : {
13562 : 913 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _q31, _p0 };
13563 : 913 : if (gimple_simplify_238 (res_op, seq, valueize, type, captures, NE_EXPR))
13564 : 265 : return true;
13565 : : }
13566 : 648 : break;
13567 : : }
13568 : : default:;
13569 : : }
13570 : : }
13571 : : break;
13572 : : default:;
13573 : : }
13574 : : break;
13575 : : }
13576 : : default:;
13577 : : }
13578 : : }
13579 : : break;
13580 : 102313 : case ADDR_EXPR:
13581 : 102313 : {
13582 : 102313 : switch (TREE_CODE (_p1))
13583 : : {
13584 : 0 : case SSA_NAME:
13585 : 0 : if (gimple *_d1 = get_def (valueize, _p1))
13586 : : {
13587 : 0 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
13588 : 0 : switch (gimple_assign_rhs_code (_a1))
13589 : : {
13590 : 0 : case POINTER_PLUS_EXPR:
13591 : 0 : {
13592 : 0 : tree _q30 = gimple_assign_rhs1 (_a1);
13593 : 0 : _q30 = do_valueize (valueize, _q30);
13594 : 0 : tree _q31 = gimple_assign_rhs2 (_a1);
13595 : 0 : _q31 = do_valueize (valueize, _q31);
13596 : 0 : {
13597 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _q31, _p0 };
13598 : 0 : if (gimple_simplify_238 (res_op, seq, valueize, type, captures, NE_EXPR))
13599 : 0 : return true;
13600 : : }
13601 : 0 : break;
13602 : : }
13603 : : default:;
13604 : : }
13605 : : }
13606 : : break;
13607 : : default:;
13608 : : }
13609 : : break;
13610 : : }
13611 : 128139369 : default:;
13612 : : }
13613 : 128139369 : switch (TREE_CODE (_p1))
13614 : : {
13615 : 22741489 : case SSA_NAME:
13616 : 22741489 : if (gimple *_d1 = get_def (valueize, _p1))
13617 : : {
13618 : 7190427 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
13619 : 10218996 : switch (gimple_assign_rhs_code (_a1))
13620 : : {
13621 : 160760 : case MINUS_EXPR:
13622 : 160760 : {
13623 : 160760 : tree _q30 = gimple_assign_rhs1 (_a1);
13624 : 160760 : _q30 = do_valueize (valueize, _q30);
13625 : 160760 : tree _q31 = gimple_assign_rhs2 (_a1);
13626 : 160760 : _q31 = do_valueize (valueize, _q31);
13627 : 160760 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || (operand_equal_p (_q30, _p0, 0) && types_match (_q30, _p0)))
13628 : : {
13629 : 6188 : {
13630 : 6188 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p1, _q31 };
13631 : 6188 : if (gimple_simplify_234 (res_op, seq, valueize, type, captures, NE_EXPR))
13632 : 1540 : return true;
13633 : : }
13634 : : }
13635 : : break;
13636 : : }
13637 : : default:;
13638 : : }
13639 : : }
13640 : : break;
13641 : 128137829 : default:;
13642 : : }
13643 : 128137829 : switch (TREE_CODE (_p0))
13644 : : {
13645 : 125214474 : case SSA_NAME:
13646 : 125214474 : if (gimple *_d1 = get_def (valueize, _p0))
13647 : : {
13648 : 42893229 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
13649 : 46821253 : switch (gimple_assign_rhs_code (_a1))
13650 : : {
13651 : 20059 : case TRUNC_DIV_EXPR:
13652 : 20059 : {
13653 : 20059 : tree _q20 = gimple_assign_rhs1 (_a1);
13654 : 20059 : _q20 = do_valueize (valueize, _q20);
13655 : 20059 : tree _q21 = gimple_assign_rhs2 (_a1);
13656 : 20059 : _q21 = do_valueize (valueize, _q21);
13657 : 20059 : if (integer_zerop (_p1))
13658 : : {
13659 : 8433 : {
13660 : 8433 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
13661 : 8433 : if (gimple_simplify_240 (res_op, seq, valueize, type, captures, NE_EXPR, GE_EXPR))
13662 : 227 : return true;
13663 : : }
13664 : : }
13665 : : break;
13666 : : }
13667 : 2396134 : CASE_CONVERT:
13668 : 2396134 : {
13669 : 2396134 : tree _q20 = gimple_assign_rhs1 (_a1);
13670 : 2396134 : _q20 = do_valueize (valueize, _q20);
13671 : 2396134 : switch (TREE_CODE (_p1))
13672 : : {
13673 : 592098 : case SSA_NAME:
13674 : 592098 : if (gimple *_d2 = get_def (valueize, _p1))
13675 : : {
13676 : 536746 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
13677 : 637116 : switch (gimple_assign_rhs_code (_a2))
13678 : : {
13679 : 86769 : CASE_CONVERT:
13680 : 86769 : {
13681 : 86769 : tree _q40 = gimple_assign_rhs1 (_a2);
13682 : 86769 : _q40 = do_valueize (valueize, _q40);
13683 : 86769 : switch (TREE_CODE (_q40))
13684 : : {
13685 : 83455 : case SSA_NAME:
13686 : 83455 : if (gimple *_d3 = get_def (valueize, _q40))
13687 : : {
13688 : 82692 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
13689 : 96103 : switch (gimple_assign_rhs_code (_a3))
13690 : : {
13691 : 394 : case MINUS_EXPR:
13692 : 394 : {
13693 : 394 : tree _q50 = gimple_assign_rhs1 (_a3);
13694 : 394 : _q50 = do_valueize (valueize, _q50);
13695 : 394 : tree _q51 = gimple_assign_rhs2 (_a3);
13696 : 394 : _q51 = do_valueize (valueize, _q51);
13697 : 394 : switch (TREE_CODE (_q50))
13698 : : {
13699 : 2 : case INTEGER_CST:
13700 : 2 : {
13701 : 2 : switch (TREE_CODE (_q51))
13702 : : {
13703 : 2 : case SSA_NAME:
13704 : 2 : if (gimple *_d4 = get_def (valueize, _q51))
13705 : : {
13706 : 2 : if (gassign *_a4 = dyn_cast <gassign *> (_d4))
13707 : 2 : switch (gimple_assign_rhs_code (_a4))
13708 : : {
13709 : 2 : CASE_CONVERT:
13710 : 2 : {
13711 : 2 : tree _q70 = gimple_assign_rhs1 (_a4);
13712 : 2 : _q70 = do_valueize (valueize, _q70);
13713 : 2 : if ((_q70 == _q20 && ! TREE_SIDE_EFFECTS (_q70)) || (operand_equal_p (_q70, _q20, 0) && types_match (_q70, _q20)))
13714 : : {
13715 : 0 : {
13716 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q50 };
13717 : 0 : if (gimple_simplify_241 (res_op, seq, valueize, type, captures, NE_EXPR))
13718 : 0 : return true;
13719 : : }
13720 : : }
13721 : : break;
13722 : : }
13723 : : default:;
13724 : : }
13725 : : }
13726 : : break;
13727 : : default:;
13728 : : }
13729 : : break;
13730 : : }
13731 : : default:;
13732 : : }
13733 : : break;
13734 : : }
13735 : : default:;
13736 : : }
13737 : : }
13738 : : break;
13739 : : default:;
13740 : : }
13741 : : break;
13742 : : }
13743 : : default:;
13744 : : }
13745 : : }
13746 : : break;
13747 : 2396134 : default:;
13748 : : }
13749 : 2396134 : switch (TREE_CODE (_q20))
13750 : : {
13751 : 2384850 : case SSA_NAME:
13752 : 2384850 : if (gimple *_d2 = get_def (valueize, _q20))
13753 : : {
13754 : 2347976 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
13755 : 2731651 : switch (gimple_assign_rhs_code (_a2))
13756 : : {
13757 : 8342 : case MINUS_EXPR:
13758 : 8342 : {
13759 : 8342 : tree _q30 = gimple_assign_rhs1 (_a2);
13760 : 8342 : _q30 = do_valueize (valueize, _q30);
13761 : 8342 : tree _q31 = gimple_assign_rhs2 (_a2);
13762 : 8342 : _q31 = do_valueize (valueize, _q31);
13763 : 8342 : switch (TREE_CODE (_q30))
13764 : : {
13765 : 1157 : case INTEGER_CST:
13766 : 1157 : {
13767 : 1157 : switch (TREE_CODE (_q31))
13768 : : {
13769 : 1157 : case SSA_NAME:
13770 : 1157 : if (gimple *_d3 = get_def (valueize, _q31))
13771 : : {
13772 : 1053 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
13773 : 888 : switch (gimple_assign_rhs_code (_a3))
13774 : : {
13775 : 191 : CASE_CONVERT:
13776 : 191 : {
13777 : 191 : tree _q50 = gimple_assign_rhs1 (_a3);
13778 : 191 : _q50 = do_valueize (valueize, _q50);
13779 : 191 : switch (TREE_CODE (_p1))
13780 : : {
13781 : 18 : case SSA_NAME:
13782 : 18 : if (gimple *_d4 = get_def (valueize, _p1))
13783 : : {
13784 : 18 : if (gassign *_a4 = dyn_cast <gassign *> (_d4))
13785 : 8 : switch (gimple_assign_rhs_code (_a4))
13786 : : {
13787 : 2 : CASE_CONVERT:
13788 : 2 : {
13789 : 2 : tree _q70 = gimple_assign_rhs1 (_a4);
13790 : 2 : _q70 = do_valueize (valueize, _q70);
13791 : 2 : if ((_q70 == _q50 && ! TREE_SIDE_EFFECTS (_q70)) || (operand_equal_p (_q70, _q50, 0) && types_match (_q70, _q50)))
13792 : : {
13793 : 0 : {
13794 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q50, _q30 };
13795 : 0 : if (gimple_simplify_241 (res_op, seq, valueize, type, captures, NE_EXPR))
13796 : 0 : return true;
13797 : : }
13798 : : }
13799 : : break;
13800 : : }
13801 : : default:;
13802 : : }
13803 : : }
13804 : : break;
13805 : 191 : default:;
13806 : : }
13807 : 191 : if ((_p1 == _q50 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q50, 0) && types_match (_p1, _q50)))
13808 : : {
13809 : 0 : {
13810 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q50, _q30 };
13811 : 0 : if (gimple_simplify_241 (res_op, seq, valueize, type, captures, NE_EXPR))
13812 : 0 : return true;
13813 : : }
13814 : : }
13815 : : break;
13816 : : }
13817 : : default:;
13818 : : }
13819 : : }
13820 : : break;
13821 : 1157 : default:;
13822 : : }
13823 : 1157 : switch (TREE_CODE (_p1))
13824 : : {
13825 : 435 : case SSA_NAME:
13826 : 435 : if (gimple *_d3 = get_def (valueize, _p1))
13827 : : {
13828 : 419 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
13829 : 653 : switch (gimple_assign_rhs_code (_a3))
13830 : : {
13831 : 2 : CASE_CONVERT:
13832 : 2 : {
13833 : 2 : tree _q60 = gimple_assign_rhs1 (_a3);
13834 : 2 : _q60 = do_valueize (valueize, _q60);
13835 : 2 : if ((_q60 == _q31 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _q31, 0) && types_match (_q60, _q31)))
13836 : : {
13837 : 0 : {
13838 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q31, _q30 };
13839 : 0 : if (gimple_simplify_241 (res_op, seq, valueize, type, captures, NE_EXPR))
13840 : 0 : return true;
13841 : : }
13842 : : }
13843 : : break;
13844 : : }
13845 : : default:;
13846 : : }
13847 : : }
13848 : : break;
13849 : 1157 : default:;
13850 : : }
13851 : 1157 : if ((_p1 == _q31 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q31, 0) && types_match (_p1, _q31)))
13852 : : {
13853 : 0 : {
13854 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q31, _q30 };
13855 : 0 : if (gimple_simplify_241 (res_op, seq, valueize, type, captures, NE_EXPR))
13856 : 0 : return true;
13857 : : }
13858 : : }
13859 : : break;
13860 : : }
13861 : : default:;
13862 : : }
13863 : : break;
13864 : : }
13865 : : default:;
13866 : : }
13867 : : }
13868 : : break;
13869 : 2396134 : default:;
13870 : : }
13871 : 2396134 : switch (TREE_CODE (_p1))
13872 : : {
13873 : 592098 : case SSA_NAME:
13874 : 592098 : if (gimple *_d2 = get_def (valueize, _p1))
13875 : : {
13876 : 536746 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
13877 : 637116 : switch (gimple_assign_rhs_code (_a2))
13878 : : {
13879 : 86769 : CASE_CONVERT:
13880 : 86769 : {
13881 : 86769 : tree _q40 = gimple_assign_rhs1 (_a2);
13882 : 86769 : _q40 = do_valueize (valueize, _q40);
13883 : 86769 : switch (TREE_CODE (_q40))
13884 : : {
13885 : 83455 : case SSA_NAME:
13886 : 83455 : if (gimple *_d3 = get_def (valueize, _q40))
13887 : : {
13888 : 82692 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
13889 : 96103 : switch (gimple_assign_rhs_code (_a3))
13890 : : {
13891 : 394 : case MINUS_EXPR:
13892 : 394 : {
13893 : 394 : tree _q50 = gimple_assign_rhs1 (_a3);
13894 : 394 : _q50 = do_valueize (valueize, _q50);
13895 : 394 : tree _q51 = gimple_assign_rhs2 (_a3);
13896 : 394 : _q51 = do_valueize (valueize, _q51);
13897 : 394 : switch (TREE_CODE (_q50))
13898 : : {
13899 : 2 : case INTEGER_CST:
13900 : 2 : {
13901 : 2 : if ((_q51 == _q20 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q20, 0) && types_match (_q51, _q20)))
13902 : : {
13903 : 0 : {
13904 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q50 };
13905 : 0 : if (gimple_simplify_241 (res_op, seq, valueize, type, captures, NE_EXPR))
13906 : 0 : return true;
13907 : : }
13908 : : }
13909 : : break;
13910 : : }
13911 : : default:;
13912 : : }
13913 : : break;
13914 : : }
13915 : : default:;
13916 : : }
13917 : : }
13918 : : break;
13919 : : default:;
13920 : : }
13921 : : break;
13922 : : }
13923 : 88182 : case MINUS_EXPR:
13924 : 88182 : {
13925 : 88182 : tree _q40 = gimple_assign_rhs1 (_a2);
13926 : 88182 : _q40 = do_valueize (valueize, _q40);
13927 : 88182 : tree _q41 = gimple_assign_rhs2 (_a2);
13928 : 88182 : _q41 = do_valueize (valueize, _q41);
13929 : 88182 : switch (TREE_CODE (_q40))
13930 : : {
13931 : 1633 : case INTEGER_CST:
13932 : 1633 : {
13933 : 1633 : switch (TREE_CODE (_q41))
13934 : : {
13935 : 1633 : case SSA_NAME:
13936 : 1633 : if (gimple *_d3 = get_def (valueize, _q41))
13937 : : {
13938 : 1597 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
13939 : 1308 : switch (gimple_assign_rhs_code (_a3))
13940 : : {
13941 : 1074 : CASE_CONVERT:
13942 : 1074 : {
13943 : 1074 : tree _q60 = gimple_assign_rhs1 (_a3);
13944 : 1074 : _q60 = do_valueize (valueize, _q60);
13945 : 1074 : if ((_q60 == _q20 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _q20, 0) && types_match (_q60, _q20)))
13946 : : {
13947 : 0 : {
13948 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q40 };
13949 : 0 : if (gimple_simplify_241 (res_op, seq, valueize, type, captures, NE_EXPR))
13950 : 0 : return true;
13951 : : }
13952 : : }
13953 : : break;
13954 : : }
13955 : : default:;
13956 : : }
13957 : : }
13958 : : break;
13959 : 1633 : default:;
13960 : : }
13961 : 1633 : if ((_q41 == _q20 && ! TREE_SIDE_EFFECTS (_q41)) || (operand_equal_p (_q41, _q20, 0) && types_match (_q41, _q20)))
13962 : : {
13963 : 0 : {
13964 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q40 };
13965 : 0 : if (gimple_simplify_241 (res_op, seq, valueize, type, captures, NE_EXPR))
13966 : 0 : return true;
13967 : : }
13968 : : }
13969 : : break;
13970 : : }
13971 : : default:;
13972 : : }
13973 : : break;
13974 : : }
13975 : : default:;
13976 : : }
13977 : : }
13978 : : break;
13979 : : default:;
13980 : : }
13981 : : break;
13982 : : }
13983 : 211559 : case MINUS_EXPR:
13984 : 211559 : {
13985 : 211559 : tree _q20 = gimple_assign_rhs1 (_a1);
13986 : 211559 : _q20 = do_valueize (valueize, _q20);
13987 : 211559 : tree _q21 = gimple_assign_rhs2 (_a1);
13988 : 211559 : _q21 = do_valueize (valueize, _q21);
13989 : 211559 : switch (TREE_CODE (_q20))
13990 : : {
13991 : 9576 : case INTEGER_CST:
13992 : 9576 : {
13993 : 9576 : switch (TREE_CODE (_q21))
13994 : : {
13995 : 9576 : case SSA_NAME:
13996 : 9576 : if (gimple *_d2 = get_def (valueize, _q21))
13997 : : {
13998 : 9546 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
13999 : 7955 : switch (gimple_assign_rhs_code (_a2))
14000 : : {
14001 : 7244 : CASE_CONVERT:
14002 : 7244 : {
14003 : 7244 : tree _q40 = gimple_assign_rhs1 (_a2);
14004 : 7244 : _q40 = do_valueize (valueize, _q40);
14005 : 7244 : switch (TREE_CODE (_p1))
14006 : : {
14007 : 380 : case SSA_NAME:
14008 : 380 : if (gimple *_d3 = get_def (valueize, _p1))
14009 : : {
14010 : 353 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
14011 : 315 : switch (gimple_assign_rhs_code (_a3))
14012 : : {
14013 : 67 : CASE_CONVERT:
14014 : 67 : {
14015 : 67 : tree _q60 = gimple_assign_rhs1 (_a3);
14016 : 67 : _q60 = do_valueize (valueize, _q60);
14017 : 67 : if ((_q60 == _q40 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _q40, 0) && types_match (_q60, _q40)))
14018 : : {
14019 : 0 : {
14020 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q40, _q20 };
14021 : 0 : if (gimple_simplify_241 (res_op, seq, valueize, type, captures, NE_EXPR))
14022 : 0 : return true;
14023 : : }
14024 : : }
14025 : : break;
14026 : : }
14027 : : default:;
14028 : : }
14029 : : }
14030 : : break;
14031 : 7244 : default:;
14032 : : }
14033 : 7244 : if ((_p1 == _q40 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q40, 0) && types_match (_p1, _q40)))
14034 : : {
14035 : 0 : {
14036 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q40, _q20 };
14037 : 0 : if (gimple_simplify_241 (res_op, seq, valueize, type, captures, NE_EXPR))
14038 : 0 : return true;
14039 : : }
14040 : : }
14041 : : break;
14042 : : }
14043 : : default:;
14044 : : }
14045 : : }
14046 : : break;
14047 : 9576 : default:;
14048 : : }
14049 : 9576 : switch (TREE_CODE (_p1))
14050 : : {
14051 : 1980 : case SSA_NAME:
14052 : 1980 : if (gimple *_d2 = get_def (valueize, _p1))
14053 : : {
14054 : 1945 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
14055 : 1713 : switch (gimple_assign_rhs_code (_a2))
14056 : : {
14057 : 1026 : CASE_CONVERT:
14058 : 1026 : {
14059 : 1026 : tree _q50 = gimple_assign_rhs1 (_a2);
14060 : 1026 : _q50 = do_valueize (valueize, _q50);
14061 : 1026 : if ((_q50 == _q21 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q21, 0) && types_match (_q50, _q21)))
14062 : : {
14063 : 0 : {
14064 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q21, _q20 };
14065 : 0 : if (gimple_simplify_241 (res_op, seq, valueize, type, captures, NE_EXPR))
14066 : 0 : return true;
14067 : : }
14068 : : }
14069 : : break;
14070 : : }
14071 : : default:;
14072 : : }
14073 : : }
14074 : : break;
14075 : 9576 : default:;
14076 : : }
14077 : 9576 : if ((_p1 == _q21 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q21, 0) && types_match (_p1, _q21)))
14078 : : {
14079 : 0 : {
14080 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q21, _q20 };
14081 : 0 : if (gimple_simplify_241 (res_op, seq, valueize, type, captures, NE_EXPR))
14082 : 0 : return true;
14083 : : }
14084 : : }
14085 : : break;
14086 : : }
14087 : : default:;
14088 : : }
14089 : : break;
14090 : : }
14091 : : default:;
14092 : : }
14093 : : }
14094 : : break;
14095 : 128137602 : default:;
14096 : : }
14097 : 128137602 : switch (TREE_CODE (_p1))
14098 : : {
14099 : 22739949 : case SSA_NAME:
14100 : 22739949 : if (gimple *_d1 = get_def (valueize, _p1))
14101 : : {
14102 : 7188887 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
14103 : 10217456 : switch (gimple_assign_rhs_code (_a1))
14104 : : {
14105 : 392627 : CASE_CONVERT:
14106 : 392627 : {
14107 : 392627 : tree _q30 = gimple_assign_rhs1 (_a1);
14108 : 392627 : _q30 = do_valueize (valueize, _q30);
14109 : 392627 : switch (TREE_CODE (_q30))
14110 : : {
14111 : 375523 : case SSA_NAME:
14112 : 375523 : if (gimple *_d2 = get_def (valueize, _q30))
14113 : : {
14114 : 354619 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
14115 : 423869 : switch (gimple_assign_rhs_code (_a2))
14116 : : {
14117 : 6062 : case MINUS_EXPR:
14118 : 6062 : {
14119 : 6062 : tree _q40 = gimple_assign_rhs1 (_a2);
14120 : 6062 : _q40 = do_valueize (valueize, _q40);
14121 : 6062 : tree _q41 = gimple_assign_rhs2 (_a2);
14122 : 6062 : _q41 = do_valueize (valueize, _q41);
14123 : 6062 : switch (TREE_CODE (_q40))
14124 : : {
14125 : 2004 : case INTEGER_CST:
14126 : 2004 : {
14127 : 2004 : switch (TREE_CODE (_q41))
14128 : : {
14129 : 2004 : case SSA_NAME:
14130 : 2004 : if (gimple *_d3 = get_def (valueize, _q41))
14131 : : {
14132 : 1780 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
14133 : 1115 : switch (gimple_assign_rhs_code (_a3))
14134 : : {
14135 : 908 : CASE_CONVERT:
14136 : 908 : {
14137 : 908 : tree _q60 = gimple_assign_rhs1 (_a3);
14138 : 908 : _q60 = do_valueize (valueize, _q60);
14139 : 908 : if ((_q60 == _p0 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _p0, 0) && types_match (_q60, _p0)))
14140 : : {
14141 : 0 : {
14142 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q40 };
14143 : 0 : if (gimple_simplify_241 (res_op, seq, valueize, type, captures, NE_EXPR))
14144 : 0 : return true;
14145 : : }
14146 : : }
14147 : : break;
14148 : : }
14149 : : default:;
14150 : : }
14151 : : }
14152 : : break;
14153 : 2004 : default:;
14154 : : }
14155 : 2004 : if ((_q41 == _p0 && ! TREE_SIDE_EFFECTS (_q41)) || (operand_equal_p (_q41, _p0, 0) && types_match (_q41, _p0)))
14156 : : {
14157 : 0 : {
14158 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q40 };
14159 : 0 : if (gimple_simplify_241 (res_op, seq, valueize, type, captures, NE_EXPR))
14160 : 0 : return true;
14161 : : }
14162 : : }
14163 : : break;
14164 : : }
14165 : : default:;
14166 : : }
14167 : : break;
14168 : : }
14169 : : default:;
14170 : : }
14171 : : }
14172 : : break;
14173 : : default:;
14174 : : }
14175 : : break;
14176 : : }
14177 : 159220 : case MINUS_EXPR:
14178 : 159220 : {
14179 : 159220 : tree _q30 = gimple_assign_rhs1 (_a1);
14180 : 159220 : _q30 = do_valueize (valueize, _q30);
14181 : 159220 : tree _q31 = gimple_assign_rhs2 (_a1);
14182 : 159220 : _q31 = do_valueize (valueize, _q31);
14183 : 159220 : switch (TREE_CODE (_q30))
14184 : : {
14185 : 3423 : case INTEGER_CST:
14186 : 3423 : {
14187 : 3423 : switch (TREE_CODE (_q31))
14188 : : {
14189 : 3423 : case SSA_NAME:
14190 : 3423 : if (gimple *_d2 = get_def (valueize, _q31))
14191 : : {
14192 : 3224 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
14193 : 2495 : switch (gimple_assign_rhs_code (_a2))
14194 : : {
14195 : 1338 : CASE_CONVERT:
14196 : 1338 : {
14197 : 1338 : tree _q50 = gimple_assign_rhs1 (_a2);
14198 : 1338 : _q50 = do_valueize (valueize, _q50);
14199 : 1338 : if ((_q50 == _p0 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _p0, 0) && types_match (_q50, _p0)))
14200 : : {
14201 : 0 : {
14202 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q30 };
14203 : 0 : if (gimple_simplify_241 (res_op, seq, valueize, type, captures, NE_EXPR))
14204 : 0 : return true;
14205 : : }
14206 : : }
14207 : : break;
14208 : : }
14209 : : default:;
14210 : : }
14211 : : }
14212 : : break;
14213 : 3423 : default:;
14214 : : }
14215 : 3423 : if ((_q31 == _p0 && ! TREE_SIDE_EFFECTS (_q31)) || (operand_equal_p (_q31, _p0, 0) && types_match (_q31, _p0)))
14216 : : {
14217 : 0 : {
14218 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q30 };
14219 : 0 : if (gimple_simplify_241 (res_op, seq, valueize, type, captures, NE_EXPR))
14220 : 0 : return true;
14221 : : }
14222 : : }
14223 : : break;
14224 : : }
14225 : : default:;
14226 : : }
14227 : : break;
14228 : : }
14229 : : default:;
14230 : : }
14231 : : }
14232 : : break;
14233 : 128137602 : default:;
14234 : : }
14235 : 128137602 : switch (TREE_CODE (_p0))
14236 : : {
14237 : 125214247 : case SSA_NAME:
14238 : 125214247 : if (gimple *_d1 = get_def (valueize, _p0))
14239 : : {
14240 : 42893002 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
14241 : 46821026 : switch (gimple_assign_rhs_code (_a1))
14242 : : {
14243 : 220842 : case LT_EXPR:
14244 : 220842 : {
14245 : 220842 : tree _q20 = gimple_assign_rhs1 (_a1);
14246 : 220842 : _q20 = do_valueize (valueize, _q20);
14247 : 220842 : tree _q21 = gimple_assign_rhs2 (_a1);
14248 : 220842 : _q21 = do_valueize (valueize, _q21);
14249 : 220842 : switch (TREE_CODE (_p1))
14250 : : {
14251 : 1303 : case SSA_NAME:
14252 : 1303 : if (gimple *_d2 = get_def (valueize, _p1))
14253 : : {
14254 : 1282 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
14255 : 1077 : switch (gimple_assign_rhs_code (_a2))
14256 : : {
14257 : 18 : case GT_EXPR:
14258 : 18 : {
14259 : 18 : tree _q50 = gimple_assign_rhs1 (_a2);
14260 : 18 : _q50 = do_valueize (valueize, _q50);
14261 : 18 : tree _q51 = gimple_assign_rhs2 (_a2);
14262 : 18 : _q51 = do_valueize (valueize, _q51);
14263 : 18 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
14264 : : {
14265 : 14 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
14266 : : {
14267 : 14 : {
14268 : 14 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
14269 : 14 : const enum tree_code cmp1 = LT_EXPR;
14270 : 14 : const enum tree_code cmp2 = GT_EXPR;
14271 : 14 : const enum tree_code rcmp = NE_EXPR;
14272 : 14 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[0])) || POINTER_TYPE_P (TREE_TYPE (captures[0]))
14273 : : )
14274 : : {
14275 : 14 : gimple_seq *lseq = seq;
14276 : 14 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2267;
14277 : 14 : {
14278 : 14 : res_op->set_op (rcmp, type, 2);
14279 : 14 : res_op->ops[0] = captures[0];
14280 : 14 : res_op->ops[1] = captures[1];
14281 : 14 : res_op->resimplify (lseq, valueize);
14282 : 14 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1031, __FILE__, __LINE__, true);
14283 : 14 : return true;
14284 : : }
14285 : 0 : next_after_fail2267:;
14286 : : }
14287 : : }
14288 : : }
14289 : : }
14290 : : break;
14291 : : }
14292 : 113 : case EQ_EXPR:
14293 : 113 : {
14294 : 113 : tree _q50 = gimple_assign_rhs1 (_a2);
14295 : 113 : _q50 = do_valueize (valueize, _q50);
14296 : 113 : tree _q51 = gimple_assign_rhs2 (_a2);
14297 : 113 : _q51 = do_valueize (valueize, _q51);
14298 : 113 : if (tree_swap_operands_p (_q50, _q51))
14299 : 0 : std::swap (_q50, _q51);
14300 : 113 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
14301 : : {
14302 : 14 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
14303 : : {
14304 : 14 : {
14305 : 14 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
14306 : 14 : const enum tree_code cmp1 = LT_EXPR;
14307 : 14 : const enum tree_code cmp2 = EQ_EXPR;
14308 : 14 : const enum tree_code rcmp = LE_EXPR;
14309 : 14 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[0])) || POINTER_TYPE_P (TREE_TYPE (captures[0]))
14310 : : )
14311 : : {
14312 : 14 : gimple_seq *lseq = seq;
14313 : 14 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2268;
14314 : 14 : {
14315 : 14 : res_op->set_op (rcmp, type, 2);
14316 : 14 : res_op->ops[0] = captures[0];
14317 : 14 : res_op->ops[1] = captures[1];
14318 : 14 : res_op->resimplify (lseq, valueize);
14319 : 14 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1031, __FILE__, __LINE__, true);
14320 : 14 : return true;
14321 : : }
14322 : 0 : next_after_fail2268:;
14323 : : }
14324 : : }
14325 : : }
14326 : : }
14327 : 128132437 : break;
14328 : : }
14329 : 115 : case NE_EXPR:
14330 : 115 : {
14331 : 115 : tree _q50 = gimple_assign_rhs1 (_a2);
14332 : 115 : _q50 = do_valueize (valueize, _q50);
14333 : 115 : tree _q51 = gimple_assign_rhs2 (_a2);
14334 : 115 : _q51 = do_valueize (valueize, _q51);
14335 : 115 : if (tree_swap_operands_p (_q50, _q51))
14336 : 13 : std::swap (_q50, _q51);
14337 : 115 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
14338 : : {
14339 : 53 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
14340 : : {
14341 : 14 : {
14342 : 14 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
14343 : 14 : const enum tree_code cmp1 = LT_EXPR;
14344 : 14 : const enum tree_code cmp2 = NE_EXPR;
14345 : 14 : const enum tree_code rcmp = GT_EXPR;
14346 : 14 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[0])) || POINTER_TYPE_P (TREE_TYPE (captures[0]))
14347 : : )
14348 : : {
14349 : 14 : gimple_seq *lseq = seq;
14350 : 14 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2269;
14351 : 14 : {
14352 : 14 : res_op->set_op (rcmp, type, 2);
14353 : 14 : res_op->ops[0] = captures[0];
14354 : 14 : res_op->ops[1] = captures[1];
14355 : 14 : res_op->resimplify (lseq, valueize);
14356 : 14 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1031, __FILE__, __LINE__, true);
14357 : 14 : return true;
14358 : : }
14359 : 0 : next_after_fail2269:;
14360 : : }
14361 : : }
14362 : : }
14363 : : }
14364 : 128132437 : break;
14365 : : }
14366 : : default:;
14367 : : }
14368 : : }
14369 : : break;
14370 : : default:;
14371 : : }
14372 : : break;
14373 : : }
14374 : 107818 : case LE_EXPR:
14375 : 107818 : {
14376 : 107818 : tree _q20 = gimple_assign_rhs1 (_a1);
14377 : 107818 : _q20 = do_valueize (valueize, _q20);
14378 : 107818 : tree _q21 = gimple_assign_rhs2 (_a1);
14379 : 107818 : _q21 = do_valueize (valueize, _q21);
14380 : 107818 : switch (TREE_CODE (_p1))
14381 : : {
14382 : 2633 : case SSA_NAME:
14383 : 2633 : if (gimple *_d2 = get_def (valueize, _p1))
14384 : : {
14385 : 2604 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
14386 : 2566 : switch (gimple_assign_rhs_code (_a2))
14387 : : {
14388 : 67 : case GE_EXPR:
14389 : 67 : {
14390 : 67 : tree _q50 = gimple_assign_rhs1 (_a2);
14391 : 67 : _q50 = do_valueize (valueize, _q50);
14392 : 67 : tree _q51 = gimple_assign_rhs2 (_a2);
14393 : 67 : _q51 = do_valueize (valueize, _q51);
14394 : 67 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
14395 : : {
14396 : 14 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
14397 : : {
14398 : 14 : {
14399 : 14 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
14400 : 14 : const enum tree_code cmp1 = LE_EXPR;
14401 : 14 : const enum tree_code cmp2 = GE_EXPR;
14402 : 14 : const enum tree_code rcmp = NE_EXPR;
14403 : 14 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[0])) || POINTER_TYPE_P (TREE_TYPE (captures[0]))
14404 : : )
14405 : : {
14406 : 14 : gimple_seq *lseq = seq;
14407 : 14 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2270;
14408 : 14 : {
14409 : 14 : res_op->set_op (rcmp, type, 2);
14410 : 14 : res_op->ops[0] = captures[0];
14411 : 14 : res_op->ops[1] = captures[1];
14412 : 14 : res_op->resimplify (lseq, valueize);
14413 : 14 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1031, __FILE__, __LINE__, true);
14414 : 14 : return true;
14415 : : }
14416 : 0 : next_after_fail2270:;
14417 : : }
14418 : : }
14419 : : }
14420 : : }
14421 : : break;
14422 : : }
14423 : 213 : case EQ_EXPR:
14424 : 213 : {
14425 : 213 : tree _q50 = gimple_assign_rhs1 (_a2);
14426 : 213 : _q50 = do_valueize (valueize, _q50);
14427 : 213 : tree _q51 = gimple_assign_rhs2 (_a2);
14428 : 213 : _q51 = do_valueize (valueize, _q51);
14429 : 213 : if (tree_swap_operands_p (_q50, _q51))
14430 : 13 : std::swap (_q50, _q51);
14431 : 213 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
14432 : : {
14433 : 53 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
14434 : : {
14435 : 14 : {
14436 : 14 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
14437 : 14 : const enum tree_code cmp1 = LE_EXPR;
14438 : 14 : const enum tree_code cmp2 = EQ_EXPR;
14439 : 14 : const enum tree_code rcmp = LT_EXPR;
14440 : 14 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[0])) || POINTER_TYPE_P (TREE_TYPE (captures[0]))
14441 : : )
14442 : : {
14443 : 14 : gimple_seq *lseq = seq;
14444 : 14 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2271;
14445 : 14 : {
14446 : 14 : res_op->set_op (rcmp, type, 2);
14447 : 14 : res_op->ops[0] = captures[0];
14448 : 14 : res_op->ops[1] = captures[1];
14449 : 14 : res_op->resimplify (lseq, valueize);
14450 : 14 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1031, __FILE__, __LINE__, true);
14451 : 14 : return true;
14452 : : }
14453 : 0 : next_after_fail2271:;
14454 : : }
14455 : : }
14456 : : }
14457 : : }
14458 : 128132437 : break;
14459 : : }
14460 : 89 : case NE_EXPR:
14461 : 89 : {
14462 : 89 : tree _q50 = gimple_assign_rhs1 (_a2);
14463 : 89 : _q50 = do_valueize (valueize, _q50);
14464 : 89 : tree _q51 = gimple_assign_rhs2 (_a2);
14465 : 89 : _q51 = do_valueize (valueize, _q51);
14466 : 89 : if (tree_swap_operands_p (_q50, _q51))
14467 : 0 : std::swap (_q50, _q51);
14468 : 89 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
14469 : : {
14470 : 14 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
14471 : : {
14472 : 14 : {
14473 : 14 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
14474 : 14 : const enum tree_code cmp1 = LE_EXPR;
14475 : 14 : const enum tree_code cmp2 = NE_EXPR;
14476 : 14 : const enum tree_code rcmp = GE_EXPR;
14477 : 14 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[0])) || POINTER_TYPE_P (TREE_TYPE (captures[0]))
14478 : : )
14479 : : {
14480 : 14 : gimple_seq *lseq = seq;
14481 : 14 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2272;
14482 : 14 : {
14483 : 14 : res_op->set_op (rcmp, type, 2);
14484 : 14 : res_op->ops[0] = captures[0];
14485 : 14 : res_op->ops[1] = captures[1];
14486 : 14 : res_op->resimplify (lseq, valueize);
14487 : 14 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1031, __FILE__, __LINE__, true);
14488 : 14 : return true;
14489 : : }
14490 : 0 : next_after_fail2272:;
14491 : : }
14492 : : }
14493 : : }
14494 : : }
14495 : 128132437 : break;
14496 : : }
14497 : : default:;
14498 : : }
14499 : : }
14500 : : break;
14501 : : default:;
14502 : : }
14503 : : break;
14504 : : }
14505 : 250671 : case GT_EXPR:
14506 : 250671 : {
14507 : 250671 : tree _q20 = gimple_assign_rhs1 (_a1);
14508 : 250671 : _q20 = do_valueize (valueize, _q20);
14509 : 250671 : tree _q21 = gimple_assign_rhs2 (_a1);
14510 : 250671 : _q21 = do_valueize (valueize, _q21);
14511 : 250671 : switch (TREE_CODE (_p1))
14512 : : {
14513 : 1177 : case SSA_NAME:
14514 : 1177 : if (gimple *_d2 = get_def (valueize, _p1))
14515 : : {
14516 : 1150 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
14517 : 1075 : switch (gimple_assign_rhs_code (_a2))
14518 : : {
14519 : 165 : case GT_EXPR:
14520 : 165 : {
14521 : 165 : tree _q50 = gimple_assign_rhs1 (_a2);
14522 : 165 : _q50 = do_valueize (valueize, _q50);
14523 : 165 : tree _q51 = gimple_assign_rhs2 (_a2);
14524 : 165 : _q51 = do_valueize (valueize, _q51);
14525 : 165 : if ((_q50 == _q21 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q21, 0) && types_match (_q50, _q21)))
14526 : : {
14527 : 0 : if ((_q51 == _q20 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q20, 0) && types_match (_q51, _q20)))
14528 : : {
14529 : 0 : {
14530 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q21, _q20 };
14531 : 0 : const enum tree_code cmp1 = LT_EXPR;
14532 : 0 : const enum tree_code cmp2 = GT_EXPR;
14533 : 0 : const enum tree_code rcmp = NE_EXPR;
14534 : 0 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[0])) || POINTER_TYPE_P (TREE_TYPE (captures[0]))
14535 : : )
14536 : : {
14537 : 0 : gimple_seq *lseq = seq;
14538 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2273;
14539 : 0 : {
14540 : 0 : res_op->set_op (rcmp, type, 2);
14541 : 0 : res_op->ops[0] = captures[0];
14542 : 0 : res_op->ops[1] = captures[1];
14543 : 0 : res_op->resimplify (lseq, valueize);
14544 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1031, __FILE__, __LINE__, true);
14545 : 0 : return true;
14546 : : }
14547 : 0 : next_after_fail2273:;
14548 : : }
14549 : : }
14550 : 0 : {
14551 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
14552 : 0 : const enum tree_code cmp1 = LT_EXPR;
14553 : 0 : const enum tree_code cmp2 = GT_EXPR;
14554 : 0 : const enum tree_code rcmp = NE_EXPR;
14555 : 0 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[0])) || POINTER_TYPE_P (TREE_TYPE (captures[0]))
14556 : : )
14557 : : {
14558 : 0 : gimple_seq *lseq = seq;
14559 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2274;
14560 : 0 : {
14561 : 0 : res_op->set_op (rcmp, type, 2);
14562 : 0 : res_op->ops[0] = captures[0];
14563 : 0 : res_op->ops[1] = captures[1];
14564 : 0 : res_op->resimplify (lseq, valueize);
14565 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1031, __FILE__, __LINE__, true);
14566 : 0 : return true;
14567 : : }
14568 : 0 : next_after_fail2274:;
14569 : : }
14570 : : }
14571 : : }
14572 : : }
14573 : : break;
14574 : : }
14575 : 128 : case EQ_EXPR:
14576 : 128 : {
14577 : 128 : tree _q50 = gimple_assign_rhs1 (_a2);
14578 : 128 : _q50 = do_valueize (valueize, _q50);
14579 : 128 : tree _q51 = gimple_assign_rhs2 (_a2);
14580 : 128 : _q51 = do_valueize (valueize, _q51);
14581 : 128 : if (tree_swap_operands_p (_q50, _q51))
14582 : 0 : std::swap (_q50, _q51);
14583 : 128 : if ((_q50 == _q21 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q21, 0) && types_match (_q50, _q21)))
14584 : : {
14585 : 0 : if ((_q51 == _q20 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q20, 0) && types_match (_q51, _q20)))
14586 : : {
14587 : 0 : {
14588 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q21, _q20 };
14589 : 0 : const enum tree_code cmp1 = LT_EXPR;
14590 : 0 : const enum tree_code cmp2 = EQ_EXPR;
14591 : 0 : const enum tree_code rcmp = LE_EXPR;
14592 : 0 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[0])) || POINTER_TYPE_P (TREE_TYPE (captures[0]))
14593 : : )
14594 : : {
14595 : 0 : gimple_seq *lseq = seq;
14596 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2275;
14597 : 0 : {
14598 : 0 : res_op->set_op (rcmp, type, 2);
14599 : 0 : res_op->ops[0] = captures[0];
14600 : 0 : res_op->ops[1] = captures[1];
14601 : 0 : res_op->resimplify (lseq, valueize);
14602 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1031, __FILE__, __LINE__, true);
14603 : 0 : return true;
14604 : : }
14605 : 0 : next_after_fail2275:;
14606 : : }
14607 : : }
14608 : : }
14609 : : }
14610 : 128132437 : break;
14611 : : }
14612 : 203 : case NE_EXPR:
14613 : 203 : {
14614 : 203 : tree _q50 = gimple_assign_rhs1 (_a2);
14615 : 203 : _q50 = do_valueize (valueize, _q50);
14616 : 203 : tree _q51 = gimple_assign_rhs2 (_a2);
14617 : 203 : _q51 = do_valueize (valueize, _q51);
14618 : 203 : if (tree_swap_operands_p (_q50, _q51))
14619 : 13 : std::swap (_q50, _q51);
14620 : 203 : if ((_q50 == _q21 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q21, 0) && types_match (_q50, _q21)))
14621 : : {
14622 : 0 : if ((_q51 == _q20 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q20, 0) && types_match (_q51, _q20)))
14623 : : {
14624 : 0 : {
14625 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q21, _q20 };
14626 : 0 : const enum tree_code cmp1 = LT_EXPR;
14627 : 0 : const enum tree_code cmp2 = NE_EXPR;
14628 : 0 : const enum tree_code rcmp = GT_EXPR;
14629 : 0 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[0])) || POINTER_TYPE_P (TREE_TYPE (captures[0]))
14630 : : )
14631 : : {
14632 : 0 : gimple_seq *lseq = seq;
14633 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2276;
14634 : 0 : {
14635 : 0 : res_op->set_op (rcmp, type, 2);
14636 : 0 : res_op->ops[0] = captures[0];
14637 : 0 : res_op->ops[1] = captures[1];
14638 : 0 : res_op->resimplify (lseq, valueize);
14639 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1031, __FILE__, __LINE__, true);
14640 : 0 : return true;
14641 : : }
14642 : 0 : next_after_fail2276:;
14643 : : }
14644 : : }
14645 : : }
14646 : : }
14647 : 128132437 : break;
14648 : : }
14649 : 116 : case LT_EXPR:
14650 : 116 : {
14651 : 116 : tree _q50 = gimple_assign_rhs1 (_a2);
14652 : 116 : _q50 = do_valueize (valueize, _q50);
14653 : 116 : tree _q51 = gimple_assign_rhs2 (_a2);
14654 : 116 : _q51 = do_valueize (valueize, _q51);
14655 : 116 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
14656 : : {
14657 : 14 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
14658 : : {
14659 : 14 : {
14660 : 14 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
14661 : 14 : const enum tree_code cmp1 = LT_EXPR;
14662 : 14 : const enum tree_code cmp2 = GT_EXPR;
14663 : 14 : const enum tree_code rcmp = NE_EXPR;
14664 : 14 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[0])) || POINTER_TYPE_P (TREE_TYPE (captures[0]))
14665 : : )
14666 : : {
14667 : 14 : gimple_seq *lseq = seq;
14668 : 14 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2277;
14669 : 14 : {
14670 : 14 : res_op->set_op (rcmp, type, 2);
14671 : 14 : res_op->ops[0] = captures[0];
14672 : 14 : res_op->ops[1] = captures[1];
14673 : 14 : res_op->resimplify (lseq, valueize);
14674 : 14 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1031, __FILE__, __LINE__, true);
14675 : 14 : return true;
14676 : : }
14677 : 0 : next_after_fail2277:;
14678 : : }
14679 : : }
14680 : : }
14681 : : }
14682 : : break;
14683 : : }
14684 : : default:;
14685 : : }
14686 : : }
14687 : : break;
14688 : : default:;
14689 : : }
14690 : : break;
14691 : : }
14692 : 121905 : case GE_EXPR:
14693 : 121905 : {
14694 : 121905 : tree _q20 = gimple_assign_rhs1 (_a1);
14695 : 121905 : _q20 = do_valueize (valueize, _q20);
14696 : 121905 : tree _q21 = gimple_assign_rhs2 (_a1);
14697 : 121905 : _q21 = do_valueize (valueize, _q21);
14698 : 121905 : switch (TREE_CODE (_p1))
14699 : : {
14700 : 2191 : case SSA_NAME:
14701 : 2191 : if (gimple *_d2 = get_def (valueize, _p1))
14702 : : {
14703 : 2161 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
14704 : 2123 : switch (gimple_assign_rhs_code (_a2))
14705 : : {
14706 : 149 : case GE_EXPR:
14707 : 149 : {
14708 : 149 : tree _q50 = gimple_assign_rhs1 (_a2);
14709 : 149 : _q50 = do_valueize (valueize, _q50);
14710 : 149 : tree _q51 = gimple_assign_rhs2 (_a2);
14711 : 149 : _q51 = do_valueize (valueize, _q51);
14712 : 149 : if ((_q50 == _q21 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q21, 0) && types_match (_q50, _q21)))
14713 : : {
14714 : 0 : if ((_q51 == _q20 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q20, 0) && types_match (_q51, _q20)))
14715 : : {
14716 : 0 : {
14717 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q21, _q20 };
14718 : 0 : const enum tree_code cmp1 = LE_EXPR;
14719 : 0 : const enum tree_code cmp2 = GE_EXPR;
14720 : 0 : const enum tree_code rcmp = NE_EXPR;
14721 : 0 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[0])) || POINTER_TYPE_P (TREE_TYPE (captures[0]))
14722 : : )
14723 : : {
14724 : 0 : gimple_seq *lseq = seq;
14725 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2278;
14726 : 0 : {
14727 : 0 : res_op->set_op (rcmp, type, 2);
14728 : 0 : res_op->ops[0] = captures[0];
14729 : 0 : res_op->ops[1] = captures[1];
14730 : 0 : res_op->resimplify (lseq, valueize);
14731 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1031, __FILE__, __LINE__, true);
14732 : 0 : return true;
14733 : : }
14734 : 0 : next_after_fail2278:;
14735 : : }
14736 : : }
14737 : 0 : {
14738 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
14739 : 0 : const enum tree_code cmp1 = LE_EXPR;
14740 : 0 : const enum tree_code cmp2 = GE_EXPR;
14741 : 0 : const enum tree_code rcmp = NE_EXPR;
14742 : 0 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[0])) || POINTER_TYPE_P (TREE_TYPE (captures[0]))
14743 : : )
14744 : : {
14745 : 0 : gimple_seq *lseq = seq;
14746 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2279;
14747 : 0 : {
14748 : 0 : res_op->set_op (rcmp, type, 2);
14749 : 0 : res_op->ops[0] = captures[0];
14750 : 0 : res_op->ops[1] = captures[1];
14751 : 0 : res_op->resimplify (lseq, valueize);
14752 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1031, __FILE__, __LINE__, true);
14753 : 0 : return true;
14754 : : }
14755 : 0 : next_after_fail2279:;
14756 : : }
14757 : : }
14758 : : }
14759 : : }
14760 : : break;
14761 : : }
14762 : 212 : case EQ_EXPR:
14763 : 212 : {
14764 : 212 : tree _q50 = gimple_assign_rhs1 (_a2);
14765 : 212 : _q50 = do_valueize (valueize, _q50);
14766 : 212 : tree _q51 = gimple_assign_rhs2 (_a2);
14767 : 212 : _q51 = do_valueize (valueize, _q51);
14768 : 212 : if (tree_swap_operands_p (_q50, _q51))
14769 : 13 : std::swap (_q50, _q51);
14770 : 212 : if ((_q50 == _q21 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q21, 0) && types_match (_q50, _q21)))
14771 : : {
14772 : 0 : if ((_q51 == _q20 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q20, 0) && types_match (_q51, _q20)))
14773 : : {
14774 : 0 : {
14775 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q21, _q20 };
14776 : 0 : const enum tree_code cmp1 = LE_EXPR;
14777 : 0 : const enum tree_code cmp2 = EQ_EXPR;
14778 : 0 : const enum tree_code rcmp = LT_EXPR;
14779 : 0 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[0])) || POINTER_TYPE_P (TREE_TYPE (captures[0]))
14780 : : )
14781 : : {
14782 : 0 : gimple_seq *lseq = seq;
14783 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2280;
14784 : 0 : {
14785 : 0 : res_op->set_op (rcmp, type, 2);
14786 : 0 : res_op->ops[0] = captures[0];
14787 : 0 : res_op->ops[1] = captures[1];
14788 : 0 : res_op->resimplify (lseq, valueize);
14789 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1031, __FILE__, __LINE__, true);
14790 : 0 : return true;
14791 : : }
14792 : 0 : next_after_fail2280:;
14793 : : }
14794 : : }
14795 : : }
14796 : : }
14797 : 128132437 : break;
14798 : : }
14799 : 30 : case NE_EXPR:
14800 : 30 : {
14801 : 30 : tree _q50 = gimple_assign_rhs1 (_a2);
14802 : 30 : _q50 = do_valueize (valueize, _q50);
14803 : 30 : tree _q51 = gimple_assign_rhs2 (_a2);
14804 : 30 : _q51 = do_valueize (valueize, _q51);
14805 : 30 : if (tree_swap_operands_p (_q50, _q51))
14806 : 0 : std::swap (_q50, _q51);
14807 : 30 : if ((_q50 == _q21 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q21, 0) && types_match (_q50, _q21)))
14808 : : {
14809 : 0 : if ((_q51 == _q20 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q20, 0) && types_match (_q51, _q20)))
14810 : : {
14811 : 0 : {
14812 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q21, _q20 };
14813 : 0 : const enum tree_code cmp1 = LE_EXPR;
14814 : 0 : const enum tree_code cmp2 = NE_EXPR;
14815 : 0 : const enum tree_code rcmp = GE_EXPR;
14816 : 0 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[0])) || POINTER_TYPE_P (TREE_TYPE (captures[0]))
14817 : : )
14818 : : {
14819 : 0 : gimple_seq *lseq = seq;
14820 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2281;
14821 : 0 : {
14822 : 0 : res_op->set_op (rcmp, type, 2);
14823 : 0 : res_op->ops[0] = captures[0];
14824 : 0 : res_op->ops[1] = captures[1];
14825 : 0 : res_op->resimplify (lseq, valueize);
14826 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1031, __FILE__, __LINE__, true);
14827 : 0 : return true;
14828 : : }
14829 : 0 : next_after_fail2281:;
14830 : : }
14831 : : }
14832 : : }
14833 : : }
14834 : 128132437 : break;
14835 : : }
14836 : 69 : case LE_EXPR:
14837 : 69 : {
14838 : 69 : tree _q50 = gimple_assign_rhs1 (_a2);
14839 : 69 : _q50 = do_valueize (valueize, _q50);
14840 : 69 : tree _q51 = gimple_assign_rhs2 (_a2);
14841 : 69 : _q51 = do_valueize (valueize, _q51);
14842 : 69 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
14843 : : {
14844 : 14 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
14845 : : {
14846 : 14 : {
14847 : 14 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
14848 : 14 : const enum tree_code cmp1 = LE_EXPR;
14849 : 14 : const enum tree_code cmp2 = GE_EXPR;
14850 : 14 : const enum tree_code rcmp = NE_EXPR;
14851 : 14 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[0])) || POINTER_TYPE_P (TREE_TYPE (captures[0]))
14852 : : )
14853 : : {
14854 : 14 : gimple_seq *lseq = seq;
14855 : 14 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2282;
14856 : 14 : {
14857 : 14 : res_op->set_op (rcmp, type, 2);
14858 : 14 : res_op->ops[0] = captures[0];
14859 : 14 : res_op->ops[1] = captures[1];
14860 : 14 : res_op->resimplify (lseq, valueize);
14861 : 14 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1031, __FILE__, __LINE__, true);
14862 : 14 : return true;
14863 : : }
14864 : 0 : next_after_fail2282:;
14865 : : }
14866 : : }
14867 : : }
14868 : : }
14869 : : break;
14870 : : }
14871 : : default:;
14872 : : }
14873 : : }
14874 : : break;
14875 : : default:;
14876 : : }
14877 : : break;
14878 : : }
14879 : 524338 : case EQ_EXPR:
14880 : 524338 : {
14881 : 524338 : tree _q20 = gimple_assign_rhs1 (_a1);
14882 : 524338 : _q20 = do_valueize (valueize, _q20);
14883 : 524338 : tree _q21 = gimple_assign_rhs2 (_a1);
14884 : 524338 : _q21 = do_valueize (valueize, _q21);
14885 : 524338 : if (tree_swap_operands_p (_q20, _q21))
14886 : 6486 : std::swap (_q20, _q21);
14887 : 524338 : switch (TREE_CODE (_p1))
14888 : : {
14889 : 7166 : case SSA_NAME:
14890 : 7166 : if (gimple *_d2 = get_def (valueize, _p1))
14891 : : {
14892 : 7074 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
14893 : 7294 : switch (gimple_assign_rhs_code (_a2))
14894 : : {
14895 : 10 : case LT_EXPR:
14896 : 10 : {
14897 : 10 : tree _q50 = gimple_assign_rhs1 (_a2);
14898 : 10 : _q50 = do_valueize (valueize, _q50);
14899 : 10 : tree _q51 = gimple_assign_rhs2 (_a2);
14900 : 10 : _q51 = do_valueize (valueize, _q51);
14901 : 10 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
14902 : : {
14903 : 0 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
14904 : : {
14905 : 0 : {
14906 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
14907 : 0 : const enum tree_code cmp1 = LT_EXPR;
14908 : 0 : const enum tree_code cmp2 = EQ_EXPR;
14909 : 0 : const enum tree_code rcmp = LE_EXPR;
14910 : 0 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[0])) || POINTER_TYPE_P (TREE_TYPE (captures[0]))
14911 : : )
14912 : : {
14913 : 0 : gimple_seq *lseq = seq;
14914 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2283;
14915 : 0 : {
14916 : 0 : res_op->set_op (rcmp, type, 2);
14917 : 0 : res_op->ops[0] = captures[0];
14918 : 0 : res_op->ops[1] = captures[1];
14919 : 0 : res_op->resimplify (lseq, valueize);
14920 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1031, __FILE__, __LINE__, true);
14921 : 0 : return true;
14922 : : }
14923 : 0 : next_after_fail2283:;
14924 : : }
14925 : : }
14926 : : }
14927 : : }
14928 : : break;
14929 : : }
14930 : 132 : case LE_EXPR:
14931 : 132 : {
14932 : 132 : tree _q50 = gimple_assign_rhs1 (_a2);
14933 : 132 : _q50 = do_valueize (valueize, _q50);
14934 : 132 : tree _q51 = gimple_assign_rhs2 (_a2);
14935 : 132 : _q51 = do_valueize (valueize, _q51);
14936 : 132 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
14937 : : {
14938 : 14 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
14939 : : {
14940 : 0 : {
14941 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
14942 : 0 : const enum tree_code cmp1 = LE_EXPR;
14943 : 0 : const enum tree_code cmp2 = EQ_EXPR;
14944 : 0 : const enum tree_code rcmp = LT_EXPR;
14945 : 0 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[0])) || POINTER_TYPE_P (TREE_TYPE (captures[0]))
14946 : : )
14947 : : {
14948 : 0 : gimple_seq *lseq = seq;
14949 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2284;
14950 : 0 : {
14951 : 0 : res_op->set_op (rcmp, type, 2);
14952 : 0 : res_op->ops[0] = captures[0];
14953 : 0 : res_op->ops[1] = captures[1];
14954 : 0 : res_op->resimplify (lseq, valueize);
14955 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1031, __FILE__, __LINE__, true);
14956 : 0 : return true;
14957 : : }
14958 : 0 : next_after_fail2284:;
14959 : : }
14960 : : }
14961 : : }
14962 : : }
14963 : : break;
14964 : : }
14965 : 16 : case GT_EXPR:
14966 : 16 : {
14967 : 16 : tree _q50 = gimple_assign_rhs1 (_a2);
14968 : 16 : _q50 = do_valueize (valueize, _q50);
14969 : 16 : tree _q51 = gimple_assign_rhs2 (_a2);
14970 : 16 : _q51 = do_valueize (valueize, _q51);
14971 : 16 : if ((_q50 == _q21 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q21, 0) && types_match (_q50, _q21)))
14972 : : {
14973 : 0 : if ((_q51 == _q20 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q20, 0) && types_match (_q51, _q20)))
14974 : : {
14975 : 0 : {
14976 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
14977 : 0 : const enum tree_code cmp1 = LT_EXPR;
14978 : 0 : const enum tree_code cmp2 = EQ_EXPR;
14979 : 0 : const enum tree_code rcmp = LE_EXPR;
14980 : 0 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[0])) || POINTER_TYPE_P (TREE_TYPE (captures[0]))
14981 : : )
14982 : : {
14983 : 0 : gimple_seq *lseq = seq;
14984 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2285;
14985 : 0 : {
14986 : 0 : res_op->set_op (rcmp, type, 2);
14987 : 0 : res_op->ops[0] = captures[0];
14988 : 0 : res_op->ops[1] = captures[1];
14989 : 0 : res_op->resimplify (lseq, valueize);
14990 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1031, __FILE__, __LINE__, true);
14991 : 0 : return true;
14992 : : }
14993 : 0 : next_after_fail2285:;
14994 : : }
14995 : : }
14996 : : }
14997 : : }
14998 : : break;
14999 : : }
15000 : 30 : case GE_EXPR:
15001 : 30 : {
15002 : 30 : tree _q50 = gimple_assign_rhs1 (_a2);
15003 : 30 : _q50 = do_valueize (valueize, _q50);
15004 : 30 : tree _q51 = gimple_assign_rhs2 (_a2);
15005 : 30 : _q51 = do_valueize (valueize, _q51);
15006 : 30 : if ((_q50 == _q21 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q21, 0) && types_match (_q50, _q21)))
15007 : : {
15008 : 0 : if ((_q51 == _q20 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q20, 0) && types_match (_q51, _q20)))
15009 : : {
15010 : 0 : {
15011 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
15012 : 0 : const enum tree_code cmp1 = LE_EXPR;
15013 : 0 : const enum tree_code cmp2 = EQ_EXPR;
15014 : 0 : const enum tree_code rcmp = LT_EXPR;
15015 : 0 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[0])) || POINTER_TYPE_P (TREE_TYPE (captures[0]))
15016 : : )
15017 : : {
15018 : 0 : gimple_seq *lseq = seq;
15019 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2286;
15020 : 0 : {
15021 : 0 : res_op->set_op (rcmp, type, 2);
15022 : 0 : res_op->ops[0] = captures[0];
15023 : 0 : res_op->ops[1] = captures[1];
15024 : 0 : res_op->resimplify (lseq, valueize);
15025 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1031, __FILE__, __LINE__, true);
15026 : 0 : return true;
15027 : : }
15028 : 0 : next_after_fail2286:;
15029 : : }
15030 : : }
15031 : : }
15032 : : }
15033 : : break;
15034 : : }
15035 : : default:;
15036 : : }
15037 : : }
15038 : : break;
15039 : : default:;
15040 : : }
15041 : 128132437 : break;
15042 : : }
15043 : 535005 : case NE_EXPR:
15044 : 535005 : {
15045 : 535005 : tree _q20 = gimple_assign_rhs1 (_a1);
15046 : 535005 : _q20 = do_valueize (valueize, _q20);
15047 : 535005 : tree _q21 = gimple_assign_rhs2 (_a1);
15048 : 535005 : _q21 = do_valueize (valueize, _q21);
15049 : 535005 : if (tree_swap_operands_p (_q20, _q21))
15050 : 7929 : std::swap (_q20, _q21);
15051 : 535005 : switch (TREE_CODE (_p1))
15052 : : {
15053 : 22580 : case SSA_NAME:
15054 : 22580 : if (gimple *_d2 = get_def (valueize, _p1))
15055 : : {
15056 : 22320 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
15057 : 27890 : switch (gimple_assign_rhs_code (_a2))
15058 : : {
15059 : 14 : case LT_EXPR:
15060 : 14 : {
15061 : 14 : tree _q50 = gimple_assign_rhs1 (_a2);
15062 : 14 : _q50 = do_valueize (valueize, _q50);
15063 : 14 : tree _q51 = gimple_assign_rhs2 (_a2);
15064 : 14 : _q51 = do_valueize (valueize, _q51);
15065 : 14 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
15066 : : {
15067 : 14 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
15068 : : {
15069 : 0 : {
15070 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
15071 : 0 : const enum tree_code cmp1 = LT_EXPR;
15072 : 0 : const enum tree_code cmp2 = NE_EXPR;
15073 : 0 : const enum tree_code rcmp = GT_EXPR;
15074 : 0 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[0])) || POINTER_TYPE_P (TREE_TYPE (captures[0]))
15075 : : )
15076 : : {
15077 : 0 : gimple_seq *lseq = seq;
15078 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2287;
15079 : 0 : {
15080 : 0 : res_op->set_op (rcmp, type, 2);
15081 : 0 : res_op->ops[0] = captures[0];
15082 : 0 : res_op->ops[1] = captures[1];
15083 : 0 : res_op->resimplify (lseq, valueize);
15084 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1031, __FILE__, __LINE__, true);
15085 : 0 : return true;
15086 : : }
15087 : 0 : next_after_fail2287:;
15088 : : }
15089 : : }
15090 : : }
15091 : : }
15092 : : break;
15093 : : }
15094 : 1198 : case LE_EXPR:
15095 : 1198 : {
15096 : 1198 : tree _q50 = gimple_assign_rhs1 (_a2);
15097 : 1198 : _q50 = do_valueize (valueize, _q50);
15098 : 1198 : tree _q51 = gimple_assign_rhs2 (_a2);
15099 : 1198 : _q51 = do_valueize (valueize, _q51);
15100 : 1198 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
15101 : : {
15102 : 0 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
15103 : : {
15104 : 0 : {
15105 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
15106 : 0 : const enum tree_code cmp1 = LE_EXPR;
15107 : 0 : const enum tree_code cmp2 = NE_EXPR;
15108 : 0 : const enum tree_code rcmp = GE_EXPR;
15109 : 0 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[0])) || POINTER_TYPE_P (TREE_TYPE (captures[0]))
15110 : : )
15111 : : {
15112 : 0 : gimple_seq *lseq = seq;
15113 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2288;
15114 : 0 : {
15115 : 0 : res_op->set_op (rcmp, type, 2);
15116 : 0 : res_op->ops[0] = captures[0];
15117 : 0 : res_op->ops[1] = captures[1];
15118 : 0 : res_op->resimplify (lseq, valueize);
15119 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1031, __FILE__, __LINE__, true);
15120 : 0 : return true;
15121 : : }
15122 : 0 : next_after_fail2288:;
15123 : : }
15124 : : }
15125 : : }
15126 : : }
15127 : : break;
15128 : : }
15129 : 1242 : case GT_EXPR:
15130 : 1242 : {
15131 : 1242 : tree _q50 = gimple_assign_rhs1 (_a2);
15132 : 1242 : _q50 = do_valueize (valueize, _q50);
15133 : 1242 : tree _q51 = gimple_assign_rhs2 (_a2);
15134 : 1242 : _q51 = do_valueize (valueize, _q51);
15135 : 1242 : if ((_q50 == _q21 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q21, 0) && types_match (_q50, _q21)))
15136 : : {
15137 : 0 : if ((_q51 == _q20 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q20, 0) && types_match (_q51, _q20)))
15138 : : {
15139 : 0 : {
15140 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
15141 : 0 : const enum tree_code cmp1 = LT_EXPR;
15142 : 0 : const enum tree_code cmp2 = NE_EXPR;
15143 : 0 : const enum tree_code rcmp = GT_EXPR;
15144 : 0 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[0])) || POINTER_TYPE_P (TREE_TYPE (captures[0]))
15145 : : )
15146 : : {
15147 : 0 : gimple_seq *lseq = seq;
15148 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2289;
15149 : 0 : {
15150 : 0 : res_op->set_op (rcmp, type, 2);
15151 : 0 : res_op->ops[0] = captures[0];
15152 : 0 : res_op->ops[1] = captures[1];
15153 : 0 : res_op->resimplify (lseq, valueize);
15154 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1031, __FILE__, __LINE__, true);
15155 : 0 : return true;
15156 : : }
15157 : 0 : next_after_fail2289:;
15158 : : }
15159 : : }
15160 : : }
15161 : : }
15162 : : break;
15163 : : }
15164 : 6 : case GE_EXPR:
15165 : 6 : {
15166 : 6 : tree _q50 = gimple_assign_rhs1 (_a2);
15167 : 6 : _q50 = do_valueize (valueize, _q50);
15168 : 6 : tree _q51 = gimple_assign_rhs2 (_a2);
15169 : 6 : _q51 = do_valueize (valueize, _q51);
15170 : 6 : if ((_q50 == _q21 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q21, 0) && types_match (_q50, _q21)))
15171 : : {
15172 : 0 : if ((_q51 == _q20 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q20, 0) && types_match (_q51, _q20)))
15173 : : {
15174 : 0 : {
15175 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
15176 : 0 : const enum tree_code cmp1 = LE_EXPR;
15177 : 0 : const enum tree_code cmp2 = NE_EXPR;
15178 : 0 : const enum tree_code rcmp = GE_EXPR;
15179 : 0 : if (INTEGRAL_TYPE_P (TREE_TYPE (captures[0])) || POINTER_TYPE_P (TREE_TYPE (captures[0]))
15180 : : )
15181 : : {
15182 : 0 : gimple_seq *lseq = seq;
15183 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2290;
15184 : 0 : {
15185 : 0 : res_op->set_op (rcmp, type, 2);
15186 : 0 : res_op->ops[0] = captures[0];
15187 : 0 : res_op->ops[1] = captures[1];
15188 : 0 : res_op->resimplify (lseq, valueize);
15189 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1031, __FILE__, __LINE__, true);
15190 : 0 : return true;
15191 : : }
15192 : 0 : next_after_fail2290:;
15193 : : }
15194 : : }
15195 : : }
15196 : : }
15197 : : break;
15198 : : }
15199 : : default:;
15200 : : }
15201 : : }
15202 : : break;
15203 : : default:;
15204 : : }
15205 : 128132437 : break;
15206 : : }
15207 : 30625 : case MIN_EXPR:
15208 : 30625 : {
15209 : 30625 : tree _q20 = gimple_assign_rhs1 (_a1);
15210 : 30625 : _q20 = do_valueize (valueize, _q20);
15211 : 30625 : tree _q21 = gimple_assign_rhs2 (_a1);
15212 : 30625 : _q21 = do_valueize (valueize, _q21);
15213 : 30625 : if (tree_swap_operands_p (_q20, _q21))
15214 : 4414 : std::swap (_q20, _q21);
15215 : 30625 : switch (TREE_CODE (_p1))
15216 : : {
15217 : 6805 : case SSA_NAME:
15218 : 6805 : if (gimple *_d2 = get_def (valueize, _p1))
15219 : : {
15220 : 6564 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
15221 : 7586 : switch (gimple_assign_rhs_code (_a2))
15222 : : {
15223 : 0 : case MAX_EXPR:
15224 : 0 : {
15225 : 0 : tree _q50 = gimple_assign_rhs1 (_a2);
15226 : 0 : _q50 = do_valueize (valueize, _q50);
15227 : 0 : tree _q51 = gimple_assign_rhs2 (_a2);
15228 : 0 : _q51 = do_valueize (valueize, _q51);
15229 : 0 : if (tree_swap_operands_p (_q50, _q51))
15230 : 0 : std::swap (_q50, _q51);
15231 : 0 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
15232 : : {
15233 : 0 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
15234 : : {
15235 : 0 : {
15236 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
15237 : 0 : if (!HONOR_NANS (captures[0])
15238 : : )
15239 : : {
15240 : 0 : gimple_seq *lseq = seq;
15241 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2291;
15242 : 0 : {
15243 : 0 : res_op->set_op (NE_EXPR, type, 2);
15244 : 0 : res_op->ops[0] = captures[0];
15245 : 0 : res_op->ops[1] = captures[1];
15246 : 0 : res_op->resimplify (lseq, valueize);
15247 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1032, __FILE__, __LINE__, true);
15248 : 0 : return true;
15249 : : }
15250 : 0 : next_after_fail2291:;
15251 : : }
15252 : : }
15253 : : }
15254 : : }
15255 : 0 : if ((_q50 == _q21 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q21, 0) && types_match (_q50, _q21)))
15256 : : {
15257 : 0 : if ((_q51 == _q20 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q20, 0) && types_match (_q51, _q20)))
15258 : : {
15259 : 0 : {
15260 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q21, _q20 };
15261 : 0 : if (!HONOR_NANS (captures[0])
15262 : : )
15263 : : {
15264 : 0 : gimple_seq *lseq = seq;
15265 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2292;
15266 : 0 : {
15267 : 0 : res_op->set_op (NE_EXPR, type, 2);
15268 : 0 : res_op->ops[0] = captures[0];
15269 : 0 : res_op->ops[1] = captures[1];
15270 : 0 : res_op->resimplify (lseq, valueize);
15271 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1032, __FILE__, __LINE__, true);
15272 : 0 : return true;
15273 : : }
15274 : 0 : next_after_fail2292:;
15275 : : }
15276 : : }
15277 : : }
15278 : : }
15279 : 30625 : break;
15280 : : }
15281 : : default:;
15282 : : }
15283 : : }
15284 : : break;
15285 : 30625 : default:;
15286 : : }
15287 : 30625 : if ((_p1 == _q20 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q20, 0) && types_match (_p1, _q20)))
15288 : : {
15289 : 16 : {
15290 : 16 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
15291 : 16 : if (gimple_simplify_244 (res_op, seq, valueize, type, captures, MIN_EXPR, NE_EXPR, GT_EXPR))
15292 : 16 : return true;
15293 : : }
15294 : : }
15295 : 30609 : if ((_p1 == _q21 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q21, 0) && types_match (_p1, _q21)))
15296 : : {
15297 : 2981 : {
15298 : 2981 : tree captures[2] ATTRIBUTE_UNUSED = { _q21, _q20 };
15299 : 2981 : if (gimple_simplify_244 (res_op, seq, valueize, type, captures, MIN_EXPR, NE_EXPR, GT_EXPR))
15300 : 2421 : return true;
15301 : : }
15302 : : }
15303 : 128132437 : break;
15304 : : }
15305 : 13302 : case MAX_EXPR:
15306 : 13302 : {
15307 : 13302 : tree _q20 = gimple_assign_rhs1 (_a1);
15308 : 13302 : _q20 = do_valueize (valueize, _q20);
15309 : 13302 : tree _q21 = gimple_assign_rhs2 (_a1);
15310 : 13302 : _q21 = do_valueize (valueize, _q21);
15311 : 13302 : if (tree_swap_operands_p (_q20, _q21))
15312 : 86 : std::swap (_q20, _q21);
15313 : 13302 : switch (TREE_CODE (_p1))
15314 : : {
15315 : 7953 : case SSA_NAME:
15316 : 7953 : if (gimple *_d2 = get_def (valueize, _p1))
15317 : : {
15318 : 6617 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
15319 : 6921 : switch (gimple_assign_rhs_code (_a2))
15320 : : {
15321 : 2 : case MIN_EXPR:
15322 : 2 : {
15323 : 2 : tree _q50 = gimple_assign_rhs1 (_a2);
15324 : 2 : _q50 = do_valueize (valueize, _q50);
15325 : 2 : tree _q51 = gimple_assign_rhs2 (_a2);
15326 : 2 : _q51 = do_valueize (valueize, _q51);
15327 : 2 : if (tree_swap_operands_p (_q50, _q51))
15328 : 0 : std::swap (_q50, _q51);
15329 : 2 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
15330 : : {
15331 : 2 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
15332 : : {
15333 : 2 : {
15334 : 2 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
15335 : 2 : if (!HONOR_NANS (captures[0])
15336 : : )
15337 : : {
15338 : 2 : gimple_seq *lseq = seq;
15339 : 2 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2293;
15340 : 2 : {
15341 : 2 : res_op->set_op (NE_EXPR, type, 2);
15342 : 2 : res_op->ops[0] = captures[0];
15343 : 2 : res_op->ops[1] = captures[1];
15344 : 2 : res_op->resimplify (lseq, valueize);
15345 : 2 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1032, __FILE__, __LINE__, true);
15346 : 2 : return true;
15347 : : }
15348 : 0 : next_after_fail2293:;
15349 : : }
15350 : : }
15351 : : }
15352 : : }
15353 : 0 : if ((_q50 == _q21 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q21, 0) && types_match (_q50, _q21)))
15354 : : {
15355 : 0 : if ((_q51 == _q20 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q20, 0) && types_match (_q51, _q20)))
15356 : : {
15357 : 0 : {
15358 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
15359 : 0 : if (!HONOR_NANS (captures[0])
15360 : : )
15361 : : {
15362 : 0 : gimple_seq *lseq = seq;
15363 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2294;
15364 : 0 : {
15365 : 0 : res_op->set_op (NE_EXPR, type, 2);
15366 : 0 : res_op->ops[0] = captures[0];
15367 : 0 : res_op->ops[1] = captures[1];
15368 : 0 : res_op->resimplify (lseq, valueize);
15369 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1032, __FILE__, __LINE__, true);
15370 : 0 : return true;
15371 : : }
15372 : 0 : next_after_fail2294:;
15373 : : }
15374 : : }
15375 : : }
15376 : : }
15377 : 13300 : break;
15378 : : }
15379 : : default:;
15380 : : }
15381 : : }
15382 : : break;
15383 : 13300 : default:;
15384 : : }
15385 : 13300 : if ((_p1 == _q20 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q20, 0) && types_match (_p1, _q20)))
15386 : : {
15387 : 29 : {
15388 : 29 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
15389 : 29 : if (gimple_simplify_244 (res_op, seq, valueize, type, captures, MAX_EXPR, NE_EXPR, LT_EXPR))
15390 : 29 : return true;
15391 : : }
15392 : : }
15393 : 13271 : if ((_p1 == _q21 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q21, 0) && types_match (_p1, _q21)))
15394 : : {
15395 : 2953 : {
15396 : 2953 : tree captures[2] ATTRIBUTE_UNUSED = { _q21, _q20 };
15397 : 2953 : if (gimple_simplify_244 (res_op, seq, valueize, type, captures, MAX_EXPR, NE_EXPR, LT_EXPR))
15398 : 2585 : return true;
15399 : : }
15400 : : }
15401 : 128132437 : break;
15402 : : }
15403 : : default:;
15404 : : }
15405 : : }
15406 : : break;
15407 : 128132437 : default:;
15408 : : }
15409 : 128132437 : if (gimple_with_possible_nonzero_bits (_p0, valueize))
15410 : : {
15411 : 119348588 : if (gimple_with_known_nonzero_bits (_p1, valueize))
15412 : : {
15413 : 109860814 : {
15414 : 109860814 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
15415 : 109860814 : if (gimple_simplify_242 (res_op, seq, valueize, type, captures, NE_EXPR))
15416 : 2602 : return true;
15417 : : }
15418 : : }
15419 : : }
15420 : 128129835 : if (gimple_with_known_nonzero_bits (_p0, valueize))
15421 : : {
15422 : 95630103 : if (gimple_with_possible_nonzero_bits (_p1, valueize))
15423 : : {
15424 : 95630103 : {
15425 : 95630103 : tree captures[2] ATTRIBUTE_UNUSED = { _p1, _p0 };
15426 : 95630103 : if (gimple_simplify_242 (res_op, seq, valueize, type, captures, NE_EXPR))
15427 : 1320 : return true;
15428 : : }
15429 : : }
15430 : : }
15431 : 128128515 : switch (TREE_CODE (_p1))
15432 : : {
15433 : 22739667 : case SSA_NAME:
15434 : 22739667 : if (gimple *_d1 = get_def (valueize, _p1))
15435 : : {
15436 : 7188628 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
15437 : 10217172 : switch (gimple_assign_rhs_code (_a1))
15438 : : {
15439 : 4864 : case MIN_EXPR:
15440 : 4864 : {
15441 : 4864 : tree _q30 = gimple_assign_rhs1 (_a1);
15442 : 4864 : _q30 = do_valueize (valueize, _q30);
15443 : 4864 : tree _q31 = gimple_assign_rhs2 (_a1);
15444 : 4864 : _q31 = do_valueize (valueize, _q31);
15445 : 4864 : if (tree_swap_operands_p (_q30, _q31))
15446 : 911 : std::swap (_q30, _q31);
15447 : 4864 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || (operand_equal_p (_q30, _p0, 0) && types_match (_q30, _p0)))
15448 : : {
15449 : 88 : {
15450 : 88 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q31 };
15451 : 88 : if (gimple_simplify_244 (res_op, seq, valueize, type, captures, MIN_EXPR, NE_EXPR, GT_EXPR))
15452 : 88 : return true;
15453 : : }
15454 : : }
15455 : 4776 : if ((_q31 == _p0 && ! TREE_SIDE_EFFECTS (_q31)) || (operand_equal_p (_q31, _p0, 0) && types_match (_q31, _p0)))
15456 : : {
15457 : 56 : {
15458 : 56 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q30 };
15459 : 56 : if (gimple_simplify_244 (res_op, seq, valueize, type, captures, MIN_EXPR, NE_EXPR, GT_EXPR))
15460 : 56 : return true;
15461 : : }
15462 : : }
15463 : 128128269 : break;
15464 : : }
15465 : 5490 : case MAX_EXPR:
15466 : 5490 : {
15467 : 5490 : tree _q30 = gimple_assign_rhs1 (_a1);
15468 : 5490 : _q30 = do_valueize (valueize, _q30);
15469 : 5490 : tree _q31 = gimple_assign_rhs2 (_a1);
15470 : 5490 : _q31 = do_valueize (valueize, _q31);
15471 : 5490 : if (tree_swap_operands_p (_q30, _q31))
15472 : 16 : std::swap (_q30, _q31);
15473 : 5490 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || (operand_equal_p (_q30, _p0, 0) && types_match (_q30, _p0)))
15474 : : {
15475 : 88 : {
15476 : 88 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q31 };
15477 : 88 : if (gimple_simplify_244 (res_op, seq, valueize, type, captures, MAX_EXPR, NE_EXPR, LT_EXPR))
15478 : 88 : return true;
15479 : : }
15480 : : }
15481 : 5402 : if ((_q31 == _p0 && ! TREE_SIDE_EFFECTS (_q31)) || (operand_equal_p (_q31, _p0, 0) && types_match (_q31, _p0)))
15482 : : {
15483 : 14 : {
15484 : 14 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q30 };
15485 : 14 : if (gimple_simplify_244 (res_op, seq, valueize, type, captures, MAX_EXPR, NE_EXPR, LT_EXPR))
15486 : 14 : return true;
15487 : : }
15488 : : }
15489 : 128128269 : break;
15490 : : }
15491 : : default:;
15492 : : }
15493 : : }
15494 : : break;
15495 : 128128269 : default:;
15496 : : }
15497 : 128128269 : switch (TREE_CODE (_p0))
15498 : : {
15499 : 125204914 : case SSA_NAME:
15500 : 125204914 : if (gimple *_d1 = get_def (valueize, _p0))
15501 : : {
15502 : 42885015 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
15503 : 46813796 : switch (gimple_assign_rhs_code (_a1))
15504 : : {
15505 : 28188 : case MIN_EXPR:
15506 : 28188 : {
15507 : 28188 : tree _q20 = gimple_assign_rhs1 (_a1);
15508 : 28188 : _q20 = do_valueize (valueize, _q20);
15509 : 28188 : tree _q21 = gimple_assign_rhs2 (_a1);
15510 : 28188 : _q21 = do_valueize (valueize, _q21);
15511 : 28188 : if (tree_swap_operands_p (_q20, _q21))
15512 : 4401 : std::swap (_q20, _q21);
15513 : 28188 : switch (TREE_CODE (_q21))
15514 : : {
15515 : 3601 : case INTEGER_CST:
15516 : 3601 : {
15517 : 3601 : switch (TREE_CODE (_p1))
15518 : : {
15519 : 2513 : case INTEGER_CST:
15520 : 2513 : {
15521 : 2513 : {
15522 : 2513 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
15523 : 2513 : if (gimple_simplify_245 (res_op, seq, valueize, type, captures, NE_EXPR))
15524 : 2513 : return true;
15525 : : }
15526 : 0 : break;
15527 : : }
15528 : : default:;
15529 : : }
15530 : : break;
15531 : : }
15532 : : default:;
15533 : : }
15534 : 128115710 : break;
15535 : : }
15536 : 10686 : case MAX_EXPR:
15537 : 10686 : {
15538 : 10686 : tree _q20 = gimple_assign_rhs1 (_a1);
15539 : 10686 : _q20 = do_valueize (valueize, _q20);
15540 : 10686 : tree _q21 = gimple_assign_rhs2 (_a1);
15541 : 10686 : _q21 = do_valueize (valueize, _q21);
15542 : 10686 : if (tree_swap_operands_p (_q20, _q21))
15543 : 86 : std::swap (_q20, _q21);
15544 : 10686 : switch (TREE_CODE (_q21))
15545 : : {
15546 : 8770 : case INTEGER_CST:
15547 : 8770 : {
15548 : 8770 : switch (TREE_CODE (_p1))
15549 : : {
15550 : 1255 : case INTEGER_CST:
15551 : 1255 : {
15552 : 1255 : {
15553 : 1255 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
15554 : 1255 : if (gimple_simplify_246 (res_op, seq, valueize, type, captures, NE_EXPR))
15555 : 1255 : return true;
15556 : : }
15557 : 0 : break;
15558 : : }
15559 : : default:;
15560 : : }
15561 : : break;
15562 : : }
15563 : 9431 : default:;
15564 : : }
15565 : 9431 : if (integer_zerop (_p1))
15566 : : {
15567 : 357 : {
15568 : 357 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
15569 : 357 : if (gimple_simplify_247 (res_op, seq, valueize, type, captures, NE_EXPR))
15570 : 47 : return true;
15571 : : }
15572 : : }
15573 : 128115710 : break;
15574 : : }
15575 : 2815872 : case BIT_AND_EXPR:
15576 : 2815872 : {
15577 : 2815872 : tree _q20 = gimple_assign_rhs1 (_a1);
15578 : 2815872 : _q20 = do_valueize (valueize, _q20);
15579 : 2815872 : tree _q21 = gimple_assign_rhs2 (_a1);
15580 : 2815872 : _q21 = do_valueize (valueize, _q21);
15581 : 2815872 : if (tree_swap_operands_p (_q20, _q21))
15582 : 62607 : std::swap (_q20, _q21);
15583 : 2815872 : switch (TREE_CODE (_q20))
15584 : : {
15585 : 2815872 : case SSA_NAME:
15586 : 2815872 : if (gimple *_d2 = get_def (valueize, _q20))
15587 : : {
15588 : 2727772 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
15589 : 3376024 : switch (gimple_assign_rhs_code (_a2))
15590 : : {
15591 : 62560 : case LSHIFT_EXPR:
15592 : 62560 : {
15593 : 62560 : tree _q30 = gimple_assign_rhs1 (_a2);
15594 : 62560 : _q30 = do_valueize (valueize, _q30);
15595 : 62560 : tree _q31 = gimple_assign_rhs2 (_a2);
15596 : 62560 : _q31 = do_valueize (valueize, _q31);
15597 : 62560 : if (integer_pow2p (_q30))
15598 : : {
15599 : 61493 : if (integer_pow2p (_q21))
15600 : : {
15601 : 7721 : if (integer_zerop (_p1))
15602 : : {
15603 : 7721 : {
15604 : 7721 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _q31, _q21 };
15605 : 7721 : if (gimple_simplify_248 (res_op, seq, valueize, type, captures, NE_EXPR, EQ_EXPR))
15606 : 7721 : return true;
15607 : : }
15608 : : }
15609 : : }
15610 : : }
15611 : 54839 : switch (TREE_CODE (_q31))
15612 : : {
15613 : 922 : case INTEGER_CST:
15614 : 922 : {
15615 : 922 : switch (TREE_CODE (_q21))
15616 : : {
15617 : 886 : case INTEGER_CST:
15618 : 886 : {
15619 : 886 : switch (TREE_CODE (_p1))
15620 : : {
15621 : 886 : case INTEGER_CST:
15622 : 886 : {
15623 : 886 : {
15624 : 886 : tree captures[6] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q31, _q21, _p1 };
15625 : 886 : if (gimple_simplify_249 (res_op, seq, valueize, type, captures, NE_EXPR))
15626 : 37 : return true;
15627 : : }
15628 : 849 : break;
15629 : : }
15630 : : default:;
15631 : : }
15632 : : break;
15633 : : }
15634 : : default:;
15635 : : }
15636 : : break;
15637 : : }
15638 : 54802 : default:;
15639 : : }
15640 : 54802 : if (integer_onep (_q30))
15641 : : {
15642 : 53797 : if (integer_pow2p (_q21))
15643 : : {
15644 : 0 : if (integer_zerop (_p1))
15645 : : {
15646 : 0 : {
15647 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q31, _q21 };
15648 : 0 : if (gimple_simplify_250 (res_op, seq, valueize, type, captures, NE_EXPR, EQ_EXPR))
15649 : 0 : return true;
15650 : : }
15651 : : }
15652 : : }
15653 : : }
15654 : : break;
15655 : : }
15656 : 46062 : case RSHIFT_EXPR:
15657 : 46062 : {
15658 : 46062 : tree _q30 = gimple_assign_rhs1 (_a2);
15659 : 46062 : _q30 = do_valueize (valueize, _q30);
15660 : 46062 : tree _q31 = gimple_assign_rhs2 (_a2);
15661 : 46062 : _q31 = do_valueize (valueize, _q31);
15662 : 46062 : if (integer_pow2p (_q30))
15663 : : {
15664 : 1519 : if (integer_pow2p (_q21))
15665 : : {
15666 : 582 : if (integer_zerop (_p1))
15667 : : {
15668 : 582 : {
15669 : 582 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _q31, _q21 };
15670 : 582 : if (gimple_simplify_251 (res_op, seq, valueize, type, captures, NE_EXPR, EQ_EXPR))
15671 : 582 : return true;
15672 : : }
15673 : : }
15674 : : }
15675 : : }
15676 : 45480 : switch (TREE_CODE (_q31))
15677 : : {
15678 : 9684 : case INTEGER_CST:
15679 : 9684 : {
15680 : 9684 : switch (TREE_CODE (_q21))
15681 : : {
15682 : 9215 : case INTEGER_CST:
15683 : 9215 : {
15684 : 9215 : switch (TREE_CODE (_p1))
15685 : : {
15686 : 7475 : case INTEGER_CST:
15687 : 7475 : {
15688 : 7475 : {
15689 : 7475 : tree captures[6] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q31, _q21, _p1 };
15690 : 7475 : if (gimple_simplify_252 (res_op, seq, valueize, type, captures, NE_EXPR))
15691 : 156 : return true;
15692 : : }
15693 : 7319 : break;
15694 : : }
15695 : : default:;
15696 : : }
15697 : : break;
15698 : : }
15699 : : default:;
15700 : : }
15701 : : break;
15702 : : }
15703 : : default:;
15704 : : }
15705 : : break;
15706 : : }
15707 : : default:;
15708 : : }
15709 : : }
15710 : : break;
15711 : 2807376 : default:;
15712 : : }
15713 : 2807376 : {
15714 : 2807376 : tree _q20_pops[1];
15715 : 2807376 : if (gimple_nop_convert (_q20, _q20_pops, valueize))
15716 : : {
15717 : 56471 : tree _q30 = _q20_pops[0];
15718 : 56471 : switch (TREE_CODE (_q30))
15719 : : {
15720 : 56454 : case SSA_NAME:
15721 : 56454 : if (gimple *_d2 = get_def (valueize, _q30))
15722 : : {
15723 : 54736 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
15724 : 67749 : switch (gimple_assign_rhs_code (_a2))
15725 : : {
15726 : 12298 : case LSHIFT_EXPR:
15727 : 12298 : {
15728 : 12298 : tree _q40 = gimple_assign_rhs1 (_a2);
15729 : 12298 : _q40 = do_valueize (valueize, _q40);
15730 : 12298 : tree _q41 = gimple_assign_rhs2 (_a2);
15731 : 12298 : _q41 = do_valueize (valueize, _q41);
15732 : 12298 : if (integer_onep (_q40))
15733 : : {
15734 : 12298 : if (integer_pow2p (_q21))
15735 : : {
15736 : 6 : if (integer_zerop (_p1))
15737 : : {
15738 : 6 : {
15739 : 6 : tree captures[2] ATTRIBUTE_UNUSED = { _q41, _q21 };
15740 : 6 : if (gimple_simplify_250 (res_op, seq, valueize, type, captures, NE_EXPR, EQ_EXPR))
15741 : 6 : return true;
15742 : : }
15743 : : }
15744 : : }
15745 : : }
15746 : : break;
15747 : : }
15748 : : default:;
15749 : : }
15750 : : }
15751 : : break;
15752 : : default:;
15753 : : }
15754 : : }
15755 : : }
15756 : 2807370 : break;
15757 : : }
15758 : 11613 : case LSHIFT_EXPR:
15759 : 11613 : {
15760 : 11613 : tree _q20 = gimple_assign_rhs1 (_a1);
15761 : 11613 : _q20 = do_valueize (valueize, _q20);
15762 : 11613 : tree _q21 = gimple_assign_rhs2 (_a1);
15763 : 11613 : _q21 = do_valueize (valueize, _q21);
15764 : 11613 : switch (TREE_CODE (_q20))
15765 : : {
15766 : 986 : case INTEGER_CST:
15767 : 986 : {
15768 : 986 : switch (TREE_CODE (_p1))
15769 : : {
15770 : 603 : case INTEGER_CST:
15771 : 603 : {
15772 : 603 : {
15773 : 603 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
15774 : 603 : if (gimple_simplify_253 (res_op, seq, valueize, type, captures, NE_EXPR))
15775 : 68 : return true;
15776 : : }
15777 : 535 : break;
15778 : : }
15779 : : default:;
15780 : : }
15781 : : break;
15782 : : }
15783 : : default:;
15784 : : }
15785 : : break;
15786 : : }
15787 : 644 : case LROTATE_EXPR:
15788 : 644 : {
15789 : 644 : tree _q20 = gimple_assign_rhs1 (_a1);
15790 : 644 : _q20 = do_valueize (valueize, _q20);
15791 : 644 : tree _q21 = gimple_assign_rhs2 (_a1);
15792 : 644 : _q21 = do_valueize (valueize, _q21);
15793 : 644 : switch (TREE_CODE (_p1))
15794 : : {
15795 : 48 : case SSA_NAME:
15796 : 48 : if (gimple *_d2 = get_def (valueize, _p1))
15797 : : {
15798 : 48 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
15799 : 96 : switch (gimple_assign_rhs_code (_a2))
15800 : : {
15801 : 0 : case LROTATE_EXPR:
15802 : 0 : {
15803 : 0 : tree _q50 = gimple_assign_rhs1 (_a2);
15804 : 0 : _q50 = do_valueize (valueize, _q50);
15805 : 0 : tree _q51 = gimple_assign_rhs2 (_a2);
15806 : 0 : _q51 = do_valueize (valueize, _q51);
15807 : 0 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
15808 : : {
15809 : 0 : {
15810 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q50 };
15811 : 0 : if (gimple_simplify_254 (res_op, seq, valueize, type, captures, LROTATE_EXPR, RROTATE_EXPR, NE_EXPR))
15812 : 0 : return true;
15813 : : }
15814 : : }
15815 : : break;
15816 : : }
15817 : : default:;
15818 : : }
15819 : : }
15820 : : break;
15821 : 644 : default:;
15822 : : }
15823 : 644 : switch (TREE_CODE (_q21))
15824 : : {
15825 : 0 : case INTEGER_CST:
15826 : 0 : {
15827 : 0 : switch (TREE_CODE (_p1))
15828 : : {
15829 : 0 : case INTEGER_CST:
15830 : 0 : {
15831 : 0 : {
15832 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
15833 : 0 : if (gimple_simplify_255 (res_op, seq, valueize, type, captures, LROTATE_EXPR, RROTATE_EXPR, NE_EXPR))
15834 : 0 : return true;
15835 : : }
15836 : 0 : break;
15837 : : }
15838 : : default:;
15839 : : }
15840 : : break;
15841 : : }
15842 : 644 : default:;
15843 : : }
15844 : 644 : switch (TREE_CODE (_p1))
15845 : : {
15846 : 596 : case INTEGER_CST:
15847 : 596 : {
15848 : 596 : {
15849 : 596 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
15850 : 596 : if (gimple_simplify_256 (res_op, seq, valueize, type, captures, LROTATE_EXPR, RROTATE_EXPR, NE_EXPR))
15851 : 0 : return true;
15852 : : }
15853 : 596 : break;
15854 : : }
15855 : : default:;
15856 : : }
15857 : : break;
15858 : : }
15859 : 824 : case RROTATE_EXPR:
15860 : 824 : {
15861 : 824 : tree _q20 = gimple_assign_rhs1 (_a1);
15862 : 824 : _q20 = do_valueize (valueize, _q20);
15863 : 824 : tree _q21 = gimple_assign_rhs2 (_a1);
15864 : 824 : _q21 = do_valueize (valueize, _q21);
15865 : 824 : switch (TREE_CODE (_p1))
15866 : : {
15867 : 226 : case SSA_NAME:
15868 : 226 : if (gimple *_d2 = get_def (valueize, _p1))
15869 : : {
15870 : 225 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
15871 : 450 : switch (gimple_assign_rhs_code (_a2))
15872 : : {
15873 : 0 : case RROTATE_EXPR:
15874 : 0 : {
15875 : 0 : tree _q50 = gimple_assign_rhs1 (_a2);
15876 : 0 : _q50 = do_valueize (valueize, _q50);
15877 : 0 : tree _q51 = gimple_assign_rhs2 (_a2);
15878 : 0 : _q51 = do_valueize (valueize, _q51);
15879 : 0 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
15880 : : {
15881 : 0 : {
15882 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q50 };
15883 : 0 : if (gimple_simplify_254 (res_op, seq, valueize, type, captures, RROTATE_EXPR, LROTATE_EXPR, NE_EXPR))
15884 : 0 : return true;
15885 : : }
15886 : : }
15887 : : break;
15888 : : }
15889 : : default:;
15890 : : }
15891 : : }
15892 : : break;
15893 : 824 : default:;
15894 : : }
15895 : 824 : switch (TREE_CODE (_q21))
15896 : : {
15897 : 236 : case INTEGER_CST:
15898 : 236 : {
15899 : 236 : switch (TREE_CODE (_p1))
15900 : : {
15901 : 10 : case INTEGER_CST:
15902 : 10 : {
15903 : 10 : {
15904 : 10 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
15905 : 10 : if (gimple_simplify_255 (res_op, seq, valueize, type, captures, RROTATE_EXPR, LROTATE_EXPR, NE_EXPR))
15906 : 10 : return true;
15907 : : }
15908 : 0 : break;
15909 : : }
15910 : : default:;
15911 : : }
15912 : : break;
15913 : : }
15914 : 814 : default:;
15915 : : }
15916 : 814 : switch (TREE_CODE (_p1))
15917 : : {
15918 : 588 : case INTEGER_CST:
15919 : 588 : {
15920 : 588 : {
15921 : 588 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
15922 : 588 : if (gimple_simplify_256 (res_op, seq, valueize, type, captures, RROTATE_EXPR, LROTATE_EXPR, NE_EXPR))
15923 : 0 : return true;
15924 : : }
15925 : 588 : break;
15926 : : }
15927 : : default:;
15928 : : }
15929 : : break;
15930 : : }
15931 : 429 : case VEC_COND_EXPR:
15932 : 429 : {
15933 : 429 : tree _q20 = gimple_assign_rhs1 (_a1);
15934 : 429 : _q20 = do_valueize (valueize, _q20);
15935 : 429 : tree _q21 = gimple_assign_rhs2 (_a1);
15936 : 429 : _q21 = do_valueize (valueize, _q21);
15937 : 429 : tree _q22 = gimple_assign_rhs3 (_a1);
15938 : 429 : _q22 = do_valueize (valueize, _q22);
15939 : 429 : switch (TREE_CODE (_p1))
15940 : : {
15941 : 404 : case SSA_NAME:
15942 : 404 : if (gimple *_d2 = get_def (valueize, _p1))
15943 : : {
15944 : 404 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
15945 : 764 : switch (gimple_assign_rhs_code (_a2))
15946 : : {
15947 : 28 : case VEC_COND_EXPR:
15948 : 28 : {
15949 : 28 : tree _q60 = gimple_assign_rhs1 (_a2);
15950 : 28 : _q60 = do_valueize (valueize, _q60);
15951 : 28 : tree _q61 = gimple_assign_rhs2 (_a2);
15952 : 28 : _q61 = do_valueize (valueize, _q61);
15953 : 28 : tree _q62 = gimple_assign_rhs3 (_a2);
15954 : 28 : _q62 = do_valueize (valueize, _q62);
15955 : 28 : if ((_q60 == _q20 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _q20, 0) && types_match (_q60, _q20)))
15956 : : {
15957 : 0 : {
15958 : 0 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q22, _p1, _q61, _q62 };
15959 : 0 : if (VECTOR_TYPE_P (type)
15960 : 0 : && (TREE_CODE_CLASS (NE_EXPR) != tcc_comparison
15961 : 0 : || types_match (type, TREE_TYPE (captures[2]))
15962 : 0 : || expand_vec_cond_expr_p (type, TREE_TYPE (captures[1]))
15963 : : || (optimize_vectors_before_lowering_p ()
15964 : 0 : && !expand_vec_cond_expr_p (TREE_TYPE (captures[2]), TREE_TYPE (captures[1]))))
15965 : : )
15966 : : {
15967 : 0 : gimple_seq *lseq = seq;
15968 : 0 : if (lseq
15969 : 0 : && (!single_use (captures[0])
15970 : 0 : || !single_use (captures[4])))
15971 : 0 : lseq = NULL;
15972 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2295;
15973 : 0 : {
15974 : 0 : res_op->set_op (VEC_COND_EXPR, type, 3);
15975 : 0 : res_op->ops[0] = captures[1];
15976 : 0 : {
15977 : 0 : tree _o1[2], _r1;
15978 : 0 : _o1[0] = captures[2];
15979 : 0 : _o1[1] = captures[5];
15980 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NE_EXPR, type, _o1[0], _o1[1]);
15981 : 0 : tem_op.resimplify (NULL, valueize);
15982 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
15983 : 0 : if (!_r1) goto next_after_fail2295;
15984 : 0 : res_op->ops[1] = _r1;
15985 : : }
15986 : 0 : {
15987 : 0 : tree _o1[2], _r1;
15988 : 0 : _o1[0] = captures[3];
15989 : 0 : _o1[1] = captures[6];
15990 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), NE_EXPR, type, _o1[0], _o1[1]);
15991 : 0 : tem_op.resimplify (NULL, valueize);
15992 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
15993 : 0 : if (!_r1) goto next_after_fail2295;
15994 : 0 : res_op->ops[2] = _r1;
15995 : : }
15996 : 0 : res_op->resimplify (lseq, valueize);
15997 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1033, __FILE__, __LINE__, true);
15998 : 0 : return true;
15999 : : }
16000 : 0 : next_after_fail2295:;
16001 : : }
16002 : : }
16003 : : }
16004 : : break;
16005 : : }
16006 : : default:;
16007 : : }
16008 : : }
16009 : : break;
16010 : 429 : default:;
16011 : : }
16012 : 429 : {
16013 : 429 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q22, _p1 };
16014 : 429 : if (VECTOR_TYPE_P (type)
16015 : 429 : && (TREE_CODE_CLASS (NE_EXPR) != tcc_comparison
16016 : 417 : || types_match (type, TREE_TYPE (captures[2]))
16017 : 417 : || expand_vec_cond_expr_p (type, TREE_TYPE (captures[1]))
16018 : : || (optimize_vectors_before_lowering_p ()
16019 : 20 : && !expand_vec_cond_expr_p (TREE_TYPE (captures[2]), TREE_TYPE (captures[1]))))
16020 : : )
16021 : : {
16022 : 417 : gimple_seq *lseq = seq;
16023 : 417 : if (lseq
16024 : 257 : && (!single_use (captures[0])))
16025 : 160 : lseq = NULL;
16026 : 417 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2296;
16027 : 417 : {
16028 : 417 : res_op->set_op (VEC_COND_EXPR, type, 3);
16029 : 417 : res_op->ops[0] = captures[1];
16030 : 417 : {
16031 : 417 : tree _o1[2], _r1;
16032 : 417 : _o1[0] = captures[2];
16033 : 417 : _o1[1] = captures[4];
16034 : 417 : gimple_match_op tem_op (res_op->cond.any_else (), NE_EXPR, type, _o1[0], _o1[1]);
16035 : 417 : tem_op.resimplify (NULL, valueize);
16036 : 417 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
16037 : 417 : if (!_r1) goto next_after_fail2296;
16038 : 13 : res_op->ops[1] = _r1;
16039 : : }
16040 : 13 : {
16041 : 13 : tree _o1[2], _r1;
16042 : 13 : _o1[0] = captures[3];
16043 : 13 : _o1[1] = captures[4];
16044 : 13 : gimple_match_op tem_op (res_op->cond.any_else (), NE_EXPR, type, _o1[0], _o1[1]);
16045 : 13 : tem_op.resimplify (NULL, valueize);
16046 : 13 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
16047 : 13 : if (!_r1) goto next_after_fail2296;
16048 : 13 : res_op->ops[2] = _r1;
16049 : : }
16050 : 13 : res_op->resimplify (lseq, valueize);
16051 : 13 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1034, __FILE__, __LINE__, true);
16052 : 13 : return true;
16053 : : }
16054 : 416 : next_after_fail2296:;
16055 : : }
16056 : : }
16057 : 416 : break;
16058 : : }
16059 : : default:;
16060 : : }
16061 : 13863309 : else if (gcall *_c1 = dyn_cast <gcall *> (_d1))
16062 : 7933030 : switch (gimple_call_combined_fn (_c1))
16063 : : {
16064 : 1 : case CFN_BUILT_IN_BSWAP128:
16065 : 1 : if (gimple_call_num_args (_c1) == 1)
16066 : : {
16067 : 1 : tree _q20 = gimple_call_arg (_c1, 0);
16068 : 1 : _q20 = do_valueize (valueize, _q20);
16069 : 1 : switch (TREE_CODE (_p1))
16070 : : {
16071 : 1 : case SSA_NAME:
16072 : 1 : if (gimple *_d2 = get_def (valueize, _p1))
16073 : : {
16074 : 1 : if (gcall *_c2 = dyn_cast <gcall *> (_d2))
16075 : 1 : switch (gimple_call_combined_fn (_c2))
16076 : : {
16077 : 0 : case CFN_BUILT_IN_BSWAP128:
16078 : 0 : if (gimple_call_num_args (_c2) == 1)
16079 : : {
16080 : 0 : tree _q40 = gimple_call_arg (_c2, 0);
16081 : 0 : _q40 = do_valueize (valueize, _q40);
16082 : 0 : {
16083 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q40 };
16084 : 0 : if (gimple_simplify_258 (res_op, seq, valueize, type, captures, NE_EXPR, CFN_BUILT_IN_BSWAP128))
16085 : 0 : return true;
16086 : : }
16087 : : }
16088 : : break;
16089 : : default:;
16090 : : }
16091 : : }
16092 : : break;
16093 : 0 : case INTEGER_CST:
16094 : 0 : {
16095 : 0 : {
16096 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
16097 : 0 : if (gimple_simplify_259 (res_op, seq, valueize, type, captures, NE_EXPR, CFN_BUILT_IN_BSWAP128))
16098 : 0 : return true;
16099 : : }
16100 : 0 : break;
16101 : : }
16102 : : default:;
16103 : : }
16104 : : }
16105 : : break;
16106 : 94 : case CFN_BUILT_IN_BSWAP16:
16107 : 94 : if (gimple_call_num_args (_c1) == 1)
16108 : : {
16109 : 94 : tree _q20 = gimple_call_arg (_c1, 0);
16110 : 94 : _q20 = do_valueize (valueize, _q20);
16111 : 94 : switch (TREE_CODE (_p1))
16112 : : {
16113 : 33 : case SSA_NAME:
16114 : 33 : if (gimple *_d2 = get_def (valueize, _p1))
16115 : : {
16116 : 33 : if (gcall *_c2 = dyn_cast <gcall *> (_d2))
16117 : 1 : switch (gimple_call_combined_fn (_c2))
16118 : : {
16119 : 0 : case CFN_BUILT_IN_BSWAP16:
16120 : 0 : if (gimple_call_num_args (_c2) == 1)
16121 : : {
16122 : 0 : tree _q40 = gimple_call_arg (_c2, 0);
16123 : 0 : _q40 = do_valueize (valueize, _q40);
16124 : 0 : {
16125 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q40 };
16126 : 0 : if (gimple_simplify_258 (res_op, seq, valueize, type, captures, NE_EXPR, CFN_BUILT_IN_BSWAP16))
16127 : 0 : return true;
16128 : : }
16129 : : }
16130 : : break;
16131 : : default:;
16132 : : }
16133 : : }
16134 : : break;
16135 : 61 : case INTEGER_CST:
16136 : 61 : {
16137 : 61 : {
16138 : 61 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
16139 : 61 : if (gimple_simplify_259 (res_op, seq, valueize, type, captures, NE_EXPR, CFN_BUILT_IN_BSWAP16))
16140 : 61 : return true;
16141 : : }
16142 : 0 : break;
16143 : : }
16144 : : default:;
16145 : : }
16146 : : }
16147 : : break;
16148 : 149 : case CFN_BUILT_IN_BSWAP32:
16149 : 149 : if (gimple_call_num_args (_c1) == 1)
16150 : : {
16151 : 149 : tree _q20 = gimple_call_arg (_c1, 0);
16152 : 149 : _q20 = do_valueize (valueize, _q20);
16153 : 149 : switch (TREE_CODE (_p1))
16154 : : {
16155 : 81 : case SSA_NAME:
16156 : 81 : if (gimple *_d2 = get_def (valueize, _p1))
16157 : : {
16158 : 81 : if (gcall *_c2 = dyn_cast <gcall *> (_d2))
16159 : 43 : switch (gimple_call_combined_fn (_c2))
16160 : : {
16161 : 0 : case CFN_BUILT_IN_BSWAP32:
16162 : 0 : if (gimple_call_num_args (_c2) == 1)
16163 : : {
16164 : 0 : tree _q40 = gimple_call_arg (_c2, 0);
16165 : 0 : _q40 = do_valueize (valueize, _q40);
16166 : 0 : {
16167 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q40 };
16168 : 0 : if (gimple_simplify_258 (res_op, seq, valueize, type, captures, NE_EXPR, CFN_BUILT_IN_BSWAP32))
16169 : 0 : return true;
16170 : : }
16171 : : }
16172 : : break;
16173 : : default:;
16174 : : }
16175 : : }
16176 : : break;
16177 : 68 : case INTEGER_CST:
16178 : 68 : {
16179 : 68 : {
16180 : 68 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
16181 : 68 : if (gimple_simplify_259 (res_op, seq, valueize, type, captures, NE_EXPR, CFN_BUILT_IN_BSWAP32))
16182 : 68 : return true;
16183 : : }
16184 : 0 : break;
16185 : : }
16186 : : default:;
16187 : : }
16188 : : }
16189 : : break;
16190 : 63 : case CFN_BUILT_IN_BSWAP64:
16191 : 63 : if (gimple_call_num_args (_c1) == 1)
16192 : : {
16193 : 63 : tree _q20 = gimple_call_arg (_c1, 0);
16194 : 63 : _q20 = do_valueize (valueize, _q20);
16195 : 63 : switch (TREE_CODE (_p1))
16196 : : {
16197 : 41 : case SSA_NAME:
16198 : 41 : if (gimple *_d2 = get_def (valueize, _p1))
16199 : : {
16200 : 41 : if (gcall *_c2 = dyn_cast <gcall *> (_d2))
16201 : 1 : switch (gimple_call_combined_fn (_c2))
16202 : : {
16203 : 0 : case CFN_BUILT_IN_BSWAP64:
16204 : 0 : if (gimple_call_num_args (_c2) == 1)
16205 : : {
16206 : 0 : tree _q40 = gimple_call_arg (_c2, 0);
16207 : 0 : _q40 = do_valueize (valueize, _q40);
16208 : 0 : {
16209 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q40 };
16210 : 0 : if (gimple_simplify_258 (res_op, seq, valueize, type, captures, NE_EXPR, CFN_BUILT_IN_BSWAP64))
16211 : 0 : return true;
16212 : : }
16213 : : }
16214 : : break;
16215 : : default:;
16216 : : }
16217 : : }
16218 : : break;
16219 : 22 : case INTEGER_CST:
16220 : 22 : {
16221 : 22 : {
16222 : 22 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
16223 : 22 : if (gimple_simplify_259 (res_op, seq, valueize, type, captures, NE_EXPR, CFN_BUILT_IN_BSWAP64))
16224 : 22 : return true;
16225 : : }
16226 : 0 : break;
16227 : : }
16228 : : default:;
16229 : : }
16230 : : }
16231 : : break;
16232 : : default:;
16233 : : }
16234 : : }
16235 : : break;
16236 : 128115710 : default:;
16237 : : }
16238 : 128115710 : switch (TREE_CODE (_p1))
16239 : : {
16240 : 22739421 : case SSA_NAME:
16241 : 22739421 : if (gimple *_d1 = get_def (valueize, _p1))
16242 : : {
16243 : 7188382 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
16244 : 10216926 : switch (gimple_assign_rhs_code (_a1))
16245 : : {
16246 : 110 : case VEC_COND_EXPR:
16247 : 110 : {
16248 : 110 : tree _q30 = gimple_assign_rhs1 (_a1);
16249 : 110 : _q30 = do_valueize (valueize, _q30);
16250 : 110 : tree _q31 = gimple_assign_rhs2 (_a1);
16251 : 110 : _q31 = do_valueize (valueize, _q31);
16252 : 110 : tree _q32 = gimple_assign_rhs3 (_a1);
16253 : 110 : _q32 = do_valueize (valueize, _q32);
16254 : 110 : {
16255 : 110 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _p1, _q30, _q31, _q32 };
16256 : 110 : if (VECTOR_TYPE_P (type)
16257 : 110 : && (TREE_CODE_CLASS (NE_EXPR) != tcc_comparison
16258 : 110 : || types_match (type, TREE_TYPE (captures[3]))
16259 : 110 : || expand_vec_cond_expr_p (type, TREE_TYPE (captures[2]))
16260 : : || (optimize_vectors_before_lowering_p ()
16261 : 42 : && !expand_vec_cond_expr_p (TREE_TYPE (captures[3]), TREE_TYPE (captures[2]))))
16262 : : )
16263 : : {
16264 : 110 : gimple_seq *lseq = seq;
16265 : 110 : if (lseq
16266 : 26 : && (!single_use (captures[1])))
16267 : 96 : lseq = NULL;
16268 : 110 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2297;
16269 : 110 : {
16270 : 110 : res_op->set_op (VEC_COND_EXPR, type, 3);
16271 : 110 : res_op->ops[0] = captures[2];
16272 : 110 : {
16273 : 110 : tree _o1[2], _r1;
16274 : 110 : _o1[0] = captures[0];
16275 : 110 : _o1[1] = captures[3];
16276 : 110 : gimple_match_op tem_op (res_op->cond.any_else (), NE_EXPR, type, _o1[0], _o1[1]);
16277 : 110 : tem_op.resimplify (NULL, valueize);
16278 : 110 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
16279 : 110 : if (!_r1) goto next_after_fail2297;
16280 : 40 : res_op->ops[1] = _r1;
16281 : : }
16282 : 40 : {
16283 : 40 : tree _o1[2], _r1;
16284 : 40 : _o1[0] = captures[0];
16285 : 40 : _o1[1] = captures[4];
16286 : 40 : gimple_match_op tem_op (res_op->cond.any_else (), NE_EXPR, type, _o1[0], _o1[1]);
16287 : 40 : tem_op.resimplify (NULL, valueize);
16288 : 40 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
16289 : 40 : if (!_r1) goto next_after_fail2297;
16290 : 0 : res_op->ops[2] = _r1;
16291 : : }
16292 : 0 : res_op->resimplify (lseq, valueize);
16293 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1035, __FILE__, __LINE__, true);
16294 : 0 : return true;
16295 : : }
16296 : 110 : next_after_fail2297:;
16297 : : }
16298 : : }
16299 : 110 : break;
16300 : : }
16301 : : default:;
16302 : : }
16303 : : }
16304 : : break;
16305 : 128115710 : default:;
16306 : : }
16307 : 128115710 : switch (TREE_CODE (_p0))
16308 : : {
16309 : 125192355 : case SSA_NAME:
16310 : 125192355 : if (gimple *_d1 = get_def (valueize, _p0))
16311 : : {
16312 : 42872456 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
16313 : 46801388 : switch (gimple_assign_rhs_code (_a1))
16314 : : {
16315 : 9443 : case COND_EXPR:
16316 : 9443 : {
16317 : 9443 : tree _q20 = gimple_assign_rhs1 (_a1);
16318 : 9443 : _q20 = do_valueize (valueize, _q20);
16319 : 9443 : tree _q21 = gimple_assign_rhs2 (_a1);
16320 : 9443 : _q21 = do_valueize (valueize, _q21);
16321 : 9443 : tree _q22 = gimple_assign_rhs3 (_a1);
16322 : 9443 : _q22 = do_valueize (valueize, _q22);
16323 : 9443 : switch (TREE_CODE (_p1))
16324 : : {
16325 : 1451 : case SSA_NAME:
16326 : 1451 : if (gimple *_d2 = get_def (valueize, _p1))
16327 : : {
16328 : 1396 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
16329 : 2123 : switch (gimple_assign_rhs_code (_a2))
16330 : : {
16331 : 90 : case COND_EXPR:
16332 : 90 : {
16333 : 90 : tree _q60 = gimple_assign_rhs1 (_a2);
16334 : 90 : _q60 = do_valueize (valueize, _q60);
16335 : 90 : tree _q61 = gimple_assign_rhs2 (_a2);
16336 : 90 : _q61 = do_valueize (valueize, _q61);
16337 : 90 : tree _q62 = gimple_assign_rhs3 (_a2);
16338 : 90 : _q62 = do_valueize (valueize, _q62);
16339 : 90 : if ((_q61 == _q21 && ! TREE_SIDE_EFFECTS (_q61)) || (operand_equal_p (_q61, _q21, 0) && types_match (_q61, _q21)))
16340 : : {
16341 : 71 : if ((_q62 == _q22 && ! TREE_SIDE_EFFECTS (_q62)) || (operand_equal_p (_q62, _q22, 0) && types_match (_q62, _q22)))
16342 : : {
16343 : 71 : {
16344 : 71 : tree captures[4] ATTRIBUTE_UNUSED = { _q20, _q21, _q22, _q60 };
16345 : 71 : const enum tree_code eqne = NE_EXPR;
16346 : 71 : if (!HONOR_NANS (captures[1])
16347 : 3 : && types_match (TREE_TYPE (captures[0]), TREE_TYPE (captures[3]))
16348 : 74 : && types_match (type, TREE_TYPE (captures[0]))
16349 : : )
16350 : : {
16351 : 3 : gimple_seq *lseq = seq;
16352 : 3 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2298;
16353 : 3 : {
16354 : 3 : res_op->set_op (COND_EXPR, type, 3);
16355 : 3 : {
16356 : 3 : tree _o1[2], _r1;
16357 : 3 : {
16358 : 3 : tree _o2[2], _r2;
16359 : 3 : _o2[0] = captures[0];
16360 : 3 : if (COMPARISON_CLASS_P (_o2[0]))
16361 : : {
16362 : 0 : if (!seq) return false;
16363 : 0 : _o2[0] = gimple_build (seq, TREE_CODE (_o2[0]), TREE_TYPE (_o2[0]), TREE_OPERAND (_o2[0], 0), TREE_OPERAND (_o2[0], 1));
16364 : : }
16365 : 3 : _o2[1] = captures[3];
16366 : 3 : if (COMPARISON_CLASS_P (_o2[1]))
16367 : : {
16368 : 0 : if (!seq) return false;
16369 : 0 : _o2[1] = gimple_build (seq, TREE_CODE (_o2[1]), TREE_TYPE (_o2[1]), TREE_OPERAND (_o2[1], 0), TREE_OPERAND (_o2[1], 1));
16370 : : }
16371 : 3 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_XOR_EXPR, TREE_TYPE (_o2[0]), _o2[0], _o2[1]);
16372 : 3 : tem_op.resimplify (lseq, valueize);
16373 : 3 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
16374 : 3 : if (!_r2) goto next_after_fail2298;
16375 : 2 : _o1[0] = _r2;
16376 : : }
16377 : 2 : {
16378 : 2 : tree _o2[2], _r2;
16379 : 2 : _o2[0] = captures[1];
16380 : 2 : _o2[1] = captures[2];
16381 : 2 : gimple_match_op tem_op (res_op->cond.any_else (), NE_EXPR, type, _o2[0], _o2[1]);
16382 : 2 : tem_op.resimplify (lseq, valueize);
16383 : 2 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
16384 : 2 : if (!_r2) goto next_after_fail2298;
16385 : 2 : _o1[1] = _r2;
16386 : : }
16387 : 2 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_AND_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
16388 : 2 : tem_op.resimplify (lseq, valueize);
16389 : 2 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
16390 : 2 : if (!_r1) goto next_after_fail2298;
16391 : 2 : res_op->ops[0] = _r1;
16392 : : }
16393 : 2 : res_op->ops[1] = constant_boolean_node (eqne == NE_EXPR, type);
16394 : 2 : res_op->ops[2] = constant_boolean_node (eqne != NE_EXPR, type);
16395 : 2 : res_op->resimplify (lseq, valueize);
16396 : 2 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1121, __FILE__, __LINE__, true);
16397 : 2 : return true;
16398 : : }
16399 : 69 : next_after_fail2298:;
16400 : : }
16401 : : }
16402 : : }
16403 : : }
16404 : 88 : if ((_q61 == _q22 && ! TREE_SIDE_EFFECTS (_q61)) || (operand_equal_p (_q61, _q22, 0) && types_match (_q61, _q22)))
16405 : : {
16406 : 2 : if ((_q62 == _q21 && ! TREE_SIDE_EFFECTS (_q62)) || (operand_equal_p (_q62, _q21, 0) && types_match (_q62, _q21)))
16407 : : {
16408 : 2 : {
16409 : 2 : tree captures[4] ATTRIBUTE_UNUSED = { _q20, _q21, _q22, _q60 };
16410 : 2 : const enum tree_code eqne = NE_EXPR;
16411 : 2 : if (!HONOR_NANS (captures[1])
16412 : 2 : && types_match (TREE_TYPE (captures[0]), TREE_TYPE (captures[3]))
16413 : 4 : && types_match (type, TREE_TYPE (captures[0]))
16414 : : )
16415 : : {
16416 : 2 : gimple_seq *lseq = seq;
16417 : 2 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2299;
16418 : 2 : {
16419 : 2 : res_op->set_op (COND_EXPR, type, 3);
16420 : 2 : {
16421 : 2 : tree _o1[2], _r1;
16422 : 2 : {
16423 : 2 : tree _o2[2], _r2;
16424 : 2 : _o2[0] = captures[0];
16425 : 2 : if (COMPARISON_CLASS_P (_o2[0]))
16426 : : {
16427 : 0 : if (!seq) return false;
16428 : 0 : _o2[0] = gimple_build (seq, TREE_CODE (_o2[0]), TREE_TYPE (_o2[0]), TREE_OPERAND (_o2[0], 0), TREE_OPERAND (_o2[0], 1));
16429 : : }
16430 : 2 : _o2[1] = captures[3];
16431 : 2 : if (COMPARISON_CLASS_P (_o2[1]))
16432 : : {
16433 : 0 : if (!seq) return false;
16434 : 0 : _o2[1] = gimple_build (seq, TREE_CODE (_o2[1]), TREE_TYPE (_o2[1]), TREE_OPERAND (_o2[1], 0), TREE_OPERAND (_o2[1], 1));
16435 : : }
16436 : 2 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_XOR_EXPR, TREE_TYPE (_o2[0]), _o2[0], _o2[1]);
16437 : 2 : tem_op.resimplify (lseq, valueize);
16438 : 2 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
16439 : 2 : if (!_r2) goto next_after_fail2299;
16440 : 1 : _o1[0] = _r2;
16441 : : }
16442 : 1 : {
16443 : 1 : tree _o2[2], _r2;
16444 : 1 : _o2[0] = captures[1];
16445 : 1 : _o2[1] = captures[2];
16446 : 1 : gimple_match_op tem_op (res_op->cond.any_else (), EQ_EXPR, type, _o2[0], _o2[1]);
16447 : 1 : tem_op.resimplify (lseq, valueize);
16448 : 1 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
16449 : 1 : if (!_r2) goto next_after_fail2299;
16450 : 1 : _o1[1] = _r2;
16451 : : }
16452 : 1 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_IOR_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
16453 : 1 : tem_op.resimplify (lseq, valueize);
16454 : 1 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
16455 : 1 : if (!_r1) goto next_after_fail2299;
16456 : 1 : res_op->ops[0] = _r1;
16457 : : }
16458 : 1 : res_op->ops[1] = constant_boolean_node (eqne != NE_EXPR, type);
16459 : 1 : res_op->ops[2] = constant_boolean_node (eqne == NE_EXPR, type);
16460 : 1 : res_op->resimplify (lseq, valueize);
16461 : 1 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1122, __FILE__, __LINE__, true);
16462 : 1 : return true;
16463 : : }
16464 : 1 : next_after_fail2299:;
16465 : : }
16466 : : }
16467 : : }
16468 : : }
16469 : : break;
16470 : : }
16471 : : default:;
16472 : : }
16473 : : }
16474 : : break;
16475 : : default:;
16476 : : }
16477 : : break;
16478 : : }
16479 : 416 : case VEC_COND_EXPR:
16480 : 416 : {
16481 : 416 : tree _q20 = gimple_assign_rhs1 (_a1);
16482 : 416 : _q20 = do_valueize (valueize, _q20);
16483 : 416 : tree _q21 = gimple_assign_rhs2 (_a1);
16484 : 416 : _q21 = do_valueize (valueize, _q21);
16485 : 416 : tree _q22 = gimple_assign_rhs3 (_a1);
16486 : 416 : _q22 = do_valueize (valueize, _q22);
16487 : 416 : switch (TREE_CODE (_p1))
16488 : : {
16489 : 404 : case SSA_NAME:
16490 : 404 : if (gimple *_d2 = get_def (valueize, _p1))
16491 : : {
16492 : 404 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
16493 : 764 : switch (gimple_assign_rhs_code (_a2))
16494 : : {
16495 : 28 : case VEC_COND_EXPR:
16496 : 28 : {
16497 : 28 : tree _q60 = gimple_assign_rhs1 (_a2);
16498 : 28 : _q60 = do_valueize (valueize, _q60);
16499 : 28 : tree _q61 = gimple_assign_rhs2 (_a2);
16500 : 28 : _q61 = do_valueize (valueize, _q61);
16501 : 28 : tree _q62 = gimple_assign_rhs3 (_a2);
16502 : 28 : _q62 = do_valueize (valueize, _q62);
16503 : 28 : if ((_q61 == _q21 && ! TREE_SIDE_EFFECTS (_q61)) || (operand_equal_p (_q61, _q21, 0) && types_match (_q61, _q21)))
16504 : : {
16505 : 22 : if ((_q62 == _q22 && ! TREE_SIDE_EFFECTS (_q62)) || (operand_equal_p (_q62, _q22, 0) && types_match (_q62, _q22)))
16506 : : {
16507 : 22 : {
16508 : 22 : tree captures[4] ATTRIBUTE_UNUSED = { _q20, _q21, _q22, _q60 };
16509 : 22 : const enum tree_code eqne = NE_EXPR;
16510 : 22 : if (!HONOR_NANS (captures[1])
16511 : 22 : && types_match (TREE_TYPE (captures[0]), TREE_TYPE (captures[3]))
16512 : 44 : && types_match (type, TREE_TYPE (captures[0]))
16513 : : )
16514 : : {
16515 : 22 : gimple_seq *lseq = seq;
16516 : 22 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2300;
16517 : 22 : {
16518 : 22 : res_op->set_op (VEC_COND_EXPR, type, 3);
16519 : 22 : {
16520 : 22 : tree _o1[2], _r1;
16521 : 22 : {
16522 : 22 : tree _o2[2], _r2;
16523 : 22 : _o2[0] = captures[0];
16524 : 22 : _o2[1] = captures[3];
16525 : 22 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_XOR_EXPR, TREE_TYPE (_o2[0]), _o2[0], _o2[1]);
16526 : 22 : tem_op.resimplify (lseq, valueize);
16527 : 22 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
16528 : 22 : if (!_r2) goto next_after_fail2300;
16529 : 11 : _o1[0] = _r2;
16530 : : }
16531 : 11 : {
16532 : 11 : tree _o2[2], _r2;
16533 : 11 : _o2[0] = captures[1];
16534 : 11 : _o2[1] = captures[2];
16535 : 11 : gimple_match_op tem_op (res_op->cond.any_else (), NE_EXPR, type, _o2[0], _o2[1]);
16536 : 11 : tem_op.resimplify (lseq, valueize);
16537 : 11 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
16538 : 11 : if (!_r2) goto next_after_fail2300;
16539 : 11 : _o1[1] = _r2;
16540 : : }
16541 : 11 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_AND_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
16542 : 11 : tem_op.resimplify (lseq, valueize);
16543 : 11 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
16544 : 11 : if (!_r1) goto next_after_fail2300;
16545 : 11 : res_op->ops[0] = _r1;
16546 : : }
16547 : 11 : res_op->ops[1] = constant_boolean_node (eqne == NE_EXPR, type);
16548 : 11 : res_op->ops[2] = constant_boolean_node (eqne != NE_EXPR, type);
16549 : 11 : res_op->resimplify (lseq, valueize);
16550 : 11 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1121, __FILE__, __LINE__, true);
16551 : 11 : return true;
16552 : : }
16553 : 11 : next_after_fail2300:;
16554 : : }
16555 : : }
16556 : : }
16557 : : }
16558 : 17 : if ((_q61 == _q22 && ! TREE_SIDE_EFFECTS (_q61)) || (operand_equal_p (_q61, _q22, 0) && types_match (_q61, _q22)))
16559 : : {
16560 : 6 : if ((_q62 == _q21 && ! TREE_SIDE_EFFECTS (_q62)) || (operand_equal_p (_q62, _q21, 0) && types_match (_q62, _q21)))
16561 : : {
16562 : 6 : {
16563 : 6 : tree captures[4] ATTRIBUTE_UNUSED = { _q20, _q21, _q22, _q60 };
16564 : 6 : const enum tree_code eqne = NE_EXPR;
16565 : 6 : if (!HONOR_NANS (captures[1])
16566 : 6 : && types_match (TREE_TYPE (captures[0]), TREE_TYPE (captures[3]))
16567 : 12 : && types_match (type, TREE_TYPE (captures[0]))
16568 : : )
16569 : : {
16570 : 6 : gimple_seq *lseq = seq;
16571 : 6 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2301;
16572 : 6 : {
16573 : 6 : res_op->set_op (VEC_COND_EXPR, type, 3);
16574 : 6 : {
16575 : 6 : tree _o1[2], _r1;
16576 : 6 : {
16577 : 6 : tree _o2[2], _r2;
16578 : 6 : _o2[0] = captures[0];
16579 : 6 : _o2[1] = captures[3];
16580 : 6 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_XOR_EXPR, TREE_TYPE (_o2[0]), _o2[0], _o2[1]);
16581 : 6 : tem_op.resimplify (lseq, valueize);
16582 : 6 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
16583 : 6 : if (!_r2) goto next_after_fail2301;
16584 : 3 : _o1[0] = _r2;
16585 : : }
16586 : 3 : {
16587 : 3 : tree _o2[2], _r2;
16588 : 3 : _o2[0] = captures[1];
16589 : 3 : _o2[1] = captures[2];
16590 : 3 : gimple_match_op tem_op (res_op->cond.any_else (), EQ_EXPR, type, _o2[0], _o2[1]);
16591 : 3 : tem_op.resimplify (lseq, valueize);
16592 : 3 : _r2 = maybe_push_res_to_seq (&tem_op, lseq);
16593 : 3 : if (!_r2) goto next_after_fail2301;
16594 : 3 : _o1[1] = _r2;
16595 : : }
16596 : 3 : gimple_match_op tem_op (res_op->cond.any_else (), BIT_IOR_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
16597 : 3 : tem_op.resimplify (lseq, valueize);
16598 : 3 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
16599 : 3 : if (!_r1) goto next_after_fail2301;
16600 : 3 : res_op->ops[0] = _r1;
16601 : : }
16602 : 3 : res_op->ops[1] = constant_boolean_node (eqne != NE_EXPR, type);
16603 : 3 : res_op->ops[2] = constant_boolean_node (eqne == NE_EXPR, type);
16604 : 3 : res_op->resimplify (lseq, valueize);
16605 : 3 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1122, __FILE__, __LINE__, true);
16606 : 3 : return true;
16607 : : }
16608 : 3 : next_after_fail2301:;
16609 : : }
16610 : : }
16611 : : }
16612 : : }
16613 : : break;
16614 : : }
16615 : : default:;
16616 : : }
16617 : : }
16618 : : break;
16619 : : default:;
16620 : : }
16621 : : break;
16622 : : }
16623 : 220800 : case LT_EXPR:
16624 : 220800 : {
16625 : 220800 : tree _q20 = gimple_assign_rhs1 (_a1);
16626 : 220800 : _q20 = do_valueize (valueize, _q20);
16627 : 220800 : tree _q21 = gimple_assign_rhs2 (_a1);
16628 : 220800 : _q21 = do_valueize (valueize, _q21);
16629 : 220800 : if (integer_zerop (_p1))
16630 : : {
16631 : 210786 : {
16632 : 210786 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
16633 : 210786 : if (gimple_simplify_315 (res_op, seq, valueize, type, captures, LT_EXPR, GE_EXPR, UNGE_EXPR))
16634 : 173608 : return true;
16635 : : }
16636 : : }
16637 : 47192 : if (integer_truep (_p1))
16638 : : {
16639 : 8753 : {
16640 : 8753 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
16641 : 8753 : if (gimple_simplify_316 (res_op, seq, valueize, type, captures, LT_EXPR, GE_EXPR, UNGE_EXPR))
16642 : 6809 : return true;
16643 : : }
16644 : : }
16645 : : break;
16646 : : }
16647 : 107776 : case LE_EXPR:
16648 : 107776 : {
16649 : 107776 : tree _q20 = gimple_assign_rhs1 (_a1);
16650 : 107776 : _q20 = do_valueize (valueize, _q20);
16651 : 107776 : tree _q21 = gimple_assign_rhs2 (_a1);
16652 : 107776 : _q21 = do_valueize (valueize, _q21);
16653 : 107776 : if (integer_zerop (_p1))
16654 : : {
16655 : 95584 : {
16656 : 95584 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
16657 : 95584 : if (gimple_simplify_315 (res_op, seq, valueize, type, captures, LE_EXPR, GT_EXPR, UNGT_EXPR))
16658 : 80870 : return true;
16659 : : }
16660 : : }
16661 : 26906 : if (integer_truep (_p1))
16662 : : {
16663 : 9601 : {
16664 : 9601 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
16665 : 9601 : if (gimple_simplify_316 (res_op, seq, valueize, type, captures, LE_EXPR, GT_EXPR, UNGT_EXPR))
16666 : 8470 : return true;
16667 : : }
16668 : : }
16669 : : break;
16670 : : }
16671 : 524338 : case EQ_EXPR:
16672 : 524338 : {
16673 : 524338 : tree _q20 = gimple_assign_rhs1 (_a1);
16674 : 524338 : _q20 = do_valueize (valueize, _q20);
16675 : 524338 : tree _q21 = gimple_assign_rhs2 (_a1);
16676 : 524338 : _q21 = do_valueize (valueize, _q21);
16677 : 524338 : if (tree_swap_operands_p (_q20, _q21))
16678 : 6486 : std::swap (_q20, _q21);
16679 : 524338 : if (integer_zerop (_p1))
16680 : : {
16681 : 444445 : {
16682 : 444445 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
16683 : 444445 : if (gimple_simplify_315 (res_op, seq, valueize, type, captures, EQ_EXPR, NE_EXPR, NE_EXPR))
16684 : 375524 : return true;
16685 : : }
16686 : : }
16687 : 148814 : if (integer_truep (_p1))
16688 : : {
16689 : 72727 : {
16690 : 72727 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
16691 : 72727 : if (gimple_simplify_316 (res_op, seq, valueize, type, captures, EQ_EXPR, NE_EXPR, NE_EXPR))
16692 : 72540 : return true;
16693 : : }
16694 : : }
16695 : 126630245 : break;
16696 : : }
16697 : 535005 : case NE_EXPR:
16698 : 535005 : {
16699 : 535005 : tree _q20 = gimple_assign_rhs1 (_a1);
16700 : 535005 : _q20 = do_valueize (valueize, _q20);
16701 : 535005 : tree _q21 = gimple_assign_rhs2 (_a1);
16702 : 535005 : _q21 = do_valueize (valueize, _q21);
16703 : 535005 : if (tree_swap_operands_p (_q20, _q21))
16704 : 7929 : std::swap (_q20, _q21);
16705 : 535005 : if (integer_zerop (_p1))
16706 : : {
16707 : 490177 : {
16708 : 490177 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
16709 : 490177 : if (gimple_simplify_315 (res_op, seq, valueize, type, captures, NE_EXPR, EQ_EXPR, EQ_EXPR))
16710 : 413936 : return true;
16711 : : }
16712 : : }
16713 : 121069 : if (integer_truep (_p1))
16714 : : {
16715 : 22248 : {
16716 : 22248 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
16717 : 22248 : if (gimple_simplify_316 (res_op, seq, valueize, type, captures, NE_EXPR, EQ_EXPR, EQ_EXPR))
16718 : 21599 : return true;
16719 : : }
16720 : : }
16721 : 126630245 : break;
16722 : : }
16723 : 121891 : case GE_EXPR:
16724 : 121891 : {
16725 : 121891 : tree _q20 = gimple_assign_rhs1 (_a1);
16726 : 121891 : _q20 = do_valueize (valueize, _q20);
16727 : 121891 : tree _q21 = gimple_assign_rhs2 (_a1);
16728 : 121891 : _q21 = do_valueize (valueize, _q21);
16729 : 121891 : if (integer_zerop (_p1))
16730 : : {
16731 : 114612 : {
16732 : 114612 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
16733 : 114612 : if (gimple_simplify_315 (res_op, seq, valueize, type, captures, GE_EXPR, LT_EXPR, UNLT_EXPR))
16734 : 108252 : return true;
16735 : : }
16736 : : }
16737 : 13639 : if (integer_truep (_p1))
16738 : : {
16739 : 5102 : {
16740 : 5102 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
16741 : 5102 : if (gimple_simplify_316 (res_op, seq, valueize, type, captures, GE_EXPR, LT_EXPR, UNLT_EXPR))
16742 : 3704 : return true;
16743 : : }
16744 : : }
16745 : : break;
16746 : : }
16747 : 250657 : case GT_EXPR:
16748 : 250657 : {
16749 : 250657 : tree _q20 = gimple_assign_rhs1 (_a1);
16750 : 250657 : _q20 = do_valueize (valueize, _q20);
16751 : 250657 : tree _q21 = gimple_assign_rhs2 (_a1);
16752 : 250657 : _q21 = do_valueize (valueize, _q21);
16753 : 250657 : if (integer_zerop (_p1))
16754 : : {
16755 : 243757 : {
16756 : 243757 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
16757 : 243757 : if (gimple_simplify_315 (res_op, seq, valueize, type, captures, GT_EXPR, LE_EXPR, UNLE_EXPR))
16758 : 171926 : return true;
16759 : : }
16760 : : }
16761 : 78731 : if (integer_truep (_p1))
16762 : : {
16763 : 5737 : {
16764 : 5737 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
16765 : 5737 : if (gimple_simplify_316 (res_op, seq, valueize, type, captures, GT_EXPR, LE_EXPR, UNLE_EXPR))
16766 : 4498 : return true;
16767 : : }
16768 : : }
16769 : : break;
16770 : : }
16771 : 8892 : case UNORDERED_EXPR:
16772 : 8892 : {
16773 : 8892 : tree _q20 = gimple_assign_rhs1 (_a1);
16774 : 8892 : _q20 = do_valueize (valueize, _q20);
16775 : 8892 : tree _q21 = gimple_assign_rhs2 (_a1);
16776 : 8892 : _q21 = do_valueize (valueize, _q21);
16777 : 8892 : if (tree_swap_operands_p (_q20, _q21))
16778 : 6 : std::swap (_q20, _q21);
16779 : 8892 : if (integer_zerop (_p1))
16780 : : {
16781 : 5186 : {
16782 : 5186 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
16783 : 5186 : if (gimple_simplify_315 (res_op, seq, valueize, type, captures, UNORDERED_EXPR, ORDERED_EXPR, ORDERED_EXPR))
16784 : 5186 : return true;
16785 : : }
16786 : : }
16787 : 3706 : if (integer_truep (_p1))
16788 : : {
16789 : 507 : {
16790 : 507 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
16791 : 507 : if (gimple_simplify_316 (res_op, seq, valueize, type, captures, UNORDERED_EXPR, ORDERED_EXPR, ORDERED_EXPR))
16792 : 507 : return true;
16793 : : }
16794 : : }
16795 : 126630245 : break;
16796 : : }
16797 : 569 : case ORDERED_EXPR:
16798 : 569 : {
16799 : 569 : tree _q20 = gimple_assign_rhs1 (_a1);
16800 : 569 : _q20 = do_valueize (valueize, _q20);
16801 : 569 : tree _q21 = gimple_assign_rhs2 (_a1);
16802 : 569 : _q21 = do_valueize (valueize, _q21);
16803 : 569 : if (tree_swap_operands_p (_q20, _q21))
16804 : 0 : std::swap (_q20, _q21);
16805 : 569 : if (integer_zerop (_p1))
16806 : : {
16807 : 519 : {
16808 : 519 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
16809 : 519 : if (gimple_simplify_315 (res_op, seq, valueize, type, captures, ORDERED_EXPR, UNORDERED_EXPR, UNORDERED_EXPR))
16810 : 519 : return true;
16811 : : }
16812 : : }
16813 : 50 : if (integer_truep (_p1))
16814 : : {
16815 : 0 : {
16816 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
16817 : 0 : if (gimple_simplify_316 (res_op, seq, valueize, type, captures, ORDERED_EXPR, UNORDERED_EXPR, UNORDERED_EXPR))
16818 : 0 : return true;
16819 : : }
16820 : : }
16821 : 126630245 : break;
16822 : : }
16823 : 1930 : case UNLT_EXPR:
16824 : 1930 : {
16825 : 1930 : tree _q20 = gimple_assign_rhs1 (_a1);
16826 : 1930 : _q20 = do_valueize (valueize, _q20);
16827 : 1930 : tree _q21 = gimple_assign_rhs2 (_a1);
16828 : 1930 : _q21 = do_valueize (valueize, _q21);
16829 : 1930 : if (integer_zerop (_p1))
16830 : : {
16831 : 1076 : {
16832 : 1076 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
16833 : 1076 : if (gimple_simplify_315 (res_op, seq, valueize, type, captures, UNLT_EXPR, GE_EXPR, GE_EXPR))
16834 : 1076 : return true;
16835 : : }
16836 : : }
16837 : 854 : if (integer_truep (_p1))
16838 : : {
16839 : 854 : {
16840 : 854 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
16841 : 854 : if (gimple_simplify_316 (res_op, seq, valueize, type, captures, UNLT_EXPR, GE_EXPR, GE_EXPR))
16842 : 0 : return true;
16843 : : }
16844 : : }
16845 : : break;
16846 : : }
16847 : 6911 : case UNLE_EXPR:
16848 : 6911 : {
16849 : 6911 : tree _q20 = gimple_assign_rhs1 (_a1);
16850 : 6911 : _q20 = do_valueize (valueize, _q20);
16851 : 6911 : tree _q21 = gimple_assign_rhs2 (_a1);
16852 : 6911 : _q21 = do_valueize (valueize, _q21);
16853 : 6911 : if (integer_zerop (_p1))
16854 : : {
16855 : 2686 : {
16856 : 2686 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
16857 : 2686 : if (gimple_simplify_315 (res_op, seq, valueize, type, captures, UNLE_EXPR, GT_EXPR, GT_EXPR))
16858 : 2686 : return true;
16859 : : }
16860 : : }
16861 : 4225 : if (integer_truep (_p1))
16862 : : {
16863 : 4225 : {
16864 : 4225 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
16865 : 4225 : if (gimple_simplify_316 (res_op, seq, valueize, type, captures, UNLE_EXPR, GT_EXPR, GT_EXPR))
16866 : 3 : return true;
16867 : : }
16868 : : }
16869 : : break;
16870 : : }
16871 : 15613 : case UNGT_EXPR:
16872 : 15613 : {
16873 : 15613 : tree _q20 = gimple_assign_rhs1 (_a1);
16874 : 15613 : _q20 = do_valueize (valueize, _q20);
16875 : 15613 : tree _q21 = gimple_assign_rhs2 (_a1);
16876 : 15613 : _q21 = do_valueize (valueize, _q21);
16877 : 15613 : if (integer_zerop (_p1))
16878 : : {
16879 : 4659 : {
16880 : 4659 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
16881 : 4659 : if (gimple_simplify_315 (res_op, seq, valueize, type, captures, UNGT_EXPR, LE_EXPR, LE_EXPR))
16882 : 4659 : return true;
16883 : : }
16884 : : }
16885 : 10954 : if (integer_truep (_p1))
16886 : : {
16887 : 10794 : {
16888 : 10794 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
16889 : 10794 : if (gimple_simplify_316 (res_op, seq, valueize, type, captures, UNGT_EXPR, LE_EXPR, LE_EXPR))
16890 : 3 : return true;
16891 : : }
16892 : : }
16893 : : break;
16894 : : }
16895 : 4225 : case UNGE_EXPR:
16896 : 4225 : {
16897 : 4225 : tree _q20 = gimple_assign_rhs1 (_a1);
16898 : 4225 : _q20 = do_valueize (valueize, _q20);
16899 : 4225 : tree _q21 = gimple_assign_rhs2 (_a1);
16900 : 4225 : _q21 = do_valueize (valueize, _q21);
16901 : 4225 : if (integer_zerop (_p1))
16902 : : {
16903 : 2963 : {
16904 : 2963 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
16905 : 2963 : if (gimple_simplify_315 (res_op, seq, valueize, type, captures, UNGE_EXPR, LT_EXPR, LT_EXPR))
16906 : 2963 : return true;
16907 : : }
16908 : : }
16909 : 1262 : if (integer_truep (_p1))
16910 : : {
16911 : 1010 : {
16912 : 1010 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
16913 : 1010 : if (gimple_simplify_316 (res_op, seq, valueize, type, captures, UNGE_EXPR, LT_EXPR, LT_EXPR))
16914 : 3 : return true;
16915 : : }
16916 : : }
16917 : : break;
16918 : : }
16919 : 810 : case UNEQ_EXPR:
16920 : 810 : {
16921 : 810 : tree _q20 = gimple_assign_rhs1 (_a1);
16922 : 810 : _q20 = do_valueize (valueize, _q20);
16923 : 810 : tree _q21 = gimple_assign_rhs2 (_a1);
16924 : 810 : _q21 = do_valueize (valueize, _q21);
16925 : 810 : if (tree_swap_operands_p (_q20, _q21))
16926 : 6 : std::swap (_q20, _q21);
16927 : 810 : if (integer_zerop (_p1))
16928 : : {
16929 : 372 : {
16930 : 372 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
16931 : 372 : if (gimple_simplify_315 (res_op, seq, valueize, type, captures, UNEQ_EXPR, LTGT_EXPR, LTGT_EXPR))
16932 : 372 : return true;
16933 : : }
16934 : : }
16935 : 438 : if (integer_truep (_p1))
16936 : : {
16937 : 438 : {
16938 : 438 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
16939 : 438 : if (gimple_simplify_316 (res_op, seq, valueize, type, captures, UNEQ_EXPR, LTGT_EXPR, LTGT_EXPR))
16940 : 0 : return true;
16941 : : }
16942 : : }
16943 : 126630245 : break;
16944 : : }
16945 : 3 : case LTGT_EXPR:
16946 : 3 : {
16947 : 3 : tree _q20 = gimple_assign_rhs1 (_a1);
16948 : 3 : _q20 = do_valueize (valueize, _q20);
16949 : 3 : tree _q21 = gimple_assign_rhs2 (_a1);
16950 : 3 : _q21 = do_valueize (valueize, _q21);
16951 : 3 : if (tree_swap_operands_p (_q20, _q21))
16952 : 0 : std::swap (_q20, _q21);
16953 : 3 : if (integer_zerop (_p1))
16954 : : {
16955 : 0 : {
16956 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
16957 : 0 : if (gimple_simplify_315 (res_op, seq, valueize, type, captures, LTGT_EXPR, UNEQ_EXPR, UNEQ_EXPR))
16958 : 0 : return true;
16959 : : }
16960 : : }
16961 : 3 : if (integer_truep (_p1))
16962 : : {
16963 : 3 : {
16964 : 3 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
16965 : 3 : if (gimple_simplify_316 (res_op, seq, valueize, type, captures, LTGT_EXPR, UNEQ_EXPR, UNEQ_EXPR))
16966 : 3 : return true;
16967 : : }
16968 : : }
16969 : 126630245 : break;
16970 : : }
16971 : 211509 : case MINUS_EXPR:
16972 : 211509 : {
16973 : 211509 : tree _q20 = gimple_assign_rhs1 (_a1);
16974 : 211509 : _q20 = do_valueize (valueize, _q20);
16975 : 211509 : tree _q21 = gimple_assign_rhs2 (_a1);
16976 : 211509 : _q21 = do_valueize (valueize, _q21);
16977 : 211509 : if (integer_zerop (_p1))
16978 : : {
16979 : 108237 : {
16980 : 108237 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
16981 : 108237 : if (gimple_simplify_262 (res_op, seq, valueize, type, captures, NE_EXPR))
16982 : 11642 : return true;
16983 : : }
16984 : : }
16985 : : break;
16986 : : }
16987 : 101987 : case POINTER_DIFF_EXPR:
16988 : 101987 : {
16989 : 101987 : tree _q20 = gimple_assign_rhs1 (_a1);
16990 : 101987 : _q20 = do_valueize (valueize, _q20);
16991 : 101987 : tree _q21 = gimple_assign_rhs2 (_a1);
16992 : 101987 : _q21 = do_valueize (valueize, _q21);
16993 : 101987 : if (integer_zerop (_p1))
16994 : : {
16995 : 67704 : {
16996 : 67704 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
16997 : 67704 : if (gimple_simplify_263 (res_op, seq, valueize, type, captures, NE_EXPR))
16998 : 11336 : return true;
16999 : : }
17000 : : }
17001 : : break;
17002 : : }
17003 : 101939 : case MULT_EXPR:
17004 : 101939 : {
17005 : 101939 : tree _q20 = gimple_assign_rhs1 (_a1);
17006 : 101939 : _q20 = do_valueize (valueize, _q20);
17007 : 101939 : tree _q21 = gimple_assign_rhs2 (_a1);
17008 : 101939 : _q21 = do_valueize (valueize, _q21);
17009 : 101939 : if (tree_swap_operands_p (_q20, _q21))
17010 : 1470 : std::swap (_q20, _q21);
17011 : 101939 : switch (TREE_CODE (_q21))
17012 : : {
17013 : 69443 : case INTEGER_CST:
17014 : 69443 : {
17015 : 69443 : switch (TREE_CODE (_p1))
17016 : : {
17017 : 38062 : case INTEGER_CST:
17018 : 38062 : {
17019 : 38062 : {
17020 : 38062 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
17021 : 38062 : if (gimple_simplify_265 (res_op, seq, valueize, type, captures, NE_EXPR))
17022 : 2754 : return true;
17023 : : }
17024 : 35308 : break;
17025 : : }
17026 : 66689 : default:;
17027 : : }
17028 : 66689 : if (integer_zerop (_p1))
17029 : : {
17030 : 18675 : {
17031 : 18675 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _p1 };
17032 : 18675 : if (gimple_simplify_264 (res_op, seq, valueize, type, captures, NE_EXPR, NE_EXPR))
17033 : 0 : return true;
17034 : : }
17035 : : }
17036 : : break;
17037 : : }
17038 : : default:;
17039 : : }
17040 : 126630245 : break;
17041 : : }
17042 : : default:;
17043 : : }
17044 : : }
17045 : : break;
17046 : 126630245 : default:;
17047 : : }
17048 : 126630245 : if ((_p1 == _p0 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _p0, 0) && types_match (_p1, _p0)))
17049 : : {
17050 : 78437 : {
17051 : 78437 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
17052 : 78437 : if (gimple_simplify_317 (res_op, seq, valueize, type, captures, NE_EXPR))
17053 : 33958 : return true;
17054 : : }
17055 : : }
17056 : 126596287 : switch (TREE_CODE (_p0))
17057 : : {
17058 : 123685186 : case SSA_NAME:
17059 : 123685186 : if (gimple *_d1 = get_def (valueize, _p0))
17060 : : {
17061 : 41369642 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
17062 : 45301463 : switch (gimple_assign_rhs_code (_a1))
17063 : : {
17064 : 2393314 : CASE_CONVERT:
17065 : 2393314 : {
17066 : 2393314 : tree _q20 = gimple_assign_rhs1 (_a1);
17067 : 2393314 : _q20 = do_valueize (valueize, _q20);
17068 : 2393314 : switch (TREE_CODE (_p1))
17069 : : {
17070 : 590215 : case SSA_NAME:
17071 : 590215 : if (gimple *_d2 = get_def (valueize, _p1))
17072 : : {
17073 : 534863 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
17074 : 635233 : switch (gimple_assign_rhs_code (_a2))
17075 : : {
17076 : 84933 : CASE_CONVERT:
17077 : 84933 : {
17078 : 84933 : tree _q40 = gimple_assign_rhs1 (_a2);
17079 : 84933 : _q40 = do_valueize (valueize, _q40);
17080 : 84933 : {
17081 : 84933 : tree _q40_pops[1];
17082 : 84933 : if (gimple_maybe_bit_not (_q40, _q40_pops, valueize))
17083 : : {
17084 : 1505 : tree _q50 = _q40_pops[0];
17085 : 1505 : {
17086 : 1505 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q50 };
17087 : 1505 : if (gimple_simplify_267 (res_op, seq, valueize, type, captures, NE_EXPR))
17088 : 0 : return true;
17089 : : }
17090 : : }
17091 : : }
17092 : 84933 : break;
17093 : : }
17094 : : default:;
17095 : : }
17096 : : }
17097 : : break;
17098 : 2393314 : default:;
17099 : : }
17100 : 2393314 : {
17101 : 2393314 : tree _q20_pops[1];
17102 : 2393314 : if (gimple_maybe_bit_not (_q20, _q20_pops, valueize))
17103 : : {
17104 : 223111 : tree _q30 = _q20_pops[0];
17105 : 223111 : switch (TREE_CODE (_p1))
17106 : : {
17107 : 39572 : case SSA_NAME:
17108 : 39572 : if (gimple *_d2 = get_def (valueize, _p1))
17109 : : {
17110 : 38575 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
17111 : 48756 : switch (gimple_assign_rhs_code (_a2))
17112 : : {
17113 : 3065 : CASE_CONVERT:
17114 : 3065 : {
17115 : 3065 : tree _q50 = gimple_assign_rhs1 (_a2);
17116 : 3065 : _q50 = do_valueize (valueize, _q50);
17117 : 3065 : {
17118 : 3065 : tree captures[2] ATTRIBUTE_UNUSED = { _q50, _q30 };
17119 : 3065 : if (gimple_simplify_267 (res_op, seq, valueize, type, captures, NE_EXPR))
17120 : 0 : return true;
17121 : : }
17122 : 3065 : break;
17123 : : }
17124 : : default:;
17125 : : }
17126 : : }
17127 : : break;
17128 : : default:;
17129 : : }
17130 : : }
17131 : : }
17132 : 2393314 : break;
17133 : : }
17134 : : default:;
17135 : : }
17136 : : }
17137 : : break;
17138 : 126596287 : default:;
17139 : : }
17140 : 126596287 : {
17141 : 126596287 : tree _p1_pops[1];
17142 : 126596287 : if (gimple_maybe_bit_not (_p1, _p1_pops, valueize))
17143 : : {
17144 : 96769955 : tree _q30 = _p1_pops[0];
17145 : 96769955 : {
17146 : 96769955 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q30 };
17147 : 96769955 : if (gimple_simplify_267 (res_op, seq, valueize, type, captures, NE_EXPR))
17148 : 28 : return true;
17149 : : }
17150 : : }
17151 : : }
17152 : 126596259 : switch (TREE_CODE (_p0))
17153 : : {
17154 : 123685158 : case SSA_NAME:
17155 : 123685158 : if (gimple *_d1 = get_def (valueize, _p0))
17156 : : {
17157 : 41369614 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
17158 : 45301435 : switch (gimple_assign_rhs_code (_a1))
17159 : : {
17160 : 568967 : case BIT_NOT_EXPR:
17161 : 568967 : {
17162 : 568967 : tree _q20 = gimple_assign_rhs1 (_a1);
17163 : 568967 : _q20 = do_valueize (valueize, _q20);
17164 : 568967 : switch (TREE_CODE (_p1))
17165 : : {
17166 : 2943 : case SSA_NAME:
17167 : 2943 : if (gimple *_d2 = get_def (valueize, _p1))
17168 : : {
17169 : 2729 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
17170 : 1670 : switch (gimple_assign_rhs_code (_a2))
17171 : : {
17172 : 1236 : case BIT_NOT_EXPR:
17173 : 1236 : {
17174 : 1236 : tree _q40 = gimple_assign_rhs1 (_a2);
17175 : 1236 : _q40 = do_valueize (valueize, _q40);
17176 : 1236 : {
17177 : 1236 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _p0, _q20, _p1, _q40 };
17178 : 1236 : if (gimple_simplify_270 (res_op, seq, valueize, type, captures, NE_EXPR))
17179 : 921 : return true;
17180 : : }
17181 : 315 : break;
17182 : : }
17183 : : default:;
17184 : : }
17185 : : }
17186 : : break;
17187 : 568046 : default:;
17188 : : }
17189 : 568046 : {
17190 : 568046 : tree _p1_pops[1];
17191 : 568046 : if (gimple_nop_convert (_p1, _p1_pops, valueize))
17192 : : {
17193 : 0 : tree _q40 = _p1_pops[0];
17194 : 0 : switch (TREE_CODE (_q40))
17195 : : {
17196 : 0 : case SSA_NAME:
17197 : 0 : if (gimple *_d2 = get_def (valueize, _q40))
17198 : : {
17199 : 0 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
17200 : 0 : switch (gimple_assign_rhs_code (_a2))
17201 : : {
17202 : 0 : case BIT_NOT_EXPR:
17203 : 0 : {
17204 : 0 : tree _q50 = gimple_assign_rhs1 (_a2);
17205 : 0 : _q50 = do_valueize (valueize, _q50);
17206 : 0 : {
17207 : 0 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _p0, _q20, _q40, _q50 };
17208 : 0 : if (gimple_simplify_270 (res_op, seq, valueize, type, captures, NE_EXPR))
17209 : 0 : return true;
17210 : : }
17211 : 0 : break;
17212 : : }
17213 : : default:;
17214 : : }
17215 : : }
17216 : : break;
17217 : : default:;
17218 : : }
17219 : : }
17220 : : }
17221 : 568046 : if (CONSTANT_CLASS_P (_p1))
17222 : : {
17223 : 566024 : {
17224 : 566024 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
17225 : 566024 : if (gimple_simplify_269 (res_op, seq, valueize, type, captures, NE_EXPR, NE_EXPR))
17226 : 539476 : return true;
17227 : : }
17228 : : }
17229 : : break;
17230 : : }
17231 : : default:;
17232 : : }
17233 : : }
17234 : : break;
17235 : 126055862 : default:;
17236 : : }
17237 : 126055862 : {
17238 : 126055862 : tree _p0_pops[1];
17239 : 126055862 : if (gimple_maybe_bit_not (_p0, _p0_pops, valueize))
17240 : : {
17241 : 431970 : tree _q20 = _p0_pops[0];
17242 : 431970 : {
17243 : 431970 : tree captures[2] ATTRIBUTE_UNUSED = { _p1, _q20 };
17244 : 431970 : if (gimple_simplify_267 (res_op, seq, valueize, type, captures, NE_EXPR))
17245 : 0 : return true;
17246 : : }
17247 : : }
17248 : : }
17249 : 126055862 : {
17250 : 126055862 : tree _p0_pops[1];
17251 : 126055862 : if (gimple_nop_convert (_p0, _p0_pops, valueize))
17252 : : {
17253 : 602111 : tree _q20 = _p0_pops[0];
17254 : 602111 : switch (TREE_CODE (_q20))
17255 : : {
17256 : 591512 : case SSA_NAME:
17257 : 591512 : if (gimple *_d1 = get_def (valueize, _q20))
17258 : : {
17259 : 575374 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
17260 : 590529 : switch (gimple_assign_rhs_code (_a1))
17261 : : {
17262 : 1833 : case BIT_NOT_EXPR:
17263 : 1833 : {
17264 : 1833 : tree _q30 = gimple_assign_rhs1 (_a1);
17265 : 1833 : _q30 = do_valueize (valueize, _q30);
17266 : 1833 : switch (TREE_CODE (_p1))
17267 : : {
17268 : 43 : case SSA_NAME:
17269 : 43 : if (gimple *_d2 = get_def (valueize, _p1))
17270 : : {
17271 : 43 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
17272 : 81 : switch (gimple_assign_rhs_code (_a2))
17273 : : {
17274 : 0 : case BIT_NOT_EXPR:
17275 : 0 : {
17276 : 0 : tree _q50 = gimple_assign_rhs1 (_a2);
17277 : 0 : _q50 = do_valueize (valueize, _q50);
17278 : 0 : {
17279 : 0 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _p1, _q50 };
17280 : 0 : if (gimple_simplify_268 (res_op, seq, valueize, type, captures, NE_EXPR))
17281 : 0 : return true;
17282 : : }
17283 : 0 : break;
17284 : : }
17285 : : default:;
17286 : : }
17287 : : }
17288 : : break;
17289 : 1833 : default:;
17290 : : }
17291 : 1833 : {
17292 : 1833 : tree _p1_pops[1];
17293 : 1833 : if (gimple_nop_convert (_p1, _p1_pops, valueize))
17294 : : {
17295 : 5 : tree _q50 = _p1_pops[0];
17296 : 5 : switch (TREE_CODE (_q50))
17297 : : {
17298 : 5 : case SSA_NAME:
17299 : 5 : if (gimple *_d2 = get_def (valueize, _q50))
17300 : : {
17301 : 5 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
17302 : 5 : switch (gimple_assign_rhs_code (_a2))
17303 : : {
17304 : 5 : case BIT_NOT_EXPR:
17305 : 5 : {
17306 : 5 : tree _q60 = gimple_assign_rhs1 (_a2);
17307 : 5 : _q60 = do_valueize (valueize, _q60);
17308 : 5 : {
17309 : 5 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q50, _q60 };
17310 : 5 : if (gimple_simplify_268 (res_op, seq, valueize, type, captures, NE_EXPR))
17311 : 0 : return true;
17312 : : }
17313 : 5 : break;
17314 : : }
17315 : : default:;
17316 : : }
17317 : : }
17318 : : break;
17319 : : default:;
17320 : : }
17321 : : }
17322 : : }
17323 : 1833 : if (CONSTANT_CLASS_P (_p1))
17324 : : {
17325 : 1790 : {
17326 : 1790 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q30, _p1 };
17327 : 1790 : if (gimple_simplify_269 (res_op, seq, valueize, type, captures, NE_EXPR, NE_EXPR))
17328 : 147 : return true;
17329 : : }
17330 : : }
17331 : : break;
17332 : : }
17333 : : default:;
17334 : : }
17335 : : }
17336 : : break;
17337 : : default:;
17338 : : }
17339 : : }
17340 : : }
17341 : 126055715 : switch (TREE_CODE (_p1))
17342 : : {
17343 : 3688843 : case REAL_CST:
17344 : 3688843 : {
17345 : 3688843 : {
17346 : 3688843 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
17347 : 3688843 : if (gimple_simplify_271 (res_op, seq, valueize, type, captures, NE_EXPR))
17348 : 1760 : return true;
17349 : : }
17350 : 3687083 : break;
17351 : : }
17352 : 126053955 : default:;
17353 : : }
17354 : 126053955 : switch (TREE_CODE (_p0))
17355 : : {
17356 : 123143502 : case SSA_NAME:
17357 : 123143502 : if (gimple *_d1 = get_def (valueize, _p0))
17358 : : {
17359 : 40828258 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
17360 : 44760628 : switch (gimple_assign_rhs_code (_a1))
17361 : : {
17362 : 1579638 : case PLUS_EXPR:
17363 : 1579638 : {
17364 : 1579638 : tree _q20 = gimple_assign_rhs1 (_a1);
17365 : 1579638 : _q20 = do_valueize (valueize, _q20);
17366 : 1579638 : tree _q21 = gimple_assign_rhs2 (_a1);
17367 : 1579638 : _q21 = do_valueize (valueize, _q21);
17368 : 1579638 : if (tree_swap_operands_p (_q20, _q21))
17369 : 8995 : std::swap (_q20, _q21);
17370 : 1579638 : switch (TREE_CODE (_q21))
17371 : : {
17372 : 12534 : case REAL_CST:
17373 : 12534 : {
17374 : 12534 : switch (TREE_CODE (_p1))
17375 : : {
17376 : 11812 : case REAL_CST:
17377 : 11812 : {
17378 : 11812 : {
17379 : 11812 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
17380 : 11812 : if (gimple_simplify_272 (res_op, seq, valueize, type, captures, PLUS_EXPR, NE_EXPR))
17381 : 17 : return true;
17382 : : }
17383 : 11795 : break;
17384 : : }
17385 : : default:;
17386 : : }
17387 : : break;
17388 : : }
17389 : : default:;
17390 : : }
17391 : 122827594 : break;
17392 : : }
17393 : 199852 : case MINUS_EXPR:
17394 : 199852 : {
17395 : 199852 : tree _q20 = gimple_assign_rhs1 (_a1);
17396 : 199852 : _q20 = do_valueize (valueize, _q20);
17397 : 199852 : tree _q21 = gimple_assign_rhs2 (_a1);
17398 : 199852 : _q21 = do_valueize (valueize, _q21);
17399 : 199852 : switch (TREE_CODE (_q21))
17400 : : {
17401 : 9880 : case REAL_CST:
17402 : 9880 : {
17403 : 9880 : switch (TREE_CODE (_p1))
17404 : : {
17405 : 9411 : case REAL_CST:
17406 : 9411 : {
17407 : 9411 : {
17408 : 9411 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
17409 : 9411 : if (gimple_simplify_272 (res_op, seq, valueize, type, captures, MINUS_EXPR, NE_EXPR))
17410 : 9 : return true;
17411 : : }
17412 : 9402 : break;
17413 : : }
17414 : : default:;
17415 : : }
17416 : : break;
17417 : : }
17418 : 199843 : default:;
17419 : : }
17420 : 199843 : switch (TREE_CODE (_q20))
17421 : : {
17422 : 1296 : case REAL_CST:
17423 : 1296 : {
17424 : 1296 : switch (TREE_CODE (_p1))
17425 : : {
17426 : 1287 : case REAL_CST:
17427 : 1287 : {
17428 : 1287 : {
17429 : 1287 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
17430 : 1287 : if (gimple_simplify_273 (res_op, seq, valueize, type, captures, NE_EXPR))
17431 : 0 : return true;
17432 : : }
17433 : 1287 : break;
17434 : : }
17435 : : default:;
17436 : : }
17437 : : break;
17438 : : }
17439 : : default:;
17440 : : }
17441 : : break;
17442 : : }
17443 : 15428 : case FLOAT_EXPR:
17444 : 15428 : {
17445 : 15428 : tree _q20 = gimple_assign_rhs1 (_a1);
17446 : 15428 : _q20 = do_valueize (valueize, _q20);
17447 : 15428 : switch (TREE_CODE (_p1))
17448 : : {
17449 : 7457 : case SSA_NAME:
17450 : 7457 : if (gimple *_d2 = get_def (valueize, _p1))
17451 : : {
17452 : 7324 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
17453 : 11819 : switch (gimple_assign_rhs_code (_a2))
17454 : : {
17455 : 1882 : case FLOAT_EXPR:
17456 : 1882 : {
17457 : 1882 : tree _q40 = gimple_assign_rhs1 (_a2);
17458 : 1882 : _q40 = do_valueize (valueize, _q40);
17459 : 1882 : {
17460 : 1882 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q40 };
17461 : 1882 : if (gimple_simplify_276 (res_op, seq, valueize, type, captures, NE_EXPR, NE_EXPR))
17462 : 180 : return true;
17463 : : }
17464 : 1702 : break;
17465 : : }
17466 : : default:;
17467 : : }
17468 : : }
17469 : : break;
17470 : 7965 : case REAL_CST:
17471 : 7965 : {
17472 : 7965 : {
17473 : 7965 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
17474 : 7965 : if (gimple_simplify_277 (res_op, seq, valueize, type, captures, NE_EXPR, NE_EXPR))
17475 : 95 : return true;
17476 : : }
17477 : 7870 : break;
17478 : : }
17479 : : default:;
17480 : : }
17481 : : break;
17482 : : }
17483 : 25144 : case EXACT_DIV_EXPR:
17484 : 25144 : {
17485 : 25144 : tree _q20 = gimple_assign_rhs1 (_a1);
17486 : 25144 : _q20 = do_valueize (valueize, _q20);
17487 : 25144 : tree _q21 = gimple_assign_rhs2 (_a1);
17488 : 25144 : _q21 = do_valueize (valueize, _q21);
17489 : 25144 : switch (TREE_CODE (_p1))
17490 : : {
17491 : 19688 : case INTEGER_CST:
17492 : 19688 : {
17493 : 19688 : {
17494 : 19688 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
17495 : 19688 : if (gimple_simplify_278 (res_op, seq, valueize, type, captures, NE_EXPR))
17496 : 19688 : return true;
17497 : : }
17498 : 0 : break;
17499 : : }
17500 : : default:;
17501 : : }
17502 : : break;
17503 : : }
17504 : 14282 : case NEGATE_EXPR:
17505 : 14282 : {
17506 : 14282 : tree _q20 = gimple_assign_rhs1 (_a1);
17507 : 14282 : _q20 = do_valueize (valueize, _q20);
17508 : 14282 : switch (TREE_CODE (_p1))
17509 : : {
17510 : 6769 : case SSA_NAME:
17511 : 6769 : if (gimple *_d2 = get_def (valueize, _p1))
17512 : : {
17513 : 6675 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
17514 : 6617 : switch (gimple_assign_rhs_code (_a2))
17515 : : {
17516 : 205 : case NEGATE_EXPR:
17517 : 205 : {
17518 : 205 : tree _q40 = gimple_assign_rhs1 (_a2);
17519 : 205 : _q40 = do_valueize (valueize, _q40);
17520 : 205 : {
17521 : 205 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q40 };
17522 : 205 : if (gimple_simplify_279 (res_op, seq, valueize, type, captures, NE_EXPR, NE_EXPR))
17523 : 205 : return true;
17524 : : }
17525 : 0 : break;
17526 : : }
17527 : : default:;
17528 : : }
17529 : : }
17530 : : break;
17531 : 14077 : default:;
17532 : : }
17533 : 14077 : if (CONSTANT_CLASS_P (_p1))
17534 : : {
17535 : 7513 : {
17536 : 7513 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
17537 : 7513 : if (gimple_simplify_280 (res_op, seq, valueize, type, captures, NE_EXPR, NE_EXPR))
17538 : 7513 : return true;
17539 : : }
17540 : : }
17541 : : break;
17542 : : }
17543 : 6582 : case ABS_EXPR:
17544 : 6582 : {
17545 : 6582 : tree _q20 = gimple_assign_rhs1 (_a1);
17546 : 6582 : _q20 = do_valueize (valueize, _q20);
17547 : 6582 : if (zerop (_p1))
17548 : : {
17549 : 714 : {
17550 : 714 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
17551 : 714 : const enum tree_code eqne = NE_EXPR;
17552 : 714 : gimple_seq *lseq = seq;
17553 : 714 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2302;
17554 : 714 : {
17555 : 714 : res_op->set_op (eqne, type, 2);
17556 : 714 : res_op->ops[0] = captures[0];
17557 : 714 : res_op->ops[1] = build_zero_cst (TREE_TYPE (captures[0]));
17558 : 714 : res_op->resimplify (lseq, valueize);
17559 : 714 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1123, __FILE__, __LINE__, true);
17560 : 714 : return true;
17561 : : }
17562 : 0 : next_after_fail2302:;
17563 : : }
17564 : : }
17565 : : break;
17566 : : }
17567 : 5279 : case ABSU_EXPR:
17568 : 5279 : {
17569 : 5279 : tree _q20 = gimple_assign_rhs1 (_a1);
17570 : 5279 : _q20 = do_valueize (valueize, _q20);
17571 : 5279 : if (zerop (_p1))
17572 : : {
17573 : 18 : {
17574 : 18 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
17575 : 18 : const enum tree_code eqne = NE_EXPR;
17576 : 18 : gimple_seq *lseq = seq;
17577 : 18 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2303;
17578 : 18 : {
17579 : 18 : res_op->set_op (eqne, type, 2);
17580 : 18 : res_op->ops[0] = captures[0];
17581 : 18 : res_op->ops[1] = build_zero_cst (TREE_TYPE (captures[0]));
17582 : 18 : res_op->resimplify (lseq, valueize);
17583 : 18 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1123, __FILE__, __LINE__, true);
17584 : 18 : return true;
17585 : : }
17586 : 0 : next_after_fail2303:;
17587 : : }
17588 : : }
17589 : : break;
17590 : : }
17591 : 2393166 : CASE_CONVERT:
17592 : 2393166 : {
17593 : 2393166 : tree _q20 = gimple_assign_rhs1 (_a1);
17594 : 2393166 : _q20 = do_valueize (valueize, _q20);
17595 : 2393166 : switch (TREE_CODE (_p1))
17596 : : {
17597 : 590215 : case SSA_NAME:
17598 : 590215 : if (gimple *_d2 = get_def (valueize, _p1))
17599 : : {
17600 : 534863 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
17601 : 635233 : switch (gimple_assign_rhs_code (_a2))
17602 : : {
17603 : 84933 : CASE_CONVERT:
17604 : 84933 : {
17605 : 84933 : tree _q40 = gimple_assign_rhs1 (_a2);
17606 : 84933 : _q40 = do_valueize (valueize, _q40);
17607 : 84933 : {
17608 : 84933 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _p1, _q40 };
17609 : 84933 : if (gimple_simplify_281 (res_op, seq, valueize, type, captures, NE_EXPR))
17610 : 9751 : return true;
17611 : : }
17612 : 75182 : break;
17613 : : }
17614 : : default:;
17615 : : }
17616 : : }
17617 : : break;
17618 : 2383415 : default:;
17619 : : }
17620 : 2383415 : {
17621 : 2383415 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _p1, _p1 };
17622 : 2383415 : if (gimple_simplify_282 (res_op, seq, valueize, type, captures, NE_EXPR))
17623 : 270217 : return true;
17624 : : }
17625 : 2113198 : switch (TREE_CODE (_q20))
17626 : : {
17627 : 2102107 : case SSA_NAME:
17628 : 2102107 : if (gimple *_d2 = get_def (valueize, _q20))
17629 : : {
17630 : 2066920 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
17631 : 2423833 : switch (gimple_assign_rhs_code (_a2))
17632 : : {
17633 : 3865 : case BIT_IOR_EXPR:
17634 : 3865 : {
17635 : 3865 : tree _q30 = gimple_assign_rhs1 (_a2);
17636 : 3865 : _q30 = do_valueize (valueize, _q30);
17637 : 3865 : tree _q31 = gimple_assign_rhs2 (_a2);
17638 : 3865 : _q31 = do_valueize (valueize, _q31);
17639 : 3865 : if (tree_swap_operands_p (_q30, _q31))
17640 : 33 : std::swap (_q30, _q31);
17641 : 3865 : switch (TREE_CODE (_q31))
17642 : : {
17643 : 68 : case INTEGER_CST:
17644 : 68 : {
17645 : 68 : switch (TREE_CODE (_p1))
17646 : : {
17647 : 48 : case INTEGER_CST:
17648 : 48 : {
17649 : 48 : {
17650 : 48 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q30, _q31, _p1 };
17651 : 48 : if (gimple_simplify_283 (res_op, seq, valueize, type, captures, NE_EXPR))
17652 : 0 : return true;
17653 : : }
17654 : 48 : break;
17655 : : }
17656 : : default:;
17657 : : }
17658 : : break;
17659 : : }
17660 : : default:;
17661 : : }
17662 : 122827594 : break;
17663 : : }
17664 : : default:;
17665 : : }
17666 : : }
17667 : : break;
17668 : : default:;
17669 : : }
17670 : : break;
17671 : : }
17672 : 1022344 : case BIT_IOR_EXPR:
17673 : 1022344 : {
17674 : 1022344 : tree _q20 = gimple_assign_rhs1 (_a1);
17675 : 1022344 : _q20 = do_valueize (valueize, _q20);
17676 : 1022344 : tree _q21 = gimple_assign_rhs2 (_a1);
17677 : 1022344 : _q21 = do_valueize (valueize, _q21);
17678 : 1022344 : if (tree_swap_operands_p (_q20, _q21))
17679 : 64475 : std::swap (_q20, _q21);
17680 : 1022344 : switch (TREE_CODE (_q21))
17681 : : {
17682 : 2252 : case INTEGER_CST:
17683 : 2252 : {
17684 : 2252 : switch (TREE_CODE (_p1))
17685 : : {
17686 : 951 : case INTEGER_CST:
17687 : 951 : {
17688 : 951 : {
17689 : 951 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _p1 };
17690 : 951 : if (gimple_simplify_283 (res_op, seq, valueize, type, captures, NE_EXPR))
17691 : 112 : return true;
17692 : : }
17693 : 839 : break;
17694 : : }
17695 : : default:;
17696 : : }
17697 : : break;
17698 : : }
17699 : : default:;
17700 : : }
17701 : 122827594 : break;
17702 : : }
17703 : 11277 : case BIT_XOR_EXPR:
17704 : 11277 : {
17705 : 11277 : tree _q20 = gimple_assign_rhs1 (_a1);
17706 : 11277 : _q20 = do_valueize (valueize, _q20);
17707 : 11277 : tree _q21 = gimple_assign_rhs2 (_a1);
17708 : 11277 : _q21 = do_valueize (valueize, _q21);
17709 : 11277 : if (tree_swap_operands_p (_q20, _q21))
17710 : 317 : std::swap (_q20, _q21);
17711 : 11277 : if (integer_zerop (_p1))
17712 : : {
17713 : 7261 : {
17714 : 7261 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
17715 : 7261 : if (gimple_simplify_285 (res_op, seq, valueize, type, captures, NE_EXPR))
17716 : 7261 : return true;
17717 : : }
17718 : : }
17719 : 4016 : if ((_p1 == _q20 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q20, 0) && types_match (_p1, _q20)))
17720 : : {
17721 : 0 : {
17722 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
17723 : 0 : if (gimple_simplify_286 (res_op, seq, valueize, type, captures, NE_EXPR))
17724 : 0 : return true;
17725 : : }
17726 : : }
17727 : 4016 : if ((_p1 == _q21 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q21, 0) && types_match (_p1, _q21)))
17728 : : {
17729 : 84 : {
17730 : 84 : tree captures[2] ATTRIBUTE_UNUSED = { _q21, _q20 };
17731 : 84 : if (gimple_simplify_286 (res_op, seq, valueize, type, captures, NE_EXPR))
17732 : 84 : return true;
17733 : : }
17734 : : }
17735 : 122827594 : break;
17736 : : }
17737 : : default:;
17738 : : }
17739 : 13854165 : else if (gcall *_c1 = dyn_cast <gcall *> (_d1))
17740 : 7928494 : switch (gimple_call_combined_fn (_c1))
17741 : : {
17742 : 98 : case CFN_BUILT_IN_SQRTF:
17743 : 98 : if (gimple_call_num_args (_c1) == 1)
17744 : : {
17745 : 98 : tree _q20 = gimple_call_arg (_c1, 0);
17746 : 98 : _q20 = do_valueize (valueize, _q20);
17747 : 98 : switch (TREE_CODE (_p1))
17748 : : {
17749 : 86 : case SSA_NAME:
17750 : 86 : if (gimple *_d2 = get_def (valueize, _p1))
17751 : : {
17752 : 86 : if (gcall *_c2 = dyn_cast <gcall *> (_d2))
17753 : 86 : switch (gimple_call_combined_fn (_c2))
17754 : : {
17755 : 2 : case CFN_BUILT_IN_SQRTF:
17756 : 2 : if (gimple_call_num_args (_c2) == 1)
17757 : : {
17758 : 2 : tree _q40 = gimple_call_arg (_c2, 0);
17759 : 2 : _q40 = do_valueize (valueize, _q40);
17760 : 2 : {
17761 : 2 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q40 };
17762 : 2 : if (gimple_simplify_275 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_SQRTF, NE_EXPR))
17763 : 2 : return true;
17764 : : }
17765 : : }
17766 : : break;
17767 : : default:;
17768 : : }
17769 : : }
17770 : : break;
17771 : 12 : case REAL_CST:
17772 : 12 : {
17773 : 12 : {
17774 : 12 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
17775 : 12 : if (gimple_simplify_274 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_SQRTF, NE_EXPR))
17776 : 12 : return true;
17777 : : }
17778 : 0 : break;
17779 : : }
17780 : : default:;
17781 : : }
17782 : : }
17783 : : break;
17784 : 98 : case CFN_BUILT_IN_SQRTL:
17785 : 98 : if (gimple_call_num_args (_c1) == 1)
17786 : : {
17787 : 98 : tree _q20 = gimple_call_arg (_c1, 0);
17788 : 98 : _q20 = do_valueize (valueize, _q20);
17789 : 98 : switch (TREE_CODE (_p1))
17790 : : {
17791 : 86 : case SSA_NAME:
17792 : 86 : if (gimple *_d2 = get_def (valueize, _p1))
17793 : : {
17794 : 86 : if (gcall *_c2 = dyn_cast <gcall *> (_d2))
17795 : 86 : switch (gimple_call_combined_fn (_c2))
17796 : : {
17797 : 2 : case CFN_BUILT_IN_SQRTL:
17798 : 2 : if (gimple_call_num_args (_c2) == 1)
17799 : : {
17800 : 2 : tree _q40 = gimple_call_arg (_c2, 0);
17801 : 2 : _q40 = do_valueize (valueize, _q40);
17802 : 2 : {
17803 : 2 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q40 };
17804 : 2 : if (gimple_simplify_275 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_SQRTL, NE_EXPR))
17805 : 2 : return true;
17806 : : }
17807 : : }
17808 : : break;
17809 : : default:;
17810 : : }
17811 : : }
17812 : : break;
17813 : 12 : case REAL_CST:
17814 : 12 : {
17815 : 12 : {
17816 : 12 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
17817 : 12 : if (gimple_simplify_274 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_SQRTL, NE_EXPR))
17818 : 12 : return true;
17819 : : }
17820 : 0 : break;
17821 : : }
17822 : : default:;
17823 : : }
17824 : : }
17825 : : break;
17826 : 122 : case CFN_BUILT_IN_SQRT:
17827 : 122 : if (gimple_call_num_args (_c1) == 1)
17828 : : {
17829 : 122 : tree _q20 = gimple_call_arg (_c1, 0);
17830 : 122 : _q20 = do_valueize (valueize, _q20);
17831 : 122 : switch (TREE_CODE (_p1))
17832 : : {
17833 : 110 : case SSA_NAME:
17834 : 110 : if (gimple *_d2 = get_def (valueize, _p1))
17835 : : {
17836 : 110 : if (gcall *_c2 = dyn_cast <gcall *> (_d2))
17837 : 98 : switch (gimple_call_combined_fn (_c2))
17838 : : {
17839 : 12 : case CFN_BUILT_IN_SQRT:
17840 : 12 : if (gimple_call_num_args (_c2) == 1)
17841 : : {
17842 : 12 : tree _q40 = gimple_call_arg (_c2, 0);
17843 : 12 : _q40 = do_valueize (valueize, _q40);
17844 : 12 : {
17845 : 12 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q40 };
17846 : 12 : if (gimple_simplify_275 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_SQRT, NE_EXPR))
17847 : 4 : return true;
17848 : : }
17849 : : }
17850 : : break;
17851 : : default:;
17852 : : }
17853 : : }
17854 : : break;
17855 : 12 : case REAL_CST:
17856 : 12 : {
17857 : 12 : {
17858 : 12 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
17859 : 12 : if (gimple_simplify_274 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_SQRT, NE_EXPR))
17860 : 12 : return true;
17861 : : }
17862 : 0 : break;
17863 : : }
17864 : : default:;
17865 : : }
17866 : : }
17867 : : break;
17868 : 0 : case CFN_SQRT:
17869 : 0 : if (gimple_call_num_args (_c1) == 1)
17870 : : {
17871 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
17872 : 0 : _q20 = do_valueize (valueize, _q20);
17873 : 0 : switch (TREE_CODE (_p1))
17874 : : {
17875 : 0 : case SSA_NAME:
17876 : 0 : if (gimple *_d2 = get_def (valueize, _p1))
17877 : : {
17878 : 0 : if (gcall *_c2 = dyn_cast <gcall *> (_d2))
17879 : 0 : switch (gimple_call_combined_fn (_c2))
17880 : : {
17881 : 0 : case CFN_SQRT:
17882 : 0 : if (gimple_call_num_args (_c2) == 1)
17883 : : {
17884 : 0 : tree _q40 = gimple_call_arg (_c2, 0);
17885 : 0 : _q40 = do_valueize (valueize, _q40);
17886 : 0 : {
17887 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q40 };
17888 : 0 : if (gimple_simplify_275 (res_op, seq, valueize, type, captures, CFN_SQRT, NE_EXPR))
17889 : 0 : return true;
17890 : : }
17891 : : }
17892 : : break;
17893 : : default:;
17894 : : }
17895 : : }
17896 : : break;
17897 : 0 : case REAL_CST:
17898 : 0 : {
17899 : 0 : {
17900 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
17901 : 0 : if (gimple_simplify_274 (res_op, seq, valueize, type, captures, CFN_SQRT, NE_EXPR))
17902 : 0 : return true;
17903 : : }
17904 : 0 : break;
17905 : : }
17906 : : default:;
17907 : : }
17908 : : }
17909 : : break;
17910 : : default:;
17911 : : }
17912 : : }
17913 : 122827594 : {
17914 : 122827594 : switch (TREE_CODE (_p1))
17915 : : {
17916 : 22507627 : case SSA_NAME:
17917 : 22507627 : if (gimple *_d1 = get_def (valueize, _p1))
17918 : : {
17919 : 7159923 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
17920 : 10191364 : switch (gimple_assign_rhs_code (_a1))
17921 : : {
17922 : 23267 : case ADDR_EXPR:
17923 : 23267 : {
17924 : 23267 : {
17925 : 23267 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
17926 : 23267 : if (gimple_simplify_284 (res_op, seq, valueize, type, captures, NE_EXPR))
17927 : 14 : return true;
17928 : : }
17929 : 23253 : break;
17930 : : }
17931 : : default:;
17932 : : }
17933 : : }
17934 : : break;
17935 : 2653514 : case ADDR_EXPR:
17936 : 2653514 : {
17937 : 2653514 : {
17938 : 2653514 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
17939 : 2653514 : if (gimple_simplify_284 (res_op, seq, valueize, type, captures, NE_EXPR))
17940 : 69 : return true;
17941 : : }
17942 : 2653445 : break;
17943 : : }
17944 : : default:;
17945 : : }
17946 : : }
17947 : : break;
17948 : 125737964 : default:;
17949 : : }
17950 : 125737964 : switch (TREE_CODE (_p1))
17951 : : {
17952 : 22706593 : case SSA_NAME:
17953 : 22706593 : if (gimple *_d1 = get_def (valueize, _p1))
17954 : : {
17955 : 7159909 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
17956 : 10191336 : switch (gimple_assign_rhs_code (_a1))
17957 : : {
17958 : 8873 : case BIT_XOR_EXPR:
17959 : 8873 : {
17960 : 8873 : tree _q30 = gimple_assign_rhs1 (_a1);
17961 : 8873 : _q30 = do_valueize (valueize, _q30);
17962 : 8873 : tree _q31 = gimple_assign_rhs2 (_a1);
17963 : 8873 : _q31 = do_valueize (valueize, _q31);
17964 : 8873 : if (tree_swap_operands_p (_q30, _q31))
17965 : 293 : std::swap (_q30, _q31);
17966 : 8873 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || (operand_equal_p (_q30, _p0, 0) && types_match (_q30, _p0)))
17967 : : {
17968 : 0 : {
17969 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q31 };
17970 : 0 : if (gimple_simplify_286 (res_op, seq, valueize, type, captures, NE_EXPR))
17971 : 0 : return true;
17972 : : }
17973 : : }
17974 : 8873 : if ((_q31 == _p0 && ! TREE_SIDE_EFFECTS (_q31)) || (operand_equal_p (_q31, _p0, 0) && types_match (_q31, _p0)))
17975 : : {
17976 : 18 : {
17977 : 18 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q30 };
17978 : 18 : if (gimple_simplify_286 (res_op, seq, valueize, type, captures, NE_EXPR))
17979 : 18 : return true;
17980 : : }
17981 : : }
17982 : 125737946 : break;
17983 : : }
17984 : : default:;
17985 : : }
17986 : : }
17987 : : break;
17988 : 125737946 : default:;
17989 : : }
17990 : 125737946 : switch (TREE_CODE (_p0))
17991 : : {
17992 : 122827493 : case SSA_NAME:
17993 : 122827493 : if (gimple *_d1 = get_def (valueize, _p0))
17994 : : {
17995 : 40512314 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
17996 : 44444746 : switch (gimple_assign_rhs_code (_a1))
17997 : : {
17998 : 2807240 : case BIT_AND_EXPR:
17999 : 2807240 : {
18000 : 2807240 : tree _q20 = gimple_assign_rhs1 (_a1);
18001 : 2807240 : _q20 = do_valueize (valueize, _q20);
18002 : 2807240 : tree _q21 = gimple_assign_rhs2 (_a1);
18003 : 2807240 : _q21 = do_valueize (valueize, _q21);
18004 : 2807240 : if (tree_swap_operands_p (_q20, _q21))
18005 : 62607 : std::swap (_q20, _q21);
18006 : 2807240 : if ((_p1 == _q20 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q20, 0) && types_match (_p1, _q20)))
18007 : : {
18008 : 548 : {
18009 : 548 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
18010 : 548 : if (gimple_simplify_287 (res_op, seq, valueize, type, captures, NE_EXPR))
18011 : 447 : return true;
18012 : : }
18013 : : }
18014 : 2806793 : if ((_p1 == _q21 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q21, 0) && types_match (_p1, _q21)))
18015 : : {
18016 : 12818 : {
18017 : 12818 : tree captures[2] ATTRIBUTE_UNUSED = { _q21, _q20 };
18018 : 12818 : if (gimple_simplify_287 (res_op, seq, valueize, type, captures, NE_EXPR))
18019 : 4 : return true;
18020 : : }
18021 : : }
18022 : 125737495 : break;
18023 : : }
18024 : : default:;
18025 : : }
18026 : : }
18027 : : break;
18028 : 125737495 : default:;
18029 : : }
18030 : 125737495 : switch (TREE_CODE (_p1))
18031 : : {
18032 : 22706124 : case SSA_NAME:
18033 : 22706124 : if (gimple *_d1 = get_def (valueize, _p1))
18034 : : {
18035 : 7159447 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
18036 : 10190891 : switch (gimple_assign_rhs_code (_a1))
18037 : : {
18038 : 20684 : case BIT_AND_EXPR:
18039 : 20684 : {
18040 : 20684 : tree _q30 = gimple_assign_rhs1 (_a1);
18041 : 20684 : _q30 = do_valueize (valueize, _q30);
18042 : 20684 : tree _q31 = gimple_assign_rhs2 (_a1);
18043 : 20684 : _q31 = do_valueize (valueize, _q31);
18044 : 20684 : if (tree_swap_operands_p (_q30, _q31))
18045 : 229 : std::swap (_q30, _q31);
18046 : 20684 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || (operand_equal_p (_q30, _p0, 0) && types_match (_q30, _p0)))
18047 : : {
18048 : 749 : {
18049 : 749 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q31 };
18050 : 749 : if (gimple_simplify_287 (res_op, seq, valueize, type, captures, NE_EXPR))
18051 : 118 : return true;
18052 : : }
18053 : : }
18054 : 20566 : if ((_q31 == _p0 && ! TREE_SIDE_EFFECTS (_q31)) || (operand_equal_p (_q31, _p0, 0) && types_match (_q31, _p0)))
18055 : : {
18056 : 128 : {
18057 : 128 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q30 };
18058 : 128 : if (gimple_simplify_287 (res_op, seq, valueize, type, captures, NE_EXPR))
18059 : 3 : return true;
18060 : : }
18061 : : }
18062 : 125737374 : break;
18063 : : }
18064 : : default:;
18065 : : }
18066 : : }
18067 : : break;
18068 : 125737374 : default:;
18069 : : }
18070 : 125737374 : switch (TREE_CODE (_p0))
18071 : : {
18072 : 122826921 : case SSA_NAME:
18073 : 122826921 : if (gimple *_d1 = get_def (valueize, _p0))
18074 : : {
18075 : 40511750 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
18076 : 44444226 : switch (gimple_assign_rhs_code (_a1))
18077 : : {
18078 : 2113178 : CASE_CONVERT:
18079 : 2113178 : {
18080 : 2113178 : tree _q20 = gimple_assign_rhs1 (_a1);
18081 : 2113178 : _q20 = do_valueize (valueize, _q20);
18082 : 2113178 : switch (TREE_CODE (_q20))
18083 : : {
18084 : 2102087 : case SSA_NAME:
18085 : 2102087 : if (gimple *_d2 = get_def (valueize, _q20))
18086 : : {
18087 : 2066900 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
18088 : 2423815 : switch (gimple_assign_rhs_code (_a2))
18089 : : {
18090 : 11216 : case BIT_AND_EXPR:
18091 : 11216 : {
18092 : 11216 : tree _q30 = gimple_assign_rhs1 (_a2);
18093 : 11216 : _q30 = do_valueize (valueize, _q30);
18094 : 11216 : tree _q31 = gimple_assign_rhs2 (_a2);
18095 : 11216 : _q31 = do_valueize (valueize, _q31);
18096 : 11216 : if (tree_swap_operands_p (_q30, _q31))
18097 : 93 : std::swap (_q30, _q31);
18098 : 11216 : switch (TREE_CODE (_q30))
18099 : : {
18100 : 11216 : case SSA_NAME:
18101 : 11216 : if (gimple *_d3 = get_def (valueize, _q30))
18102 : : {
18103 : 10933 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
18104 : 15389 : switch (gimple_assign_rhs_code (_a3))
18105 : : {
18106 : 144 : CASE_CONVERT:
18107 : 144 : {
18108 : 144 : tree _q40 = gimple_assign_rhs1 (_a3);
18109 : 144 : _q40 = do_valueize (valueize, _q40);
18110 : 144 : switch (TREE_CODE (_q31))
18111 : : {
18112 : 74 : case INTEGER_CST:
18113 : 74 : {
18114 : 74 : switch (TREE_CODE (_p1))
18115 : : {
18116 : 1 : case SSA_NAME:
18117 : 1 : if (gimple *_d4 = get_def (valueize, _p1))
18118 : : {
18119 : 1 : if (gassign *_a4 = dyn_cast <gassign *> (_d4))
18120 : 2 : switch (gimple_assign_rhs_code (_a4))
18121 : : {
18122 : 0 : CASE_CONVERT:
18123 : 0 : {
18124 : 0 : tree _q70 = gimple_assign_rhs1 (_a4);
18125 : 0 : _q70 = do_valueize (valueize, _q70);
18126 : 0 : if ((_q70 == _q40 && ! TREE_SIDE_EFFECTS (_q70)) || (operand_equal_p (_q70, _q40, 0) && types_match (_q70, _q40)))
18127 : : {
18128 : 0 : {
18129 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q30, _q40, _q31 };
18130 : 0 : if (gimple_simplify_288 (res_op, seq, valueize, type, captures, NE_EXPR))
18131 : 0 : return true;
18132 : : }
18133 : : }
18134 : : break;
18135 : : }
18136 : : default:;
18137 : : }
18138 : : }
18139 : : break;
18140 : : default:;
18141 : : }
18142 : : break;
18143 : : }
18144 : : default:;
18145 : : }
18146 : : break;
18147 : : }
18148 : : default:;
18149 : : }
18150 : : }
18151 : : break;
18152 : : default:;
18153 : : }
18154 : 2113178 : break;
18155 : : }
18156 : : default:;
18157 : : }
18158 : : }
18159 : : break;
18160 : 2113178 : default:;
18161 : : }
18162 : 2113178 : switch (TREE_CODE (_p1))
18163 : : {
18164 : 580444 : case SSA_NAME:
18165 : 580444 : if (gimple *_d2 = get_def (valueize, _p1))
18166 : : {
18167 : 525092 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
18168 : 625462 : switch (gimple_assign_rhs_code (_a2))
18169 : : {
18170 : 75182 : CASE_CONVERT:
18171 : 75182 : {
18172 : 75182 : tree _q40 = gimple_assign_rhs1 (_a2);
18173 : 75182 : _q40 = do_valueize (valueize, _q40);
18174 : 75182 : switch (TREE_CODE (_q40))
18175 : : {
18176 : 72061 : case SSA_NAME:
18177 : 72061 : if (gimple *_d3 = get_def (valueize, _q40))
18178 : : {
18179 : 71351 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
18180 : 80152 : switch (gimple_assign_rhs_code (_a3))
18181 : : {
18182 : 985 : case BIT_AND_EXPR:
18183 : 985 : {
18184 : 985 : tree _q50 = gimple_assign_rhs1 (_a3);
18185 : 985 : _q50 = do_valueize (valueize, _q50);
18186 : 985 : tree _q51 = gimple_assign_rhs2 (_a3);
18187 : 985 : _q51 = do_valueize (valueize, _q51);
18188 : 985 : if (tree_swap_operands_p (_q50, _q51))
18189 : 2 : std::swap (_q50, _q51);
18190 : 985 : switch (TREE_CODE (_q50))
18191 : : {
18192 : 985 : case SSA_NAME:
18193 : 985 : if (gimple *_d4 = get_def (valueize, _q50))
18194 : : {
18195 : 979 : if (gassign *_a4 = dyn_cast <gassign *> (_d4))
18196 : 1063 : switch (gimple_assign_rhs_code (_a4))
18197 : : {
18198 : 0 : CASE_CONVERT:
18199 : 0 : {
18200 : 0 : tree _q60 = gimple_assign_rhs1 (_a4);
18201 : 0 : _q60 = do_valueize (valueize, _q60);
18202 : 0 : if ((_q60 == _q20 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _q20, 0) && types_match (_q60, _q20)))
18203 : : {
18204 : 0 : switch (TREE_CODE (_q51))
18205 : : {
18206 : 0 : case INTEGER_CST:
18207 : 0 : {
18208 : 0 : {
18209 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p1, _q50, _q20, _q51 };
18210 : 0 : if (gimple_simplify_288 (res_op, seq, valueize, type, captures, NE_EXPR))
18211 : 0 : return true;
18212 : : }
18213 : 0 : break;
18214 : : }
18215 : : default:;
18216 : : }
18217 : : }
18218 : : break;
18219 : : }
18220 : : default:;
18221 : : }
18222 : : }
18223 : : break;
18224 : : default:;
18225 : : }
18226 : 125737307 : break;
18227 : : }
18228 : : default:;
18229 : : }
18230 : : }
18231 : : break;
18232 : : default:;
18233 : : }
18234 : : break;
18235 : : }
18236 : : default:;
18237 : : }
18238 : : }
18239 : : break;
18240 : : default:;
18241 : : }
18242 : : break;
18243 : : }
18244 : 1022232 : case BIT_IOR_EXPR:
18245 : 1022232 : {
18246 : 1022232 : tree _q20 = gimple_assign_rhs1 (_a1);
18247 : 1022232 : _q20 = do_valueize (valueize, _q20);
18248 : 1022232 : tree _q21 = gimple_assign_rhs2 (_a1);
18249 : 1022232 : _q21 = do_valueize (valueize, _q21);
18250 : 1022232 : if (tree_swap_operands_p (_q20, _q21))
18251 : 64428 : std::swap (_q20, _q21);
18252 : 1022232 : if ((_p1 == _q21 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q21, 0) && types_match (_p1, _q21)))
18253 : : {
18254 : 270 : {
18255 : 270 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q21 };
18256 : 270 : if (gimple_simplify_289 (res_op, seq, valueize, type, captures, NE_EXPR))
18257 : 67 : return true;
18258 : : }
18259 : : }
18260 : 1022165 : if ((_p1 == _q20 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q20, 0) && types_match (_p1, _q20)))
18261 : : {
18262 : 230 : {
18263 : 230 : tree captures[2] ATTRIBUTE_UNUSED = { _q21, _q20 };
18264 : 230 : if (gimple_simplify_289 (res_op, seq, valueize, type, captures, NE_EXPR))
18265 : 0 : return true;
18266 : : }
18267 : : }
18268 : 125737307 : break;
18269 : : }
18270 : : default:;
18271 : : }
18272 : : }
18273 : : break;
18274 : 125737307 : default:;
18275 : : }
18276 : 125737307 : switch (TREE_CODE (_p1))
18277 : : {
18278 : 22706003 : case SSA_NAME:
18279 : 22706003 : if (gimple *_d1 = get_def (valueize, _p1))
18280 : : {
18281 : 7159326 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
18282 : 10190770 : switch (gimple_assign_rhs_code (_a1))
18283 : : {
18284 : 6608 : case BIT_IOR_EXPR:
18285 : 6608 : {
18286 : 6608 : tree _q30 = gimple_assign_rhs1 (_a1);
18287 : 6608 : _q30 = do_valueize (valueize, _q30);
18288 : 6608 : tree _q31 = gimple_assign_rhs2 (_a1);
18289 : 6608 : _q31 = do_valueize (valueize, _q31);
18290 : 6608 : if (tree_swap_operands_p (_q30, _q31))
18291 : 320 : std::swap (_q30, _q31);
18292 : 6608 : if ((_q31 == _p0 && ! TREE_SIDE_EFFECTS (_q31)) || (operand_equal_p (_q31, _p0, 0) && types_match (_q31, _p0)))
18293 : : {
18294 : 167 : {
18295 : 167 : tree captures[2] ATTRIBUTE_UNUSED = { _q30, _p0 };
18296 : 167 : if (gimple_simplify_289 (res_op, seq, valueize, type, captures, NE_EXPR))
18297 : 0 : return true;
18298 : : }
18299 : : }
18300 : 6608 : if ((_q30 == _p0 && ! TREE_SIDE_EFFECTS (_q30)) || (operand_equal_p (_q30, _p0, 0) && types_match (_q30, _p0)))
18301 : : {
18302 : 798 : {
18303 : 798 : tree captures[2] ATTRIBUTE_UNUSED = { _q31, _p0 };
18304 : 798 : if (gimple_simplify_289 (res_op, seq, valueize, type, captures, NE_EXPR))
18305 : 0 : return true;
18306 : : }
18307 : : }
18308 : 125737307 : break;
18309 : : }
18310 : : default:;
18311 : : }
18312 : : }
18313 : : break;
18314 : 125737307 : default:;
18315 : : }
18316 : 125737307 : switch (TREE_CODE (_p0))
18317 : : {
18318 : 122826854 : case SSA_NAME:
18319 : 122826854 : if (gimple *_d1 = get_def (valueize, _p0))
18320 : : {
18321 : 40511683 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
18322 : 44444159 : switch (gimple_assign_rhs_code (_a1))
18323 : : {
18324 : 2113178 : CASE_CONVERT:
18325 : 2113178 : {
18326 : 2113178 : tree _q20 = gimple_assign_rhs1 (_a1);
18327 : 2113178 : _q20 = do_valueize (valueize, _q20);
18328 : 2113178 : switch (TREE_CODE (_q20))
18329 : : {
18330 : 2102087 : case SSA_NAME:
18331 : 2102087 : if (gimple *_d2 = get_def (valueize, _q20))
18332 : : {
18333 : 2066900 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
18334 : 2423815 : switch (gimple_assign_rhs_code (_a2))
18335 : : {
18336 : 1371 : case BIT_XOR_EXPR:
18337 : 1371 : {
18338 : 1371 : tree _q30 = gimple_assign_rhs1 (_a2);
18339 : 1371 : _q30 = do_valueize (valueize, _q30);
18340 : 1371 : tree _q31 = gimple_assign_rhs2 (_a2);
18341 : 1371 : _q31 = do_valueize (valueize, _q31);
18342 : 1371 : if (tree_swap_operands_p (_q30, _q31))
18343 : 17 : std::swap (_q30, _q31);
18344 : 1371 : switch (TREE_CODE (_q31))
18345 : : {
18346 : 1076 : case INTEGER_CST:
18347 : 1076 : {
18348 : 1076 : switch (TREE_CODE (_p1))
18349 : : {
18350 : 1062 : case INTEGER_CST:
18351 : 1062 : {
18352 : 1062 : {
18353 : 1062 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q30, _q31, _p1 };
18354 : 1062 : if (gimple_simplify_290 (res_op, seq, valueize, type, captures, NE_EXPR))
18355 : 1 : return true;
18356 : : }
18357 : 1061 : break;
18358 : : }
18359 : : default:;
18360 : : }
18361 : : break;
18362 : : }
18363 : : default:;
18364 : : }
18365 : 125737238 : break;
18366 : : }
18367 : : default:;
18368 : : }
18369 : : }
18370 : : break;
18371 : : default:;
18372 : : }
18373 : : break;
18374 : : }
18375 : 3932 : case BIT_XOR_EXPR:
18376 : 3932 : {
18377 : 3932 : tree _q20 = gimple_assign_rhs1 (_a1);
18378 : 3932 : _q20 = do_valueize (valueize, _q20);
18379 : 3932 : tree _q21 = gimple_assign_rhs2 (_a1);
18380 : 3932 : _q21 = do_valueize (valueize, _q21);
18381 : 3932 : if (tree_swap_operands_p (_q20, _q21))
18382 : 239 : std::swap (_q20, _q21);
18383 : 3932 : switch (TREE_CODE (_q21))
18384 : : {
18385 : 252 : case INTEGER_CST:
18386 : 252 : {
18387 : 252 : switch (TREE_CODE (_p1))
18388 : : {
18389 : 68 : case INTEGER_CST:
18390 : 68 : {
18391 : 68 : {
18392 : 68 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _p1 };
18393 : 68 : if (gimple_simplify_290 (res_op, seq, valueize, type, captures, NE_EXPR))
18394 : 68 : return true;
18395 : : }
18396 : 0 : break;
18397 : : }
18398 : : default:;
18399 : : }
18400 : : break;
18401 : : }
18402 : : default:;
18403 : : }
18404 : 125737238 : break;
18405 : : }
18406 : : default:;
18407 : : }
18408 : : }
18409 : : break;
18410 : 125737238 : default:;
18411 : : }
18412 : 125737238 : {
18413 : 125737238 : tree _p0_pops[1];
18414 : 125737238 : if (gimple_nop_convert (_p0, _p0_pops, valueize))
18415 : : {
18416 : 427741 : tree _q20 = _p0_pops[0];
18417 : 427741 : if (integer_zerop (_p1))
18418 : : {
18419 : 192753 : {
18420 : 192753 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
18421 : 192753 : if (gimple_simplify_291 (res_op, seq, valueize, type, captures, NE_EXPR))
18422 : 152 : return true;
18423 : : }
18424 : : }
18425 : : }
18426 : : }
18427 : 125737086 : if (integer_zerop (_p1))
18428 : : {
18429 : 70921788 : {
18430 : 70921788 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
18431 : 70921788 : if (gimple_simplify_291 (res_op, seq, valueize, type, captures, NE_EXPR))
18432 : 23952 : return true;
18433 : : }
18434 : : }
18435 : 125713134 : switch (TREE_CODE (_p0))
18436 : : {
18437 : 122817679 : case SSA_NAME:
18438 : 122817679 : if (gimple *_d1 = get_def (valueize, _p0))
18439 : : {
18440 : 40506301 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
18441 : 44440190 : switch (gimple_assign_rhs_code (_a1))
18442 : : {
18443 : 2806789 : case BIT_AND_EXPR:
18444 : 2806789 : {
18445 : 2806789 : tree _q20 = gimple_assign_rhs1 (_a1);
18446 : 2806789 : _q20 = do_valueize (valueize, _q20);
18447 : 2806789 : tree _q21 = gimple_assign_rhs2 (_a1);
18448 : 2806789 : _q21 = do_valueize (valueize, _q21);
18449 : 2806789 : if (tree_swap_operands_p (_q20, _q21))
18450 : 62607 : std::swap (_q20, _q21);
18451 : 2806789 : switch (TREE_CODE (_p1))
18452 : : {
18453 : 43218 : case SSA_NAME:
18454 : 43218 : if (gimple *_d2 = get_def (valueize, _p1))
18455 : : {
18456 : 42044 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
18457 : 49483 : switch (gimple_assign_rhs_code (_a2))
18458 : : {
18459 : 1211 : case BIT_AND_EXPR:
18460 : 1211 : {
18461 : 1211 : tree _q50 = gimple_assign_rhs1 (_a2);
18462 : 1211 : _q50 = do_valueize (valueize, _q50);
18463 : 1211 : tree _q51 = gimple_assign_rhs2 (_a2);
18464 : 1211 : _q51 = do_valueize (valueize, _q51);
18465 : 1211 : if (tree_swap_operands_p (_q50, _q51))
18466 : 32 : std::swap (_q50, _q51);
18467 : 1211 : if ((_q51 == _q21 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q21, 0) && types_match (_q51, _q21)))
18468 : : {
18469 : 884 : {
18470 : 884 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _p1, _q50 };
18471 : 884 : if (gimple_simplify_292 (res_op, seq, valueize, type, captures, NE_EXPR))
18472 : 40 : return true;
18473 : : }
18474 : : }
18475 : 1171 : if ((_q50 == _q21 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q21, 0) && types_match (_q50, _q21)))
18476 : : {
18477 : 28 : {
18478 : 28 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _p1, _q51 };
18479 : 28 : if (gimple_simplify_292 (res_op, seq, valueize, type, captures, NE_EXPR))
18480 : 0 : return true;
18481 : : }
18482 : : }
18483 : 1171 : if ((_q51 == _q20 && ! TREE_SIDE_EFFECTS (_q51)) || (operand_equal_p (_q51, _q20, 0) && types_match (_q51, _q20)))
18484 : : {
18485 : 2 : {
18486 : 2 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q21, _q20, _p1, _q50 };
18487 : 2 : if (gimple_simplify_292 (res_op, seq, valueize, type, captures, NE_EXPR))
18488 : 0 : return true;
18489 : : }
18490 : : }
18491 : 1171 : if ((_q50 == _q20 && ! TREE_SIDE_EFFECTS (_q50)) || (operand_equal_p (_q50, _q20, 0) && types_match (_q50, _q20)))
18492 : : {
18493 : 17 : {
18494 : 17 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q21, _q20, _p1, _q51 };
18495 : 17 : if (gimple_simplify_292 (res_op, seq, valueize, type, captures, NE_EXPR))
18496 : 0 : return true;
18497 : : }
18498 : : }
18499 : 2806749 : break;
18500 : : }
18501 : : default:;
18502 : : }
18503 : : }
18504 : : break;
18505 : 2806749 : default:;
18506 : : }
18507 : 2806749 : if (integer_pow2p (_q21))
18508 : : {
18509 : 940837 : if ((_p1 == _q21 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q21, 0) && types_match (_p1, _q21)))
18510 : : {
18511 : 607 : {
18512 : 607 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
18513 : 607 : if (gimple_simplify_293 (res_op, seq, valueize, type, captures, NE_EXPR, EQ_EXPR))
18514 : 607 : return true;
18515 : : }
18516 : : }
18517 : : }
18518 : 2806142 : switch (TREE_CODE (_q20))
18519 : : {
18520 : 2806142 : case SSA_NAME:
18521 : 2806142 : if (gimple *_d2 = get_def (valueize, _q20))
18522 : : {
18523 : 2718065 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
18524 : 3366481 : switch (gimple_assign_rhs_code (_a2))
18525 : : {
18526 : 103245 : CASE_CONVERT:
18527 : 103245 : {
18528 : 103245 : tree _q30 = gimple_assign_rhs1 (_a2);
18529 : 103245 : _q30 = do_valueize (valueize, _q30);
18530 : 103245 : if (integer_pow2p (_q21))
18531 : : {
18532 : 23765 : if (integer_zerop (_p1))
18533 : : {
18534 : 23614 : {
18535 : 23614 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q30, _q21 };
18536 : 23614 : if (gimple_simplify_294 (res_op, seq, valueize, type, captures, NE_EXPR, LT_EXPR))
18537 : 18 : return true;
18538 : : }
18539 : : }
18540 : : }
18541 : : break;
18542 : : }
18543 : : default:;
18544 : : }
18545 : : }
18546 : : break;
18547 : 2806124 : default:;
18548 : : }
18549 : 2806124 : if (integer_pow2p (_q21))
18550 : : {
18551 : 940212 : if (integer_zerop (_p1))
18552 : : {
18553 : 933524 : {
18554 : 933524 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q20, _q21 };
18555 : 933524 : if (gimple_simplify_295 (res_op, seq, valueize, type, captures, NE_EXPR, LT_EXPR))
18556 : 1211 : return true;
18557 : : }
18558 : : }
18559 : : }
18560 : 125657149 : break;
18561 : : }
18562 : 9919 : case GE_EXPR:
18563 : 9919 : {
18564 : 9919 : tree _q20 = gimple_assign_rhs1 (_a1);
18565 : 9919 : _q20 = do_valueize (valueize, _q20);
18566 : 9919 : tree _q21 = gimple_assign_rhs2 (_a1);
18567 : 9919 : _q21 = do_valueize (valueize, _q21);
18568 : 9919 : if (integer_zerop (_q21))
18569 : : {
18570 : 2339 : switch (TREE_CODE (_p1))
18571 : : {
18572 : 4 : case SSA_NAME:
18573 : 4 : if (gimple *_d2 = get_def (valueize, _p1))
18574 : : {
18575 : 4 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
18576 : 4 : switch (gimple_assign_rhs_code (_a2))
18577 : : {
18578 : 2 : case GE_EXPR:
18579 : 2 : {
18580 : 2 : tree _q50 = gimple_assign_rhs1 (_a2);
18581 : 2 : _q50 = do_valueize (valueize, _q50);
18582 : 2 : tree _q51 = gimple_assign_rhs2 (_a2);
18583 : 2 : _q51 = do_valueize (valueize, _q51);
18584 : 2 : if (integer_zerop (_q51))
18585 : : {
18586 : 2 : {
18587 : 2 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q50 };
18588 : 2 : if (gimple_simplify_296 (res_op, seq, valueize, type, captures, GE_EXPR, NE_EXPR, LT_EXPR))
18589 : 1 : return true;
18590 : : }
18591 : : }
18592 : : break;
18593 : : }
18594 : 2 : case LT_EXPR:
18595 : 2 : {
18596 : 2 : tree _q50 = gimple_assign_rhs1 (_a2);
18597 : 2 : _q50 = do_valueize (valueize, _q50);
18598 : 2 : tree _q51 = gimple_assign_rhs2 (_a2);
18599 : 2 : _q51 = do_valueize (valueize, _q51);
18600 : 2 : if (integer_zerop (_q51))
18601 : : {
18602 : 2 : {
18603 : 2 : tree captures[3] ATTRIBUTE_UNUSED = { _q50, _q51, _q20 };
18604 : 2 : if (gimple_simplify_297 (res_op, seq, valueize, type, captures, NE_EXPR, GE_EXPR))
18605 : 1 : return true;
18606 : : }
18607 : : }
18608 : : break;
18609 : : }
18610 : : default:;
18611 : : }
18612 : : }
18613 : : break;
18614 : : default:;
18615 : : }
18616 : : }
18617 : : break;
18618 : : }
18619 : 40367 : case LT_EXPR:
18620 : 40367 : {
18621 : 40367 : tree _q20 = gimple_assign_rhs1 (_a1);
18622 : 40367 : _q20 = do_valueize (valueize, _q20);
18623 : 40367 : tree _q21 = gimple_assign_rhs2 (_a1);
18624 : 40367 : _q21 = do_valueize (valueize, _q21);
18625 : 40367 : if (integer_zerop (_q21))
18626 : : {
18627 : 28654 : switch (TREE_CODE (_p1))
18628 : : {
18629 : 254 : case SSA_NAME:
18630 : 254 : if (gimple *_d2 = get_def (valueize, _p1))
18631 : : {
18632 : 248 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
18633 : 114 : switch (gimple_assign_rhs_code (_a2))
18634 : : {
18635 : 46 : case LT_EXPR:
18636 : 46 : {
18637 : 46 : tree _q50 = gimple_assign_rhs1 (_a2);
18638 : 46 : _q50 = do_valueize (valueize, _q50);
18639 : 46 : tree _q51 = gimple_assign_rhs2 (_a2);
18640 : 46 : _q51 = do_valueize (valueize, _q51);
18641 : 46 : if (integer_zerop (_q51))
18642 : : {
18643 : 46 : {
18644 : 46 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q50 };
18645 : 46 : if (gimple_simplify_296 (res_op, seq, valueize, type, captures, LT_EXPR, NE_EXPR, LT_EXPR))
18646 : 19 : return true;
18647 : : }
18648 : : }
18649 : : break;
18650 : : }
18651 : 60 : case GE_EXPR:
18652 : 60 : {
18653 : 60 : tree _q50 = gimple_assign_rhs1 (_a2);
18654 : 60 : _q50 = do_valueize (valueize, _q50);
18655 : 60 : tree _q51 = gimple_assign_rhs2 (_a2);
18656 : 60 : _q51 = do_valueize (valueize, _q51);
18657 : 60 : if (integer_zerop (_q51))
18658 : : {
18659 : 60 : {
18660 : 60 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _q50 };
18661 : 60 : if (gimple_simplify_298 (res_op, seq, valueize, type, captures, NE_EXPR, GE_EXPR))
18662 : 3 : return true;
18663 : : }
18664 : : }
18665 : : break;
18666 : : }
18667 : : default:;
18668 : : }
18669 : : }
18670 : : break;
18671 : : default:;
18672 : : }
18673 : : }
18674 : : break;
18675 : : }
18676 : 2112654 : CASE_CONVERT:
18677 : 2112654 : {
18678 : 2112654 : tree _q20 = gimple_assign_rhs1 (_a1);
18679 : 2112654 : _q20 = do_valueize (valueize, _q20);
18680 : 2112654 : switch (TREE_CODE (_q20))
18681 : : {
18682 : 2101583 : case SSA_NAME:
18683 : 2101583 : if (gimple *_d2 = get_def (valueize, _q20))
18684 : : {
18685 : 2066396 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
18686 : 2423277 : switch (gimple_assign_rhs_code (_a2))
18687 : : {
18688 : 159 : case ADDR_EXPR:
18689 : 159 : {
18690 : 159 : switch (TREE_CODE (_p1))
18691 : : {
18692 : 159 : case SSA_NAME:
18693 : 159 : if (gimple *_d3 = get_def (valueize, _p1))
18694 : : {
18695 : 159 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
18696 : 303 : switch (gimple_assign_rhs_code (_a3))
18697 : : {
18698 : 15 : CASE_CONVERT:
18699 : 15 : {
18700 : 15 : tree _q40 = gimple_assign_rhs1 (_a3);
18701 : 15 : _q40 = do_valueize (valueize, _q40);
18702 : 15 : switch (TREE_CODE (_q40))
18703 : : {
18704 : 15 : case SSA_NAME:
18705 : 15 : if (gimple *_d4 = get_def (valueize, _q40))
18706 : : {
18707 : 15 : if (gassign *_a4 = dyn_cast <gassign *> (_d4))
18708 : 30 : switch (gimple_assign_rhs_code (_a4))
18709 : : {
18710 : 15 : case ADDR_EXPR:
18711 : 15 : {
18712 : 15 : {
18713 : 15 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q40 };
18714 : 15 : if (gimple_simplify_299 (res_op, seq, valueize, type, captures, NE_EXPR))
18715 : 0 : return true;
18716 : : }
18717 : 15 : break;
18718 : : }
18719 : : default:;
18720 : : }
18721 : : }
18722 : : break;
18723 : 0 : case ADDR_EXPR:
18724 : 0 : {
18725 : 0 : {
18726 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q40 };
18727 : 0 : if (gimple_simplify_299 (res_op, seq, valueize, type, captures, NE_EXPR))
18728 : 0 : return true;
18729 : : }
18730 : 0 : break;
18731 : : }
18732 : : default:;
18733 : : }
18734 : : break;
18735 : : }
18736 : 0 : case ADDR_EXPR:
18737 : 0 : {
18738 : 0 : {
18739 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
18740 : 0 : if (gimple_simplify_299 (res_op, seq, valueize, type, captures, NE_EXPR))
18741 : 0 : return true;
18742 : : }
18743 : 0 : break;
18744 : : }
18745 : : default:;
18746 : : }
18747 : : }
18748 : : break;
18749 : 0 : case ADDR_EXPR:
18750 : 0 : {
18751 : 0 : {
18752 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
18753 : 0 : if (gimple_simplify_299 (res_op, seq, valueize, type, captures, NE_EXPR))
18754 : 0 : return true;
18755 : : }
18756 : 0 : break;
18757 : : }
18758 : : default:;
18759 : : }
18760 : : break;
18761 : : }
18762 : : default:;
18763 : : }
18764 : : }
18765 : : break;
18766 : 10579 : case ADDR_EXPR:
18767 : 10579 : {
18768 : 10579 : switch (TREE_CODE (_p1))
18769 : : {
18770 : 10529 : case SSA_NAME:
18771 : 10529 : if (gimple *_d2 = get_def (valueize, _p1))
18772 : : {
18773 : 9757 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
18774 : 17796 : switch (gimple_assign_rhs_code (_a2))
18775 : : {
18776 : 607 : CASE_CONVERT:
18777 : 607 : {
18778 : 607 : tree _q40 = gimple_assign_rhs1 (_a2);
18779 : 607 : _q40 = do_valueize (valueize, _q40);
18780 : 607 : switch (TREE_CODE (_q40))
18781 : : {
18782 : 432 : case SSA_NAME:
18783 : 432 : if (gimple *_d3 = get_def (valueize, _q40))
18784 : : {
18785 : 380 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
18786 : 748 : switch (gimple_assign_rhs_code (_a3))
18787 : : {
18788 : 0 : case ADDR_EXPR:
18789 : 0 : {
18790 : 0 : {
18791 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q40 };
18792 : 0 : if (gimple_simplify_299 (res_op, seq, valueize, type, captures, NE_EXPR))
18793 : 0 : return true;
18794 : : }
18795 : 0 : break;
18796 : : }
18797 : : default:;
18798 : : }
18799 : : }
18800 : : break;
18801 : 175 : case ADDR_EXPR:
18802 : 175 : {
18803 : 175 : {
18804 : 175 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q40 };
18805 : 175 : if (gimple_simplify_299 (res_op, seq, valueize, type, captures, NE_EXPR))
18806 : 100 : return true;
18807 : : }
18808 : 75 : break;
18809 : : }
18810 : : default:;
18811 : : }
18812 : : break;
18813 : : }
18814 : 0 : case ADDR_EXPR:
18815 : 0 : {
18816 : 0 : {
18817 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
18818 : 0 : if (gimple_simplify_299 (res_op, seq, valueize, type, captures, NE_EXPR))
18819 : 0 : return true;
18820 : : }
18821 : 0 : break;
18822 : : }
18823 : : default:;
18824 : : }
18825 : : }
18826 : : break;
18827 : 0 : case ADDR_EXPR:
18828 : 0 : {
18829 : 0 : {
18830 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
18831 : 0 : if (gimple_simplify_299 (res_op, seq, valueize, type, captures, NE_EXPR))
18832 : 0 : return true;
18833 : : }
18834 : 0 : break;
18835 : : }
18836 : : default:;
18837 : : }
18838 : : break;
18839 : : }
18840 : : default:;
18841 : : }
18842 : : break;
18843 : : }
18844 : 37288 : case ADDR_EXPR:
18845 : 37288 : {
18846 : 37288 : switch (TREE_CODE (_p1))
18847 : : {
18848 : 26827 : case SSA_NAME:
18849 : 26827 : if (gimple *_d2 = get_def (valueize, _p1))
18850 : : {
18851 : 26171 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
18852 : 34357 : switch (gimple_assign_rhs_code (_a2))
18853 : : {
18854 : 77 : CASE_CONVERT:
18855 : 77 : {
18856 : 77 : tree _q30 = gimple_assign_rhs1 (_a2);
18857 : 77 : _q30 = do_valueize (valueize, _q30);
18858 : 77 : switch (TREE_CODE (_q30))
18859 : : {
18860 : 77 : case SSA_NAME:
18861 : 77 : if (gimple *_d3 = get_def (valueize, _q30))
18862 : : {
18863 : 77 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
18864 : 20 : switch (gimple_assign_rhs_code (_a3))
18865 : : {
18866 : 0 : case ADDR_EXPR:
18867 : 0 : {
18868 : 0 : {
18869 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p0, _q30 };
18870 : 0 : if (gimple_simplify_300 (res_op, seq, valueize, type, captures, NE_EXPR))
18871 : 0 : return true;
18872 : : }
18873 : 0 : break;
18874 : : }
18875 : : default:;
18876 : : }
18877 : : }
18878 : : break;
18879 : 0 : case ADDR_EXPR:
18880 : 0 : {
18881 : 0 : {
18882 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p0, _q30 };
18883 : 0 : if (gimple_simplify_300 (res_op, seq, valueize, type, captures, NE_EXPR))
18884 : 0 : return true;
18885 : : }
18886 : 0 : break;
18887 : : }
18888 : : default:;
18889 : : }
18890 : : break;
18891 : : }
18892 : 2153 : case ADDR_EXPR:
18893 : 2153 : {
18894 : 2153 : {
18895 : 2153 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p0, _p1 };
18896 : 2153 : if (gimple_simplify_300 (res_op, seq, valueize, type, captures, NE_EXPR))
18897 : 41 : return true;
18898 : : }
18899 : 2112 : break;
18900 : : }
18901 : : default:;
18902 : : }
18903 : : }
18904 : : break;
18905 : 1840 : case ADDR_EXPR:
18906 : 1840 : {
18907 : 1840 : {
18908 : 1840 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p0, _p1 };
18909 : 1840 : if (gimple_simplify_300 (res_op, seq, valueize, type, captures, NE_EXPR))
18910 : 118 : return true;
18911 : : }
18912 : 1722 : break;
18913 : : }
18914 : : default:;
18915 : : }
18916 : : break;
18917 : : }
18918 : : default:;
18919 : : }
18920 : : }
18921 : : break;
18922 : 75061 : case ADDR_EXPR:
18923 : 75061 : {
18924 : 75061 : switch (TREE_CODE (_p1))
18925 : : {
18926 : 0 : case SSA_NAME:
18927 : 0 : if (gimple *_d1 = get_def (valueize, _p1))
18928 : : {
18929 : 0 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
18930 : 0 : switch (gimple_assign_rhs_code (_a1))
18931 : : {
18932 : 0 : CASE_CONVERT:
18933 : 0 : {
18934 : 0 : tree _q30 = gimple_assign_rhs1 (_a1);
18935 : 0 : _q30 = do_valueize (valueize, _q30);
18936 : 0 : switch (TREE_CODE (_q30))
18937 : : {
18938 : 0 : case SSA_NAME:
18939 : 0 : if (gimple *_d2 = get_def (valueize, _q30))
18940 : : {
18941 : 0 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
18942 : 0 : switch (gimple_assign_rhs_code (_a2))
18943 : : {
18944 : 0 : case ADDR_EXPR:
18945 : 0 : {
18946 : 0 : {
18947 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p0, _q30 };
18948 : 0 : if (gimple_simplify_300 (res_op, seq, valueize, type, captures, NE_EXPR))
18949 : 0 : return true;
18950 : : }
18951 : 0 : break;
18952 : : }
18953 : : default:;
18954 : : }
18955 : : }
18956 : : break;
18957 : 0 : case ADDR_EXPR:
18958 : 0 : {
18959 : 0 : {
18960 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p0, _q30 };
18961 : 0 : if (gimple_simplify_300 (res_op, seq, valueize, type, captures, NE_EXPR))
18962 : 0 : return true;
18963 : : }
18964 : 0 : break;
18965 : : }
18966 : : default:;
18967 : : }
18968 : : break;
18969 : : }
18970 : 0 : case ADDR_EXPR:
18971 : 0 : {
18972 : 0 : {
18973 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p0, _p1 };
18974 : 0 : if (gimple_simplify_300 (res_op, seq, valueize, type, captures, NE_EXPR))
18975 : 0 : return true;
18976 : : }
18977 : 0 : break;
18978 : : }
18979 : : default:;
18980 : : }
18981 : : }
18982 : : break;
18983 : 58045 : case ADDR_EXPR:
18984 : 58045 : {
18985 : 58045 : {
18986 : 58045 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p0, _p1 };
18987 : 58045 : if (gimple_simplify_300 (res_op, seq, valueize, type, captures, NE_EXPR))
18988 : 53826 : return true;
18989 : : }
18990 : 4219 : break;
18991 : : }
18992 : : default:;
18993 : : }
18994 : : break;
18995 : : }
18996 : 125657149 : default:;
18997 : : }
18998 : 125657149 : {
18999 : 125657149 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
19000 : 125657149 : if (gimple_simplify_301 (res_op, seq, valueize, type, captures, NE_EXPR))
19001 : 6214 : return true;
19002 : : }
19003 : 125650935 : switch (TREE_CODE (_p0))
19004 : : {
19005 : 122809306 : case SSA_NAME:
19006 : 122809306 : if (gimple *_d1 = get_def (valueize, _p0))
19007 : : {
19008 : 40500828 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
19009 : 44436786 : switch (gimple_assign_rhs_code (_a1))
19010 : : {
19011 : 2112534 : CASE_CONVERT:
19012 : 2112534 : {
19013 : 2112534 : tree _q20 = gimple_assign_rhs1 (_a1);
19014 : 2112534 : _q20 = do_valueize (valueize, _q20);
19015 : 2112534 : switch (TREE_CODE (_p1))
19016 : : {
19017 : 1493597 : case INTEGER_CST:
19018 : 1493597 : {
19019 : 1493597 : {
19020 : 1493597 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
19021 : 1493597 : if (gimple_simplify_302 (res_op, seq, valueize, type, captures, NE_EXPR))
19022 : 23734 : return true;
19023 : : }
19024 : 1469863 : break;
19025 : : }
19026 : 2088800 : default:;
19027 : : }
19028 : 2088800 : switch (TREE_CODE (_q20))
19029 : : {
19030 : 2077829 : case SSA_NAME:
19031 : 2077829 : if (gimple *_d2 = get_def (valueize, _q20))
19032 : : {
19033 : 2044085 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
19034 : 2386576 : switch (gimple_assign_rhs_code (_a2))
19035 : : {
19036 : 38950 : case NE_EXPR:
19037 : 38950 : {
19038 : 38950 : tree _q30 = gimple_assign_rhs1 (_a2);
19039 : 38950 : _q30 = do_valueize (valueize, _q30);
19040 : 38950 : tree _q31 = gimple_assign_rhs2 (_a2);
19041 : 38950 : _q31 = do_valueize (valueize, _q31);
19042 : 38950 : if (tree_swap_operands_p (_q30, _q31))
19043 : 1298 : std::swap (_q30, _q31);
19044 : 38950 : switch (TREE_CODE (_q31))
19045 : : {
19046 : 19621 : case INTEGER_CST:
19047 : 19621 : {
19048 : 19621 : if ((_p1 == _q30 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q30, 0) && types_match (_p1, _q30)))
19049 : : {
19050 : 43 : {
19051 : 43 : tree captures[2] ATTRIBUTE_UNUSED = { _q30, _q31 };
19052 : 43 : if (gimple_simplify_303 (res_op, seq, valueize, type, captures, NE_EXPR, NE_EXPR))
19053 : 34 : return true;
19054 : : }
19055 : : }
19056 : : break;
19057 : : }
19058 : : default:;
19059 : : }
19060 : 125627122 : break;
19061 : : }
19062 : 29485 : case EQ_EXPR:
19063 : 29485 : {
19064 : 29485 : tree _q30 = gimple_assign_rhs1 (_a2);
19065 : 29485 : _q30 = do_valueize (valueize, _q30);
19066 : 29485 : tree _q31 = gimple_assign_rhs2 (_a2);
19067 : 29485 : _q31 = do_valueize (valueize, _q31);
19068 : 29485 : if (tree_swap_operands_p (_q30, _q31))
19069 : 8 : std::swap (_q30, _q31);
19070 : 29485 : switch (TREE_CODE (_q31))
19071 : : {
19072 : 23108 : case INTEGER_CST:
19073 : 23108 : {
19074 : 23108 : if ((_p1 == _q30 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q30, 0) && types_match (_p1, _q30)))
19075 : : {
19076 : 52 : {
19077 : 52 : tree captures[2] ATTRIBUTE_UNUSED = { _q30, _q31 };
19078 : 52 : if (gimple_simplify_303 (res_op, seq, valueize, type, captures, EQ_EXPR, NE_EXPR))
19079 : 45 : return true;
19080 : : }
19081 : : }
19082 : : break;
19083 : : }
19084 : : default:;
19085 : : }
19086 : 125627122 : break;
19087 : : }
19088 : : default:;
19089 : : }
19090 : : }
19091 : : break;
19092 : : default:;
19093 : : }
19094 : : break;
19095 : : }
19096 : : default:;
19097 : : }
19098 : : }
19099 : : break;
19100 : 125627122 : default:;
19101 : : }
19102 : 125627122 : switch (TREE_CODE (_p1))
19103 : : {
19104 : 22705623 : case SSA_NAME:
19105 : 22705623 : if (gimple *_d1 = get_def (valueize, _p1))
19106 : : {
19107 : 7158990 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
19108 : 10190473 : switch (gimple_assign_rhs_code (_a1))
19109 : : {
19110 : 380940 : CASE_CONVERT:
19111 : 380940 : {
19112 : 380940 : tree _q30 = gimple_assign_rhs1 (_a1);
19113 : 380940 : _q30 = do_valueize (valueize, _q30);
19114 : 380940 : switch (TREE_CODE (_q30))
19115 : : {
19116 : 364129 : case SSA_NAME:
19117 : 364129 : if (gimple *_d2 = get_def (valueize, _q30))
19118 : : {
19119 : 343278 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
19120 : 407918 : switch (gimple_assign_rhs_code (_a2))
19121 : : {
19122 : 1210 : case NE_EXPR:
19123 : 1210 : {
19124 : 1210 : tree _q40 = gimple_assign_rhs1 (_a2);
19125 : 1210 : _q40 = do_valueize (valueize, _q40);
19126 : 1210 : tree _q41 = gimple_assign_rhs2 (_a2);
19127 : 1210 : _q41 = do_valueize (valueize, _q41);
19128 : 1210 : if (tree_swap_operands_p (_q40, _q41))
19129 : 0 : std::swap (_q40, _q41);
19130 : 1210 : if ((_q40 == _p0 && ! TREE_SIDE_EFFECTS (_q40)) || (operand_equal_p (_q40, _p0, 0) && types_match (_q40, _p0)))
19131 : : {
19132 : 0 : switch (TREE_CODE (_q41))
19133 : : {
19134 : 0 : case INTEGER_CST:
19135 : 0 : {
19136 : 0 : {
19137 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q41 };
19138 : 0 : if (gimple_simplify_303 (res_op, seq, valueize, type, captures, NE_EXPR, NE_EXPR))
19139 : 0 : return true;
19140 : : }
19141 : 0 : break;
19142 : : }
19143 : : default:;
19144 : : }
19145 : : }
19146 : 125627115 : break;
19147 : : }
19148 : 1972 : case EQ_EXPR:
19149 : 1972 : {
19150 : 1972 : tree _q40 = gimple_assign_rhs1 (_a2);
19151 : 1972 : _q40 = do_valueize (valueize, _q40);
19152 : 1972 : tree _q41 = gimple_assign_rhs2 (_a2);
19153 : 1972 : _q41 = do_valueize (valueize, _q41);
19154 : 1972 : if (tree_swap_operands_p (_q40, _q41))
19155 : 0 : std::swap (_q40, _q41);
19156 : 1972 : if ((_q40 == _p0 && ! TREE_SIDE_EFFECTS (_q40)) || (operand_equal_p (_q40, _p0, 0) && types_match (_q40, _p0)))
19157 : : {
19158 : 7 : switch (TREE_CODE (_q41))
19159 : : {
19160 : 7 : case INTEGER_CST:
19161 : 7 : {
19162 : 7 : {
19163 : 7 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q41 };
19164 : 7 : if (gimple_simplify_303 (res_op, seq, valueize, type, captures, EQ_EXPR, NE_EXPR))
19165 : 7 : return true;
19166 : : }
19167 : 0 : break;
19168 : : }
19169 : : default:;
19170 : : }
19171 : : }
19172 : 125627115 : break;
19173 : : }
19174 : : default:;
19175 : : }
19176 : : }
19177 : : break;
19178 : : default:;
19179 : : }
19180 : : break;
19181 : : }
19182 : : default:;
19183 : : }
19184 : : }
19185 : : break;
19186 : 125627115 : default:;
19187 : : }
19188 : 125627115 : if (integer_zerop (_p1))
19189 : : {
19190 : 70867809 : {
19191 : 70867809 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
19192 : 70867809 : if (TREE_CODE (TREE_TYPE (captures[0])) == BOOLEAN_TYPE
19193 : 70867809 : && types_match (type, TREE_TYPE (captures[0]))
19194 : : )
19195 : : {
19196 : 26378730 : gimple_seq *lseq = seq;
19197 : 26378730 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2304;
19198 : 26378730 : {
19199 : 26378730 : tree tem;
19200 : 26378730 : tem = captures[0];
19201 : 26378730 : res_op->set_value (tem);
19202 : 26378730 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1128, __FILE__, __LINE__, true);
19203 : 26378730 : return true;
19204 : : }
19205 : 0 : next_after_fail2304:;
19206 : : }
19207 : : }
19208 : : }
19209 : 99248385 : switch (TREE_CODE (_p0))
19210 : : {
19211 : 97895861 : case SSA_NAME:
19212 : 97895861 : if (gimple *_d1 = get_def (valueize, _p0))
19213 : : {
19214 : 32520605 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
19215 : 38947507 : switch (gimple_assign_rhs_code (_a1))
19216 : : {
19217 : 9252 : case COND_EXPR:
19218 : 9252 : {
19219 : 9252 : tree _q20 = gimple_assign_rhs1 (_a1);
19220 : 9252 : _q20 = do_valueize (valueize, _q20);
19221 : 9252 : tree _q21 = gimple_assign_rhs2 (_a1);
19222 : 9252 : _q21 = do_valueize (valueize, _q21);
19223 : 9252 : tree _q22 = gimple_assign_rhs3 (_a1);
19224 : 9252 : _q22 = do_valueize (valueize, _q22);
19225 : 9252 : {
19226 : 9252 : tree captures[4] ATTRIBUTE_UNUSED = { _q20, _q21, _q22, _p1 };
19227 : 9252 : if (gimple_simplify_304 (res_op, seq, valueize, type, captures, NE_EXPR))
19228 : 240 : return true;
19229 : : }
19230 : 9012 : break;
19231 : : }
19232 : : default:;
19233 : : }
19234 : : }
19235 : : break;
19236 : 99248145 : default:;
19237 : : }
19238 : 99248145 : switch (TREE_CODE (_p1))
19239 : : {
19240 : 22705616 : case SSA_NAME:
19241 : 22705616 : if (gimple *_d1 = get_def (valueize, _p1))
19242 : : {
19243 : 7158983 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
19244 : 10190466 : switch (gimple_assign_rhs_code (_a1))
19245 : : {
19246 : 3288 : case COND_EXPR:
19247 : 3288 : {
19248 : 3288 : tree _q30 = gimple_assign_rhs1 (_a1);
19249 : 3288 : _q30 = do_valueize (valueize, _q30);
19250 : 3288 : tree _q31 = gimple_assign_rhs2 (_a1);
19251 : 3288 : _q31 = do_valueize (valueize, _q31);
19252 : 3288 : tree _q32 = gimple_assign_rhs3 (_a1);
19253 : 3288 : _q32 = do_valueize (valueize, _q32);
19254 : 3288 : {
19255 : 3288 : tree captures[4] ATTRIBUTE_UNUSED = { _q30, _q31, _q32, _p0 };
19256 : 3288 : if (gimple_simplify_304 (res_op, seq, valueize, type, captures, NE_EXPR))
19257 : 0 : return true;
19258 : : }
19259 : 3288 : break;
19260 : : }
19261 : : default:;
19262 : : }
19263 : : }
19264 : : break;
19265 : 99248145 : default:;
19266 : : }
19267 : 99248145 : switch (TREE_CODE (_p0))
19268 : : {
19269 : 97895621 : case SSA_NAME:
19270 : 97895621 : if (gimple *_d1 = get_def (valueize, _p0))
19271 : : {
19272 : 32520365 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
19273 : 38947267 : switch (gimple_assign_rhs_code (_a1))
19274 : : {
19275 : 1561926 : case BIT_AND_EXPR:
19276 : 1561926 : {
19277 : 1561926 : tree _q20 = gimple_assign_rhs1 (_a1);
19278 : 1561926 : _q20 = do_valueize (valueize, _q20);
19279 : 1561926 : tree _q21 = gimple_assign_rhs2 (_a1);
19280 : 1561926 : _q21 = do_valueize (valueize, _q21);
19281 : 1561926 : if (tree_swap_operands_p (_q20, _q21))
19282 : 18156 : std::swap (_q20, _q21);
19283 : 1561926 : switch (TREE_CODE (_q21))
19284 : : {
19285 : 2894 : case VECTOR_CST:
19286 : 2894 : {
19287 : 2894 : if (integer_zerop (_p1))
19288 : : {
19289 : 2894 : {
19290 : 2894 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
19291 : 2894 : const enum tree_code cmp = NE_EXPR;
19292 : 2894 : const enum tree_code icmp = GT_EXPR;
19293 : 2894 : {
19294 : 2894 : tree csts = bitmask_inv_cst_vector_p (captures[2]);
19295 : 2894 : if (csts && (VECTOR_TYPE_P (TREE_TYPE (captures[2])) || single_use (captures[0]))
19296 : : )
19297 : : {
19298 : 10 : {
19299 : 10 : auto optab = VECTOR_TYPE_P (TREE_TYPE (captures[2]))
19300 : 10 : ? optab_vector : optab_default;
19301 : 10 : tree utype = unsigned_type_for (TREE_TYPE (captures[2]));
19302 : 10 : if (target_supports_op_p (utype, icmp, optab)
19303 : 10 : || (optimize_vectors_before_lowering_p ()
19304 : 0 : && (!target_supports_op_p (type, cmp, optab)
19305 : 0 : || !target_supports_op_p (type, BIT_AND_EXPR, optab)))
19306 : : )
19307 : : {
19308 : 0 : if (TYPE_UNSIGNED (TREE_TYPE (captures[2]))
19309 : : )
19310 : : {
19311 : 0 : gimple_seq *lseq = seq;
19312 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2305;
19313 : 0 : {
19314 : 0 : res_op->set_op (icmp, type, 2);
19315 : 0 : res_op->ops[0] = captures[1];
19316 : 0 : res_op->ops[1] = csts;
19317 : 0 : res_op->resimplify (lseq, valueize);
19318 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1125, __FILE__, __LINE__, true);
19319 : 0 : return true;
19320 : : }
19321 : 0 : next_after_fail2305:;
19322 : : }
19323 : : else
19324 : : {
19325 : 0 : gimple_seq *lseq = seq;
19326 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2306;
19327 : 0 : {
19328 : 0 : res_op->set_op (icmp, type, 2);
19329 : 0 : {
19330 : 0 : tree _o1[1], _r1;
19331 : 0 : _o1[0] = captures[1];
19332 : 0 : if (utype != TREE_TYPE (_o1[0]) /* XXX */
19333 : 0 : && !useless_type_conversion_p (utype, TREE_TYPE (_o1[0])))
19334 : : {
19335 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), VIEW_CONVERT_EXPR, utype, _o1[0]);
19336 : 0 : tem_op.resimplify (lseq, valueize);
19337 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
19338 : 0 : if (!_r1) goto next_after_fail2306;
19339 : : }
19340 : : else
19341 : : _r1 = _o1[0];
19342 : 0 : res_op->ops[0] = _r1;
19343 : : }
19344 : 0 : res_op->ops[1] = csts;
19345 : 0 : res_op->resimplify (lseq, valueize);
19346 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1126, __FILE__, __LINE__, true);
19347 : 0 : return true;
19348 : : }
19349 : 2894 : next_after_fail2306:;
19350 : : }
19351 : : }
19352 : : }
19353 : : }
19354 : : }
19355 : : }
19356 : : }
19357 : : break;
19358 : : }
19359 : 1340857 : case INTEGER_CST:
19360 : 1340857 : {
19361 : 1340857 : if (integer_zerop (_p1))
19362 : : {
19363 : 1224044 : {
19364 : 1224044 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
19365 : 1224044 : const enum tree_code cmp = NE_EXPR;
19366 : 1224044 : const enum tree_code icmp = GT_EXPR;
19367 : 1224044 : {
19368 : 1224044 : tree csts = bitmask_inv_cst_vector_p (captures[2]);
19369 : 1224044 : if (csts && (VECTOR_TYPE_P (TREE_TYPE (captures[2])) || single_use (captures[0]))
19370 : : )
19371 : : {
19372 : 1936 : {
19373 : 1936 : auto optab = VECTOR_TYPE_P (TREE_TYPE (captures[2]))
19374 : 1936 : ? optab_vector : optab_default;
19375 : 1936 : tree utype = unsigned_type_for (TREE_TYPE (captures[2]));
19376 : 1936 : if (target_supports_op_p (utype, icmp, optab)
19377 : 1936 : || (optimize_vectors_before_lowering_p ()
19378 : 1696 : && (!target_supports_op_p (type, cmp, optab)
19379 : 0 : || !target_supports_op_p (type, BIT_AND_EXPR, optab)))
19380 : : )
19381 : : {
19382 : 1696 : if (TYPE_UNSIGNED (TREE_TYPE (captures[2]))
19383 : : )
19384 : : {
19385 : 1220 : gimple_seq *lseq = seq;
19386 : 1220 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2307;
19387 : 1220 : {
19388 : 1220 : res_op->set_op (icmp, type, 2);
19389 : 1220 : res_op->ops[0] = captures[1];
19390 : 1220 : res_op->ops[1] = csts;
19391 : 1220 : res_op->resimplify (lseq, valueize);
19392 : 1220 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1125, __FILE__, __LINE__, true);
19393 : 1220 : return true;
19394 : : }
19395 : 0 : next_after_fail2307:;
19396 : : }
19397 : : else
19398 : : {
19399 : 476 : gimple_seq *lseq = seq;
19400 : 476 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2308;
19401 : 476 : {
19402 : 476 : res_op->set_op (icmp, type, 2);
19403 : 476 : {
19404 : 476 : tree _o1[1], _r1;
19405 : 476 : _o1[0] = captures[1];
19406 : 476 : if (utype != TREE_TYPE (_o1[0]) /* XXX */
19407 : 476 : && !useless_type_conversion_p (utype, TREE_TYPE (_o1[0])))
19408 : : {
19409 : 476 : gimple_match_op tem_op (res_op->cond.any_else (), VIEW_CONVERT_EXPR, utype, _o1[0]);
19410 : 476 : tem_op.resimplify (lseq, valueize);
19411 : 476 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
19412 : 476 : if (!_r1) goto next_after_fail2308;
19413 : : }
19414 : : else
19415 : : _r1 = _o1[0];
19416 : 458 : res_op->ops[0] = _r1;
19417 : : }
19418 : 458 : res_op->ops[1] = csts;
19419 : 458 : res_op->resimplify (lseq, valueize);
19420 : 458 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1126, __FILE__, __LINE__, true);
19421 : 458 : return true;
19422 : : }
19423 : 1222366 : next_after_fail2308:;
19424 : : }
19425 : : }
19426 : : }
19427 : : }
19428 : : }
19429 : : }
19430 : : }
19431 : : break;
19432 : : }
19433 : 1560248 : default:;
19434 : : }
19435 : 1560248 : switch (TREE_CODE (_q20))
19436 : : {
19437 : 0 : case VECTOR_CST:
19438 : 0 : {
19439 : 0 : if (integer_zerop (_p1))
19440 : : {
19441 : 0 : {
19442 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q21, _q20 };
19443 : 0 : const enum tree_code cmp = NE_EXPR;
19444 : 0 : const enum tree_code icmp = GT_EXPR;
19445 : 0 : {
19446 : 0 : tree csts = bitmask_inv_cst_vector_p (captures[2]);
19447 : 0 : if (csts && (VECTOR_TYPE_P (TREE_TYPE (captures[2])) || single_use (captures[0]))
19448 : : )
19449 : : {
19450 : 0 : {
19451 : 0 : auto optab = VECTOR_TYPE_P (TREE_TYPE (captures[2]))
19452 : 0 : ? optab_vector : optab_default;
19453 : 0 : tree utype = unsigned_type_for (TREE_TYPE (captures[2]));
19454 : 0 : if (target_supports_op_p (utype, icmp, optab)
19455 : 0 : || (optimize_vectors_before_lowering_p ()
19456 : 0 : && (!target_supports_op_p (type, cmp, optab)
19457 : 0 : || !target_supports_op_p (type, BIT_AND_EXPR, optab)))
19458 : : )
19459 : : {
19460 : 0 : if (TYPE_UNSIGNED (TREE_TYPE (captures[2]))
19461 : : )
19462 : : {
19463 : 0 : gimple_seq *lseq = seq;
19464 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2309;
19465 : 0 : {
19466 : 0 : res_op->set_op (icmp, type, 2);
19467 : 0 : res_op->ops[0] = captures[1];
19468 : 0 : res_op->ops[1] = csts;
19469 : 0 : res_op->resimplify (lseq, valueize);
19470 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1125, __FILE__, __LINE__, true);
19471 : 0 : return true;
19472 : : }
19473 : 0 : next_after_fail2309:;
19474 : : }
19475 : : else
19476 : : {
19477 : 0 : gimple_seq *lseq = seq;
19478 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2310;
19479 : 0 : {
19480 : 0 : res_op->set_op (icmp, type, 2);
19481 : 0 : {
19482 : 0 : tree _o1[1], _r1;
19483 : 0 : _o1[0] = captures[1];
19484 : 0 : if (utype != TREE_TYPE (_o1[0]) /* XXX */
19485 : 0 : && !useless_type_conversion_p (utype, TREE_TYPE (_o1[0])))
19486 : : {
19487 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), VIEW_CONVERT_EXPR, utype, _o1[0]);
19488 : 0 : tem_op.resimplify (lseq, valueize);
19489 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
19490 : 0 : if (!_r1) goto next_after_fail2310;
19491 : : }
19492 : : else
19493 : : _r1 = _o1[0];
19494 : 0 : res_op->ops[0] = _r1;
19495 : : }
19496 : 0 : res_op->ops[1] = csts;
19497 : 0 : res_op->resimplify (lseq, valueize);
19498 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1126, __FILE__, __LINE__, true);
19499 : 0 : return true;
19500 : : }
19501 : 0 : next_after_fail2310:;
19502 : : }
19503 : : }
19504 : : }
19505 : : }
19506 : : }
19507 : : }
19508 : : }
19509 : : break;
19510 : : }
19511 : 0 : case INTEGER_CST:
19512 : 0 : {
19513 : 0 : if (integer_zerop (_p1))
19514 : : {
19515 : 0 : {
19516 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q21, _q20 };
19517 : 0 : const enum tree_code cmp = NE_EXPR;
19518 : 0 : const enum tree_code icmp = GT_EXPR;
19519 : 0 : {
19520 : 0 : tree csts = bitmask_inv_cst_vector_p (captures[2]);
19521 : 0 : if (csts && (VECTOR_TYPE_P (TREE_TYPE (captures[2])) || single_use (captures[0]))
19522 : : )
19523 : : {
19524 : 0 : {
19525 : 0 : auto optab = VECTOR_TYPE_P (TREE_TYPE (captures[2]))
19526 : 0 : ? optab_vector : optab_default;
19527 : 0 : tree utype = unsigned_type_for (TREE_TYPE (captures[2]));
19528 : 0 : if (target_supports_op_p (utype, icmp, optab)
19529 : 0 : || (optimize_vectors_before_lowering_p ()
19530 : 0 : && (!target_supports_op_p (type, cmp, optab)
19531 : 0 : || !target_supports_op_p (type, BIT_AND_EXPR, optab)))
19532 : : )
19533 : : {
19534 : 0 : if (TYPE_UNSIGNED (TREE_TYPE (captures[2]))
19535 : : )
19536 : : {
19537 : 0 : gimple_seq *lseq = seq;
19538 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2311;
19539 : 0 : {
19540 : 0 : res_op->set_op (icmp, type, 2);
19541 : 0 : res_op->ops[0] = captures[1];
19542 : 0 : res_op->ops[1] = csts;
19543 : 0 : res_op->resimplify (lseq, valueize);
19544 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1125, __FILE__, __LINE__, true);
19545 : 0 : return true;
19546 : : }
19547 : 0 : next_after_fail2311:;
19548 : : }
19549 : : else
19550 : : {
19551 : 0 : gimple_seq *lseq = seq;
19552 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2312;
19553 : 0 : {
19554 : 0 : res_op->set_op (icmp, type, 2);
19555 : 0 : {
19556 : 0 : tree _o1[1], _r1;
19557 : 0 : _o1[0] = captures[1];
19558 : 0 : if (utype != TREE_TYPE (_o1[0]) /* XXX */
19559 : 0 : && !useless_type_conversion_p (utype, TREE_TYPE (_o1[0])))
19560 : : {
19561 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), VIEW_CONVERT_EXPR, utype, _o1[0]);
19562 : 0 : tem_op.resimplify (lseq, valueize);
19563 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
19564 : 0 : if (!_r1) goto next_after_fail2312;
19565 : : }
19566 : : else
19567 : : _r1 = _o1[0];
19568 : 0 : res_op->ops[0] = _r1;
19569 : : }
19570 : 0 : res_op->ops[1] = csts;
19571 : 0 : res_op->resimplify (lseq, valueize);
19572 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1126, __FILE__, __LINE__, true);
19573 : 0 : return true;
19574 : : }
19575 : 0 : next_after_fail2312:;
19576 : : }
19577 : : }
19578 : : }
19579 : : }
19580 : : }
19581 : : }
19582 : : }
19583 : : break;
19584 : : }
19585 : : default:;
19586 : : }
19587 : 128183795 : break;
19588 : : }
19589 : 51962 : case RSHIFT_EXPR:
19590 : 51962 : {
19591 : 51962 : tree _q20 = gimple_assign_rhs1 (_a1);
19592 : 51962 : _q20 = do_valueize (valueize, _q20);
19593 : 51962 : tree _q21 = gimple_assign_rhs2 (_a1);
19594 : 51962 : _q21 = do_valueize (valueize, _q21);
19595 : 51962 : switch (TREE_CODE (_q20))
19596 : : {
19597 : 51410 : case SSA_NAME:
19598 : 51410 : if (gimple *_d2 = get_def (valueize, _q20))
19599 : : {
19600 : 50022 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
19601 : 36500 : switch (gimple_assign_rhs_code (_a2))
19602 : : {
19603 : 302 : case MULT_EXPR:
19604 : 302 : {
19605 : 302 : tree _q30 = gimple_assign_rhs1 (_a2);
19606 : 302 : _q30 = do_valueize (valueize, _q30);
19607 : 302 : tree _q31 = gimple_assign_rhs2 (_a2);
19608 : 302 : _q31 = do_valueize (valueize, _q31);
19609 : 302 : if (tree_swap_operands_p (_q30, _q31))
19610 : 4 : std::swap (_q30, _q31);
19611 : 302 : switch (TREE_CODE (_q30))
19612 : : {
19613 : 302 : case SSA_NAME:
19614 : 302 : if (gimple *_d3 = get_def (valueize, _q30))
19615 : : {
19616 : 302 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
19617 : 296 : switch (gimple_assign_rhs_code (_a3))
19618 : : {
19619 : 152 : CASE_CONVERT:
19620 : 152 : {
19621 : 152 : tree _q40 = gimple_assign_rhs1 (_a3);
19622 : 152 : _q40 = do_valueize (valueize, _q40);
19623 : 152 : switch (TREE_CODE (_q31))
19624 : : {
19625 : 30 : case SSA_NAME:
19626 : 30 : if (gimple *_d4 = get_def (valueize, _q31))
19627 : : {
19628 : 30 : if (gassign *_a4 = dyn_cast <gassign *> (_d4))
19629 : 30 : switch (gimple_assign_rhs_code (_a4))
19630 : : {
19631 : 30 : CASE_CONVERT:
19632 : 30 : {
19633 : 30 : tree _q60 = gimple_assign_rhs1 (_a4);
19634 : 30 : _q60 = do_valueize (valueize, _q60);
19635 : 30 : switch (TREE_CODE (_q21))
19636 : : {
19637 : 30 : case INTEGER_CST:
19638 : 30 : {
19639 : 30 : if (integer_zerop (_p1))
19640 : : {
19641 : 0 : {
19642 : 0 : tree captures[5] ATTRIBUTE_UNUSED = { _q20, _q30, _q40, _q60, _q21 };
19643 : 0 : if (gimple_simplify_305 (res_op, seq, valueize, type, captures, NE_EXPR))
19644 : 0 : return true;
19645 : : }
19646 : : }
19647 : : break;
19648 : : }
19649 : : default:;
19650 : : }
19651 : : break;
19652 : : }
19653 : : default:;
19654 : : }
19655 : : }
19656 : : break;
19657 : : default:;
19658 : : }
19659 : : break;
19660 : : }
19661 : : default:;
19662 : : }
19663 : : }
19664 : : break;
19665 : : default:;
19666 : : }
19667 : 128183795 : break;
19668 : : }
19669 : : default:;
19670 : : }
19671 : : }
19672 : : break;
19673 : : default:;
19674 : : }
19675 : : break;
19676 : : }
19677 : 1578100 : case PLUS_EXPR:
19678 : 1578100 : {
19679 : 1578100 : tree _q20 = gimple_assign_rhs1 (_a1);
19680 : 1578100 : _q20 = do_valueize (valueize, _q20);
19681 : 1578100 : tree _q21 = gimple_assign_rhs2 (_a1);
19682 : 1578100 : _q21 = do_valueize (valueize, _q21);
19683 : 1578100 : if (tree_swap_operands_p (_q20, _q21))
19684 : 8995 : std::swap (_q20, _q21);
19685 : 1578100 : switch (TREE_CODE (_q21))
19686 : : {
19687 : 1375825 : case INTEGER_CST:
19688 : 1375825 : {
19689 : 1375825 : switch (TREE_CODE (_p1))
19690 : : {
19691 : 954330 : case INTEGER_CST:
19692 : 954330 : {
19693 : 954330 : {
19694 : 954330 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _p1 };
19695 : 954330 : if (gimple_simplify_306 (res_op, seq, valueize, type, captures, PLUS_EXPR, MINUS_EXPR, NE_EXPR))
19696 : 37070 : return true;
19697 : : }
19698 : 917260 : break;
19699 : : }
19700 : : default:;
19701 : : }
19702 : : break;
19703 : : }
19704 : : default:;
19705 : : }
19706 : 128183795 : break;
19707 : : }
19708 : 199242 : case MINUS_EXPR:
19709 : 199242 : {
19710 : 199242 : tree _q20 = gimple_assign_rhs1 (_a1);
19711 : 199242 : _q20 = do_valueize (valueize, _q20);
19712 : 199242 : tree _q21 = gimple_assign_rhs2 (_a1);
19713 : 199242 : _q21 = do_valueize (valueize, _q21);
19714 : 199242 : switch (TREE_CODE (_q21))
19715 : : {
19716 : 36954 : case INTEGER_CST:
19717 : 36954 : {
19718 : 36954 : switch (TREE_CODE (_p1))
19719 : : {
19720 : 35216 : case INTEGER_CST:
19721 : 35216 : {
19722 : 35216 : {
19723 : 35216 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _p1 };
19724 : 35216 : if (gimple_simplify_306 (res_op, seq, valueize, type, captures, MINUS_EXPR, PLUS_EXPR, NE_EXPR))
19725 : 55 : return true;
19726 : : }
19727 : 35161 : break;
19728 : : }
19729 : : default:;
19730 : : }
19731 : : break;
19732 : : }
19733 : 199187 : default:;
19734 : : }
19735 : 199187 : switch (TREE_CODE (_q20))
19736 : : {
19737 : 4590 : case INTEGER_CST:
19738 : 4590 : {
19739 : 4590 : switch (TREE_CODE (_p1))
19740 : : {
19741 : 2610 : case INTEGER_CST:
19742 : 2610 : {
19743 : 2610 : {
19744 : 2610 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
19745 : 2610 : if (gimple_simplify_307 (res_op, seq, valueize, type, captures, NE_EXPR, NE_EXPR))
19746 : 2610 : return true;
19747 : : }
19748 : 0 : break;
19749 : : }
19750 : : default:;
19751 : : }
19752 : : break;
19753 : : }
19754 : : default:;
19755 : : }
19756 : : break;
19757 : : }
19758 : : default:;
19759 : : }
19760 : 10027584 : else if (gcall *_c1 = dyn_cast <gcall *> (_d1))
19761 : 5656338 : switch (gimple_call_combined_fn (_c1))
19762 : : {
19763 : 2467 : case CFN_BUILT_IN_CLZ:
19764 : 2467 : if (gimple_call_num_args (_c1) == 1)
19765 : : {
19766 : 2467 : tree _q20 = gimple_call_arg (_c1, 0);
19767 : 2467 : _q20 = do_valueize (valueize, _q20);
19768 : 2467 : switch (TREE_CODE (_p1))
19769 : : {
19770 : 2099 : case INTEGER_CST:
19771 : 2099 : {
19772 : 2099 : {
19773 : 2099 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
19774 : 2099 : if (gimple_simplify_308 (res_op, seq, valueize, type, captures, NE_EXPR, GE_EXPR, CFN_BUILT_IN_CLZ))
19775 : 1601 : return true;
19776 : : }
19777 : 498 : break;
19778 : : }
19779 : : default:;
19780 : : }
19781 : : }
19782 : : break;
19783 : 290 : case CFN_BUILT_IN_CTZ:
19784 : 290 : if (gimple_call_num_args (_c1) == 1)
19785 : : {
19786 : 290 : tree _q20 = gimple_call_arg (_c1, 0);
19787 : 290 : _q20 = do_valueize (valueize, _q20);
19788 : 290 : switch (TREE_CODE (_p1))
19789 : : {
19790 : 3 : case INTEGER_CST:
19791 : 3 : {
19792 : 3 : {
19793 : 3 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
19794 : 3 : if (gimple_simplify_310 (res_op, seq, valueize, type, captures, NE_EXPR, CFN_BUILT_IN_CTZ))
19795 : 3 : return true;
19796 : : }
19797 : 0 : break;
19798 : : }
19799 : : default:;
19800 : : }
19801 : : }
19802 : : break;
19803 : 481 : case CFN_BUILT_IN_FFS:
19804 : 481 : if (gimple_call_num_args (_c1) == 1)
19805 : : {
19806 : 481 : tree _q20 = gimple_call_arg (_c1, 0);
19807 : 481 : _q20 = do_valueize (valueize, _q20);
19808 : 481 : switch (TREE_CODE (_p1))
19809 : : {
19810 : 14 : case INTEGER_CST:
19811 : 14 : {
19812 : 14 : {
19813 : 14 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
19814 : 14 : if (gimple_simplify_313 (res_op, seq, valueize, type, captures, NE_EXPR, CFN_BUILT_IN_FFS))
19815 : 14 : return true;
19816 : : }
19817 : 0 : break;
19818 : : }
19819 : : default:;
19820 : : }
19821 : : }
19822 : : break;
19823 : 3076 : case CFN_REDUC_IOR:
19824 : 3076 : if (gimple_call_num_args (_c1) == 1)
19825 : : {
19826 : 3076 : tree _q20 = gimple_call_arg (_c1, 0);
19827 : 3076 : _q20 = do_valueize (valueize, _q20);
19828 : 3076 : if (integer_zerop (_p1))
19829 : : {
19830 : 3066 : {
19831 : 3066 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
19832 : 3066 : if (gimple_simplify_314 (res_op, seq, valueize, type, captures, NE_EXPR))
19833 : 24 : return true;
19834 : : }
19835 : : }
19836 : : }
19837 : : break;
19838 : 0 : case CFN_BUILT_IN_FFSIMAX:
19839 : 0 : if (gimple_call_num_args (_c1) == 1)
19840 : : {
19841 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
19842 : 0 : _q20 = do_valueize (valueize, _q20);
19843 : 0 : switch (TREE_CODE (_p1))
19844 : : {
19845 : 0 : case INTEGER_CST:
19846 : 0 : {
19847 : 0 : {
19848 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
19849 : 0 : if (gimple_simplify_313 (res_op, seq, valueize, type, captures, NE_EXPR, CFN_BUILT_IN_FFSIMAX))
19850 : 0 : return true;
19851 : : }
19852 : 0 : break;
19853 : : }
19854 : : default:;
19855 : : }
19856 : : }
19857 : : break;
19858 : 244 : case CFN_BUILT_IN_POPCOUNT:
19859 : 244 : if (gimple_call_num_args (_c1) == 1)
19860 : : {
19861 : 244 : tree _q20 = gimple_call_arg (_c1, 0);
19862 : 244 : _q20 = do_valueize (valueize, _q20);
19863 : 244 : if (integer_zerop (_p1))
19864 : : {
19865 : 3 : {
19866 : 3 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
19867 : 3 : if (gimple_simplify_312 (res_op, seq, valueize, type, captures, NE_EXPR, NE_EXPR, CFN_BUILT_IN_POPCOUNT))
19868 : 3 : return true;
19869 : : }
19870 : : }
19871 : : }
19872 : : break;
19873 : 1654 : case CFN_BUILT_IN_CLZL:
19874 : 1654 : if (gimple_call_num_args (_c1) == 1)
19875 : : {
19876 : 1654 : tree _q20 = gimple_call_arg (_c1, 0);
19877 : 1654 : _q20 = do_valueize (valueize, _q20);
19878 : 1654 : switch (TREE_CODE (_p1))
19879 : : {
19880 : 1492 : case INTEGER_CST:
19881 : 1492 : {
19882 : 1492 : {
19883 : 1492 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
19884 : 1492 : if (gimple_simplify_308 (res_op, seq, valueize, type, captures, NE_EXPR, GE_EXPR, CFN_BUILT_IN_CLZL))
19885 : 1225 : return true;
19886 : : }
19887 : 267 : break;
19888 : : }
19889 : : default:;
19890 : : }
19891 : : }
19892 : : break;
19893 : 188 : case CFN_BUILT_IN_CTZL:
19894 : 188 : if (gimple_call_num_args (_c1) == 1)
19895 : : {
19896 : 188 : tree _q20 = gimple_call_arg (_c1, 0);
19897 : 188 : _q20 = do_valueize (valueize, _q20);
19898 : 188 : switch (TREE_CODE (_p1))
19899 : : {
19900 : 12 : case INTEGER_CST:
19901 : 12 : {
19902 : 12 : {
19903 : 12 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
19904 : 12 : if (gimple_simplify_310 (res_op, seq, valueize, type, captures, NE_EXPR, CFN_BUILT_IN_CTZL))
19905 : 6 : return true;
19906 : : }
19907 : 6 : break;
19908 : : }
19909 : : default:;
19910 : : }
19911 : : }
19912 : : break;
19913 : 141 : case CFN_BUILT_IN_FFSL:
19914 : 141 : if (gimple_call_num_args (_c1) == 1)
19915 : : {
19916 : 141 : tree _q20 = gimple_call_arg (_c1, 0);
19917 : 141 : _q20 = do_valueize (valueize, _q20);
19918 : 141 : switch (TREE_CODE (_p1))
19919 : : {
19920 : 0 : case INTEGER_CST:
19921 : 0 : {
19922 : 0 : {
19923 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
19924 : 0 : if (gimple_simplify_313 (res_op, seq, valueize, type, captures, NE_EXPR, CFN_BUILT_IN_FFSL))
19925 : 0 : return true;
19926 : : }
19927 : 0 : break;
19928 : : }
19929 : : default:;
19930 : : }
19931 : : }
19932 : : break;
19933 : 260 : case CFN_BUILT_IN_POPCOUNTLL:
19934 : 260 : if (gimple_call_num_args (_c1) == 1)
19935 : : {
19936 : 260 : tree _q20 = gimple_call_arg (_c1, 0);
19937 : 260 : _q20 = do_valueize (valueize, _q20);
19938 : 260 : if (integer_zerop (_p1))
19939 : : {
19940 : 1 : {
19941 : 1 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
19942 : 1 : if (gimple_simplify_312 (res_op, seq, valueize, type, captures, NE_EXPR, NE_EXPR, CFN_BUILT_IN_POPCOUNTLL))
19943 : 1 : return true;
19944 : : }
19945 : : }
19946 : : }
19947 : : break;
19948 : 0 : case CFN_BUILT_IN_CTZIMAX:
19949 : 0 : if (gimple_call_num_args (_c1) == 1)
19950 : : {
19951 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
19952 : 0 : _q20 = do_valueize (valueize, _q20);
19953 : 0 : switch (TREE_CODE (_p1))
19954 : : {
19955 : 0 : case INTEGER_CST:
19956 : 0 : {
19957 : 0 : {
19958 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
19959 : 0 : if (gimple_simplify_310 (res_op, seq, valueize, type, captures, NE_EXPR, CFN_BUILT_IN_CTZIMAX))
19960 : 0 : return true;
19961 : : }
19962 : 0 : break;
19963 : : }
19964 : : default:;
19965 : : }
19966 : : }
19967 : : break;
19968 : 0 : case CFN_POPCOUNT:
19969 : 0 : if (gimple_call_num_args (_c1) == 1)
19970 : : {
19971 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
19972 : 0 : _q20 = do_valueize (valueize, _q20);
19973 : 0 : if (integer_zerop (_p1))
19974 : : {
19975 : 0 : {
19976 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
19977 : 0 : if (gimple_simplify_312 (res_op, seq, valueize, type, captures, NE_EXPR, NE_EXPR, CFN_POPCOUNT))
19978 : 0 : return true;
19979 : : }
19980 : : }
19981 : : }
19982 : : break;
19983 : 31 : case CFN_CLZ:
19984 : 31 : if (gimple_call_num_args (_c1) == 1)
19985 : : {
19986 : 31 : tree _q20 = gimple_call_arg (_c1, 0);
19987 : 31 : _q20 = do_valueize (valueize, _q20);
19988 : 31 : switch (TREE_CODE (_p1))
19989 : : {
19990 : 31 : case INTEGER_CST:
19991 : 31 : {
19992 : 31 : {
19993 : 31 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
19994 : 31 : if (gimple_simplify_308 (res_op, seq, valueize, type, captures, NE_EXPR, GE_EXPR, CFN_CLZ))
19995 : 31 : return true;
19996 : : }
19997 : 0 : break;
19998 : : }
19999 : : default:;
20000 : : }
20001 : : }
20002 : 0 : if (gimple_call_num_args (_c1) == 2)
20003 : : {
20004 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
20005 : 0 : _q20 = do_valueize (valueize, _q20);
20006 : 0 : tree _q21 = gimple_call_arg (_c1, 1);
20007 : 0 : _q21 = do_valueize (valueize, _q21);
20008 : 0 : switch (TREE_CODE (_p1))
20009 : : {
20010 : 0 : case INTEGER_CST:
20011 : 0 : {
20012 : 0 : {
20013 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _p1 };
20014 : 0 : if (gimple_simplify_309 (res_op, seq, valueize, type, captures, NE_EXPR, GE_EXPR))
20015 : 0 : return true;
20016 : : }
20017 : 0 : break;
20018 : : }
20019 : : default:;
20020 : : }
20021 : : }
20022 : : break;
20023 : 6 : case CFN_CTZ:
20024 : 6 : if (gimple_call_num_args (_c1) == 1)
20025 : : {
20026 : 6 : tree _q20 = gimple_call_arg (_c1, 0);
20027 : 6 : _q20 = do_valueize (valueize, _q20);
20028 : 6 : switch (TREE_CODE (_p1))
20029 : : {
20030 : 6 : case INTEGER_CST:
20031 : 6 : {
20032 : 6 : {
20033 : 6 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
20034 : 6 : if (gimple_simplify_310 (res_op, seq, valueize, type, captures, NE_EXPR, CFN_CTZ))
20035 : 2 : return true;
20036 : : }
20037 : 4 : break;
20038 : : }
20039 : : default:;
20040 : : }
20041 : : }
20042 : 4 : if (gimple_call_num_args (_c1) == 2)
20043 : : {
20044 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
20045 : 0 : _q20 = do_valueize (valueize, _q20);
20046 : 0 : tree _q21 = gimple_call_arg (_c1, 1);
20047 : 0 : _q21 = do_valueize (valueize, _q21);
20048 : 0 : switch (TREE_CODE (_p1))
20049 : : {
20050 : 0 : case INTEGER_CST:
20051 : 0 : {
20052 : 0 : {
20053 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _p1 };
20054 : 0 : if (gimple_simplify_311 (res_op, seq, valueize, type, captures, NE_EXPR))
20055 : 0 : return true;
20056 : : }
20057 : 0 : break;
20058 : : }
20059 : : default:;
20060 : : }
20061 : : }
20062 : : break;
20063 : 0 : case CFN_FFS:
20064 : 0 : if (gimple_call_num_args (_c1) == 1)
20065 : : {
20066 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
20067 : 0 : _q20 = do_valueize (valueize, _q20);
20068 : 0 : switch (TREE_CODE (_p1))
20069 : : {
20070 : 0 : case INTEGER_CST:
20071 : 0 : {
20072 : 0 : {
20073 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
20074 : 0 : if (gimple_simplify_313 (res_op, seq, valueize, type, captures, NE_EXPR, CFN_FFS))
20075 : 0 : return true;
20076 : : }
20077 : 0 : break;
20078 : : }
20079 : : default:;
20080 : : }
20081 : : }
20082 : : break;
20083 : 0 : case CFN_BUILT_IN_POPCOUNTIMAX:
20084 : 0 : if (gimple_call_num_args (_c1) == 1)
20085 : : {
20086 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
20087 : 0 : _q20 = do_valueize (valueize, _q20);
20088 : 0 : if (integer_zerop (_p1))
20089 : : {
20090 : 0 : {
20091 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
20092 : 0 : if (gimple_simplify_312 (res_op, seq, valueize, type, captures, NE_EXPR, NE_EXPR, CFN_BUILT_IN_POPCOUNTIMAX))
20093 : 0 : return true;
20094 : : }
20095 : : }
20096 : : }
20097 : : break;
20098 : 0 : case CFN_BUILT_IN_CLZIMAX:
20099 : 0 : if (gimple_call_num_args (_c1) == 1)
20100 : : {
20101 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
20102 : 0 : _q20 = do_valueize (valueize, _q20);
20103 : 0 : switch (TREE_CODE (_p1))
20104 : : {
20105 : 0 : case INTEGER_CST:
20106 : 0 : {
20107 : 0 : {
20108 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
20109 : 0 : if (gimple_simplify_308 (res_op, seq, valueize, type, captures, NE_EXPR, GE_EXPR, CFN_BUILT_IN_CLZIMAX))
20110 : 0 : return true;
20111 : : }
20112 : 0 : break;
20113 : : }
20114 : : default:;
20115 : : }
20116 : : }
20117 : : break;
20118 : 215 : case CFN_BUILT_IN_POPCOUNTL:
20119 : 215 : if (gimple_call_num_args (_c1) == 1)
20120 : : {
20121 : 215 : tree _q20 = gimple_call_arg (_c1, 0);
20122 : 215 : _q20 = do_valueize (valueize, _q20);
20123 : 215 : if (integer_zerop (_p1))
20124 : : {
20125 : 1 : {
20126 : 1 : tree captures[1] ATTRIBUTE_UNUSED = { _q20 };
20127 : 1 : if (gimple_simplify_312 (res_op, seq, valueize, type, captures, NE_EXPR, NE_EXPR, CFN_BUILT_IN_POPCOUNTL))
20128 : 1 : return true;
20129 : : }
20130 : : }
20131 : : }
20132 : : break;
20133 : 334 : case CFN_BUILT_IN_CLZLL:
20134 : 334 : if (gimple_call_num_args (_c1) == 1)
20135 : : {
20136 : 334 : tree _q20 = gimple_call_arg (_c1, 0);
20137 : 334 : _q20 = do_valueize (valueize, _q20);
20138 : 334 : switch (TREE_CODE (_p1))
20139 : : {
20140 : 114 : case INTEGER_CST:
20141 : 114 : {
20142 : 114 : {
20143 : 114 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
20144 : 114 : if (gimple_simplify_308 (res_op, seq, valueize, type, captures, NE_EXPR, GE_EXPR, CFN_BUILT_IN_CLZLL))
20145 : 0 : return true;
20146 : : }
20147 : 114 : break;
20148 : : }
20149 : : default:;
20150 : : }
20151 : : }
20152 : : break;
20153 : 272 : case CFN_BUILT_IN_CTZLL:
20154 : 272 : if (gimple_call_num_args (_c1) == 1)
20155 : : {
20156 : 272 : tree _q20 = gimple_call_arg (_c1, 0);
20157 : 272 : _q20 = do_valueize (valueize, _q20);
20158 : 272 : switch (TREE_CODE (_p1))
20159 : : {
20160 : 21 : case INTEGER_CST:
20161 : 21 : {
20162 : 21 : {
20163 : 21 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
20164 : 21 : if (gimple_simplify_310 (res_op, seq, valueize, type, captures, NE_EXPR, CFN_BUILT_IN_CTZLL))
20165 : 6 : return true;
20166 : : }
20167 : 15 : break;
20168 : : }
20169 : : default:;
20170 : : }
20171 : : }
20172 : : break;
20173 : 192 : case CFN_BUILT_IN_FFSLL:
20174 : 192 : if (gimple_call_num_args (_c1) == 1)
20175 : : {
20176 : 192 : tree _q20 = gimple_call_arg (_c1, 0);
20177 : 192 : _q20 = do_valueize (valueize, _q20);
20178 : 192 : switch (TREE_CODE (_p1))
20179 : : {
20180 : 0 : case INTEGER_CST:
20181 : 0 : {
20182 : 0 : {
20183 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
20184 : 0 : if (gimple_simplify_313 (res_op, seq, valueize, type, captures, NE_EXPR, CFN_BUILT_IN_FFSLL))
20185 : 0 : return true;
20186 : : }
20187 : 0 : break;
20188 : : }
20189 : : default:;
20190 : : }
20191 : : }
20192 : : break;
20193 : : default:;
20194 : : }
20195 : : }
20196 : : break;
20197 : : default:;
20198 : : }
20199 : : return false;
20200 : : }
20201 : :
20202 : : bool
20203 : 1884395 : gimple_simplify_TRUNC_MOD_EXPR (gimple_match_op *res_op, gimple_seq *seq,
20204 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
20205 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1)
20206 : : {
20207 : 1884395 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
20208 : 1884395 : if (integer_zerop (_p0))
20209 : : {
20210 : 24899 : {
20211 : 24899 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
20212 : 24899 : if (gimple_simplify_342 (res_op, seq, valueize, type, captures, TRUNC_MOD_EXPR))
20213 : 24530 : return true;
20214 : : }
20215 : : }
20216 : 1859865 : if (integer_onep (_p1))
20217 : : {
20218 : 2085 : {
20219 : 2085 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
20220 : 2085 : if (gimple_simplify_343 (res_op, seq, valueize, type, captures, TRUNC_MOD_EXPR))
20221 : 2085 : return true;
20222 : : }
20223 : : }
20224 : 1857780 : if (integer_minus_onep (_p1))
20225 : : {
20226 : 310 : {
20227 : 310 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
20228 : 310 : if (gimple_simplify_344 (res_op, seq, valueize, type, captures, TRUNC_MOD_EXPR))
20229 : 30 : return true;
20230 : : }
20231 : : }
20232 : 1857750 : if ((_p1 == _p0 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _p0, 0) && types_match (_p1, _p0)))
20233 : : {
20234 : 410 : {
20235 : 410 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
20236 : 410 : if (gimple_simplify_345 (res_op, seq, valueize, type, captures, TRUNC_MOD_EXPR))
20237 : 41 : return true;
20238 : : }
20239 : : }
20240 : 1857709 : switch (TREE_CODE (_p0))
20241 : : {
20242 : 1742879 : case SSA_NAME:
20243 : 1742879 : if (gimple *_d1 = get_def (valueize, _p0))
20244 : : {
20245 : 876683 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
20246 : 786428 : switch (gimple_assign_rhs_code (_a1))
20247 : : {
20248 : 11527 : case TRUNC_MOD_EXPR:
20249 : 11527 : {
20250 : 11527 : tree _q20 = gimple_assign_rhs1 (_a1);
20251 : 11527 : _q20 = do_valueize (valueize, _q20);
20252 : 11527 : tree _q21 = gimple_assign_rhs2 (_a1);
20253 : 11527 : _q21 = do_valueize (valueize, _q21);
20254 : 11527 : if ((_p1 == _q21 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _q21, 0) && types_match (_p1, _q21)))
20255 : : {
20256 : 81 : {
20257 : 81 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
20258 : 81 : if (gimple_simplify_346 (res_op, seq, valueize, type, captures, TRUNC_MOD_EXPR))
20259 : 81 : return true;
20260 : : }
20261 : : }
20262 : : break;
20263 : : }
20264 : 31402 : case MULT_EXPR:
20265 : 31402 : {
20266 : 31402 : tree _q20 = gimple_assign_rhs1 (_a1);
20267 : 31402 : _q20 = do_valueize (valueize, _q20);
20268 : 31402 : tree _q21 = gimple_assign_rhs2 (_a1);
20269 : 31402 : _q21 = do_valueize (valueize, _q21);
20270 : 31402 : if (tree_swap_operands_p (_q20, _q21))
20271 : 654 : std::swap (_q20, _q21);
20272 : 31402 : switch (TREE_CODE (_q21))
20273 : : {
20274 : 16846 : case INTEGER_CST:
20275 : 16846 : {
20276 : 16846 : switch (TREE_CODE (_p1))
20277 : : {
20278 : 11340 : case INTEGER_CST:
20279 : 11340 : {
20280 : 11340 : {
20281 : 11340 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
20282 : 11340 : if (gimple_simplify_347 (res_op, seq, valueize, type, captures, TRUNC_MOD_EXPR))
20283 : 26 : return true;
20284 : : }
20285 : 11314 : break;
20286 : : }
20287 : : default:;
20288 : : }
20289 : : break;
20290 : : }
20291 : : default:;
20292 : : }
20293 : 1857602 : break;
20294 : : }
20295 : : default:;
20296 : : }
20297 : : }
20298 : : break;
20299 : 1857602 : default:;
20300 : : }
20301 : 1857602 : switch (TREE_CODE (_p1))
20302 : : {
20303 : 1001604 : case SSA_NAME:
20304 : 1001604 : if (gimple *_d1 = get_def (valueize, _p1))
20305 : : {
20306 : 784929 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
20307 : 1199807 : switch (gimple_assign_rhs_code (_a1))
20308 : : {
20309 : 144886 : CASE_CONVERT:
20310 : 144886 : {
20311 : 144886 : tree _q30 = gimple_assign_rhs1 (_a1);
20312 : 144886 : _q30 = do_valueize (valueize, _q30);
20313 : 144886 : switch (TREE_CODE (_q30))
20314 : : {
20315 : 144886 : case SSA_NAME:
20316 : 144886 : if (gimple *_d2 = get_def (valueize, _q30))
20317 : : {
20318 : 143660 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
20319 : 100303 : switch (gimple_assign_rhs_code (_a2))
20320 : : {
20321 : 2 : case NEGATE_EXPR:
20322 : 2 : {
20323 : 2 : tree _q40 = gimple_assign_rhs1 (_a2);
20324 : 2 : _q40 = do_valueize (valueize, _q40);
20325 : 2 : {
20326 : 2 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q40 };
20327 : 2 : if (gimple_simplify_397 (res_op, seq, valueize, type, captures))
20328 : 0 : return true;
20329 : : }
20330 : 2 : break;
20331 : : }
20332 : : default:;
20333 : : }
20334 : : }
20335 : : break;
20336 : 144886 : default:;
20337 : : }
20338 : 144886 : {
20339 : 144886 : tree _q30_pops[1];
20340 : 144886 : if (gimple_power_of_two_cand (_q30, _q30_pops, valueize))
20341 : : {
20342 : 108 : tree _q40 = _q30_pops[0];
20343 : 108 : {
20344 : 108 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q30, _q40 };
20345 : 108 : if (gimple_simplify_348 (res_op, seq, valueize, type, captures, TRUNC_MOD_EXPR))
20346 : 0 : return true;
20347 : : }
20348 : : }
20349 : : }
20350 : 144886 : break;
20351 : : }
20352 : 969 : case NEGATE_EXPR:
20353 : 969 : {
20354 : 969 : tree _q30 = gimple_assign_rhs1 (_a1);
20355 : 969 : _q30 = do_valueize (valueize, _q30);
20356 : 969 : {
20357 : 969 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _q30 };
20358 : 969 : if (gimple_simplify_397 (res_op, seq, valueize, type, captures))
20359 : 18 : return true;
20360 : : }
20361 : 951 : break;
20362 : : }
20363 : : default:;
20364 : : }
20365 : : }
20366 : : break;
20367 : 843132 : case INTEGER_CST:
20368 : 843132 : {
20369 : 843132 : {
20370 : 843132 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
20371 : 843132 : if (TYPE_SIGN (type) == SIGNED
20372 : 435571 : && !TREE_OVERFLOW (captures[1])
20373 : 843709 : && wi::neg_p (wi::to_wide (captures[1]))
20374 : 916 : && !TYPE_OVERFLOW_TRAPS (type)
20375 : 844048 : && !sign_bit_p (captures[1], captures[1])
20376 : : )
20377 : : {
20378 : 339 : gimple_seq *lseq = seq;
20379 : 339 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2418;
20380 : 339 : {
20381 : 339 : res_op->set_op (TRUNC_MOD_EXPR, type, 2);
20382 : 339 : res_op->ops[0] = captures[0];
20383 : 339 : {
20384 : 339 : tree _o1[1], _r1;
20385 : 339 : _o1[0] = captures[1];
20386 : 339 : gimple_match_op tem_op (res_op->cond.any_else (), NEGATE_EXPR, TREE_TYPE (_o1[0]), _o1[0]);
20387 : 339 : tem_op.resimplify (lseq, valueize);
20388 : 339 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
20389 : 339 : if (!_r1) goto next_after_fail2418;
20390 : 339 : res_op->ops[1] = _r1;
20391 : : }
20392 : 339 : res_op->resimplify (lseq, valueize);
20393 : 339 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1147, __FILE__, __LINE__, true);
20394 : 339 : return true;
20395 : : }
20396 : 842793 : next_after_fail2418:;
20397 : : }
20398 : : }
20399 : 842793 : break;
20400 : : }
20401 : 1857245 : default:;
20402 : : }
20403 : 1857245 : {
20404 : 1857245 : tree _p1_pops[1];
20405 : 1857245 : if (gimple_power_of_two_cand (_p1, _p1_pops, valueize))
20406 : : {
20407 : 842900 : tree _q30 = _p1_pops[0];
20408 : 842900 : {
20409 : 842900 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p1, _q30 };
20410 : 842900 : if (gimple_simplify_348 (res_op, seq, valueize, type, captures, TRUNC_MOD_EXPR))
20411 : 1689 : return true;
20412 : : }
20413 : : }
20414 : : }
20415 : 1855556 : switch (TREE_CODE (_p0))
20416 : : {
20417 : 1740726 : case SSA_NAME:
20418 : 1740726 : if (gimple *_d1 = get_def (valueize, _p0))
20419 : : {
20420 : 875586 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
20421 : 785114 : switch (gimple_assign_rhs_code (_a1))
20422 : : {
20423 : 4 : case VEC_COND_EXPR:
20424 : 4 : {
20425 : 4 : tree _q20 = gimple_assign_rhs1 (_a1);
20426 : 4 : _q20 = do_valueize (valueize, _q20);
20427 : 4 : tree _q21 = gimple_assign_rhs2 (_a1);
20428 : 4 : _q21 = do_valueize (valueize, _q21);
20429 : 4 : tree _q22 = gimple_assign_rhs3 (_a1);
20430 : 4 : _q22 = do_valueize (valueize, _q22);
20431 : 4 : switch (TREE_CODE (_p1))
20432 : : {
20433 : 0 : case SSA_NAME:
20434 : 0 : if (gimple *_d2 = get_def (valueize, _p1))
20435 : : {
20436 : 0 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
20437 : 0 : switch (gimple_assign_rhs_code (_a2))
20438 : : {
20439 : 0 : case VEC_COND_EXPR:
20440 : 0 : {
20441 : 0 : tree _q60 = gimple_assign_rhs1 (_a2);
20442 : 0 : _q60 = do_valueize (valueize, _q60);
20443 : 0 : tree _q61 = gimple_assign_rhs2 (_a2);
20444 : 0 : _q61 = do_valueize (valueize, _q61);
20445 : 0 : tree _q62 = gimple_assign_rhs3 (_a2);
20446 : 0 : _q62 = do_valueize (valueize, _q62);
20447 : 0 : if ((_q60 == _q20 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _q20, 0) && types_match (_q60, _q20)))
20448 : : {
20449 : 0 : {
20450 : 0 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q22, _p1, _q61, _q62 };
20451 : 0 : if (VECTOR_TYPE_P (type)
20452 : 0 : && (TREE_CODE_CLASS (TRUNC_MOD_EXPR) != tcc_comparison
20453 : : || types_match (type, TREE_TYPE (captures[2]))
20454 : : || expand_vec_cond_expr_p (type, TREE_TYPE (captures[1]))
20455 : : || (optimize_vectors_before_lowering_p ()
20456 : : && !expand_vec_cond_expr_p (TREE_TYPE (captures[2]), TREE_TYPE (captures[1]))))
20457 : : )
20458 : : {
20459 : 0 : gimple_seq *lseq = seq;
20460 : 0 : if (lseq
20461 : 0 : && (!single_use (captures[0])
20462 : 0 : || !single_use (captures[4])))
20463 : 0 : lseq = NULL;
20464 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2419;
20465 : 0 : {
20466 : 0 : res_op->set_op (VEC_COND_EXPR, type, 3);
20467 : 0 : res_op->ops[0] = captures[1];
20468 : 0 : {
20469 : 0 : tree _o1[2], _r1;
20470 : 0 : _o1[0] = captures[2];
20471 : 0 : _o1[1] = captures[5];
20472 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), TRUNC_MOD_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
20473 : 0 : tem_op.resimplify (NULL, valueize);
20474 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
20475 : 0 : if (!_r1) goto next_after_fail2419;
20476 : 0 : res_op->ops[1] = _r1;
20477 : : }
20478 : 0 : {
20479 : 0 : tree _o1[2], _r1;
20480 : 0 : _o1[0] = captures[3];
20481 : 0 : _o1[1] = captures[6];
20482 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), TRUNC_MOD_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
20483 : 0 : tem_op.resimplify (NULL, valueize);
20484 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
20485 : 0 : if (!_r1) goto next_after_fail2419;
20486 : 0 : res_op->ops[2] = _r1;
20487 : : }
20488 : 0 : res_op->resimplify (lseq, valueize);
20489 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1033, __FILE__, __LINE__, true);
20490 : 0 : return true;
20491 : : }
20492 : 0 : next_after_fail2419:;
20493 : : }
20494 : : }
20495 : : }
20496 : : break;
20497 : : }
20498 : : default:;
20499 : : }
20500 : : }
20501 : : break;
20502 : 4 : default:;
20503 : : }
20504 : 4 : {
20505 : 4 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q22, _p1 };
20506 : 4 : if (VECTOR_TYPE_P (type)
20507 : 4 : && (TREE_CODE_CLASS (TRUNC_MOD_EXPR) != tcc_comparison
20508 : : || types_match (type, TREE_TYPE (captures[2]))
20509 : : || expand_vec_cond_expr_p (type, TREE_TYPE (captures[1]))
20510 : : || (optimize_vectors_before_lowering_p ()
20511 : : && !expand_vec_cond_expr_p (TREE_TYPE (captures[2]), TREE_TYPE (captures[1]))))
20512 : : )
20513 : : {
20514 : 4 : gimple_seq *lseq = seq;
20515 : 4 : if (lseq
20516 : 3 : && (!single_use (captures[0])))
20517 : 1 : lseq = NULL;
20518 : 4 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2420;
20519 : 4 : {
20520 : 4 : res_op->set_op (VEC_COND_EXPR, type, 3);
20521 : 4 : res_op->ops[0] = captures[1];
20522 : 4 : {
20523 : 4 : tree _o1[2], _r1;
20524 : 4 : _o1[0] = captures[2];
20525 : 4 : _o1[1] = captures[4];
20526 : 4 : gimple_match_op tem_op (res_op->cond.any_else (), TRUNC_MOD_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
20527 : 4 : tem_op.resimplify (NULL, valueize);
20528 : 4 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
20529 : 4 : if (!_r1) goto next_after_fail2420;
20530 : 4 : res_op->ops[1] = _r1;
20531 : : }
20532 : 4 : {
20533 : 4 : tree _o1[2], _r1;
20534 : 4 : _o1[0] = captures[3];
20535 : 4 : _o1[1] = captures[4];
20536 : 4 : gimple_match_op tem_op (res_op->cond.any_else (), TRUNC_MOD_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
20537 : 4 : tem_op.resimplify (NULL, valueize);
20538 : 4 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
20539 : 4 : if (!_r1) goto next_after_fail2420;
20540 : 4 : res_op->ops[2] = _r1;
20541 : : }
20542 : 4 : res_op->resimplify (lseq, valueize);
20543 : 4 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1034, __FILE__, __LINE__, true);
20544 : 4 : return true;
20545 : : }
20546 : 0 : next_after_fail2420:;
20547 : : }
20548 : : }
20549 : 0 : break;
20550 : : }
20551 : : default:;
20552 : : }
20553 : : }
20554 : : break;
20555 : 1855552 : default:;
20556 : : }
20557 : 1855552 : switch (TREE_CODE (_p1))
20558 : : {
20559 : 1001566 : case SSA_NAME:
20560 : 1001566 : if (gimple *_d1 = get_def (valueize, _p1))
20561 : : {
20562 : 784891 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
20563 : 1199769 : switch (gimple_assign_rhs_code (_a1))
20564 : : {
20565 : 23 : case VEC_COND_EXPR:
20566 : 23 : {
20567 : 23 : tree _q30 = gimple_assign_rhs1 (_a1);
20568 : 23 : _q30 = do_valueize (valueize, _q30);
20569 : 23 : tree _q31 = gimple_assign_rhs2 (_a1);
20570 : 23 : _q31 = do_valueize (valueize, _q31);
20571 : 23 : tree _q32 = gimple_assign_rhs3 (_a1);
20572 : 23 : _q32 = do_valueize (valueize, _q32);
20573 : 23 : {
20574 : 23 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _p1, _q30, _q31, _q32 };
20575 : 23 : if (VECTOR_TYPE_P (type)
20576 : 23 : && (TREE_CODE_CLASS (TRUNC_MOD_EXPR) != tcc_comparison
20577 : : || types_match (type, TREE_TYPE (captures[3]))
20578 : : || expand_vec_cond_expr_p (type, TREE_TYPE (captures[2]))
20579 : : || (optimize_vectors_before_lowering_p ()
20580 : : && !expand_vec_cond_expr_p (TREE_TYPE (captures[3]), TREE_TYPE (captures[2]))))
20581 : : )
20582 : : {
20583 : 23 : gimple_seq *lseq = seq;
20584 : 23 : if (lseq
20585 : 11 : && (!single_use (captures[1])))
20586 : 12 : lseq = NULL;
20587 : 23 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2421;
20588 : 23 : {
20589 : 23 : res_op->set_op (VEC_COND_EXPR, type, 3);
20590 : 23 : res_op->ops[0] = captures[2];
20591 : 23 : {
20592 : 23 : tree _o1[2], _r1;
20593 : 23 : _o1[0] = captures[0];
20594 : 23 : _o1[1] = captures[3];
20595 : 23 : gimple_match_op tem_op (res_op->cond.any_else (), TRUNC_MOD_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
20596 : 23 : tem_op.resimplify (NULL, valueize);
20597 : 23 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
20598 : 23 : if (!_r1) goto next_after_fail2421;
20599 : 23 : res_op->ops[1] = _r1;
20600 : : }
20601 : 23 : {
20602 : 23 : tree _o1[2], _r1;
20603 : 23 : _o1[0] = captures[0];
20604 : 23 : _o1[1] = captures[4];
20605 : 23 : gimple_match_op tem_op (res_op->cond.any_else (), TRUNC_MOD_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
20606 : 23 : tem_op.resimplify (NULL, valueize);
20607 : 23 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
20608 : 23 : if (!_r1) goto next_after_fail2421;
20609 : 0 : res_op->ops[2] = _r1;
20610 : : }
20611 : 0 : res_op->resimplify (lseq, valueize);
20612 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1035, __FILE__, __LINE__, true);
20613 : 0 : return true;
20614 : : }
20615 : 23 : next_after_fail2421:;
20616 : : }
20617 : : }
20618 : 23 : break;
20619 : : }
20620 : : default:;
20621 : : }
20622 : : }
20623 : : break;
20624 : : default:;
20625 : : }
20626 : : return false;
20627 : : }
20628 : :
20629 : : bool
20630 : 3824780 : gimple_simplify_RSHIFT_EXPR (gimple_match_op *res_op, gimple_seq *seq,
20631 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
20632 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1)
20633 : : {
20634 : 3824780 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
20635 : 3824780 : switch (TREE_CODE (_p1))
20636 : : {
20637 : 318503 : case SSA_NAME:
20638 : 318503 : if (gimple *_d1 = get_def (valueize, _p1))
20639 : : {
20640 : 222796 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
20641 : 201626 : switch (gimple_assign_rhs_code (_a1))
20642 : : {
20643 : 244 : case TRUNC_MOD_EXPR:
20644 : 244 : {
20645 : 244 : tree _q30 = gimple_assign_rhs1 (_a1);
20646 : 244 : _q30 = do_valueize (valueize, _q30);
20647 : 244 : tree _q31 = gimple_assign_rhs2 (_a1);
20648 : 244 : _q31 = do_valueize (valueize, _q31);
20649 : 244 : {
20650 : 244 : tree _q31_pops[1];
20651 : 244 : if (gimple_power_of_two_cand (_q31, _q31_pops, valueize))
20652 : : {
20653 : 226 : tree _q50 = _q31_pops[0];
20654 : 226 : {
20655 : 226 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q30, _q31, _q50 };
20656 : 226 : if (gimple_simplify_398 (res_op, seq, valueize, type, captures, RSHIFT_EXPR, TRUNC_MOD_EXPR))
20657 : 108 : return true;
20658 : : }
20659 : : }
20660 : : }
20661 : 136 : break;
20662 : : }
20663 : 0 : case FLOOR_MOD_EXPR:
20664 : 0 : {
20665 : 0 : tree _q30 = gimple_assign_rhs1 (_a1);
20666 : 0 : _q30 = do_valueize (valueize, _q30);
20667 : 0 : tree _q31 = gimple_assign_rhs2 (_a1);
20668 : 0 : _q31 = do_valueize (valueize, _q31);
20669 : 0 : {
20670 : 0 : tree _q31_pops[1];
20671 : 0 : if (gimple_power_of_two_cand (_q31, _q31_pops, valueize))
20672 : : {
20673 : 0 : tree _q50 = _q31_pops[0];
20674 : 0 : {
20675 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q30, _q31, _q50 };
20676 : 0 : if (gimple_simplify_398 (res_op, seq, valueize, type, captures, RSHIFT_EXPR, FLOOR_MOD_EXPR))
20677 : 0 : return true;
20678 : : }
20679 : : }
20680 : : }
20681 : 0 : break;
20682 : : }
20683 : : default:;
20684 : : }
20685 : : }
20686 : : break;
20687 : 3824672 : default:;
20688 : : }
20689 : 3824672 : switch (TREE_CODE (_p0))
20690 : : {
20691 : 3695697 : case SSA_NAME:
20692 : 3695697 : if (gimple *_d1 = get_def (valueize, _p0))
20693 : : {
20694 : 2290754 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
20695 : 1980433 : switch (gimple_assign_rhs_code (_a1))
20696 : : {
20697 : 410191 : case PLUS_EXPR:
20698 : 410191 : {
20699 : 410191 : tree _q20 = gimple_assign_rhs1 (_a1);
20700 : 410191 : _q20 = do_valueize (valueize, _q20);
20701 : 410191 : tree _q21 = gimple_assign_rhs2 (_a1);
20702 : 410191 : _q21 = do_valueize (valueize, _q21);
20703 : 410191 : if (tree_swap_operands_p (_q20, _q21))
20704 : 11984 : std::swap (_q20, _q21);
20705 : 410191 : switch (TREE_CODE (_q21))
20706 : : {
20707 : 228017 : case INTEGER_CST:
20708 : 228017 : {
20709 : 228017 : switch (TREE_CODE (_p1))
20710 : : {
20711 : 226131 : case INTEGER_CST:
20712 : 226131 : {
20713 : 226131 : {
20714 : 226131 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _p1 };
20715 : 226131 : {
20716 : 226131 : wide_int c = wi::to_wide (captures[2]);
20717 : 226131 : wide_int n = wi::to_wide (captures[3]);
20718 : 226131 : bool shift = RSHIFT_EXPR == RSHIFT_EXPR;
20719 : 226131 : int_range_max vr0, vr1, vr3;
20720 : 226131 : if (INTEGRAL_TYPE_P (type)
20721 : 452262 : && get_range_query (cfun)->range_of_expr (vr0, captures[1])
20722 : : )
20723 : : {
20724 : 452262 : if ((shift ? wi::ctz (
20725 : 226131 : c
20726 : 226131 : ) >= n.to_shwi ()
20727 : : : wi::multiple_of_p (
20728 : : c
20729 : : , n, TYPE_SIGN (type)))
20730 : 32970 : && get_range_query (cfun)->range_of_expr (vr1, captures[2])
20731 : 16485 : && range_op_handler (PLUS_EXPR).overflow_free_p (vr0, vr1)
20732 : 15816 : && get_range_query (cfun)->range_of_expr (vr3, captures[0])
20733 : 7908 : && !vr3.undefined_p ()
20734 : 234039 : && (TYPE_UNSIGNED (type)
20735 : 7056 : || (vr0.nonnegative_p () && vr3.nonnegative_p ())
20736 : 6591 : || (vr0.nonpositive_p () && vr3.nonpositive_p ()))
20737 : : )
20738 : : {
20739 : 1319 : gimple_seq *lseq = seq;
20740 : 1319 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2430;
20741 : 1319 : {
20742 : 1319 : res_op->set_op (PLUS_EXPR, type, 2);
20743 : 1319 : {
20744 : 1319 : tree _o1[2], _r1;
20745 : 1319 : _o1[0] = captures[1];
20746 : 1319 : _o1[1] = captures[3];
20747 : 1319 : gimple_match_op tem_op (res_op->cond.any_else (), RSHIFT_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
20748 : 1319 : tem_op.resimplify (lseq, valueize);
20749 : 1319 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
20750 : 1319 : if (!_r1) goto next_after_fail2430;
20751 : 559 : res_op->ops[0] = _r1;
20752 : : }
20753 : 559 : res_op->ops[1] = wide_int_to_tree (type,
20754 : 559 : (shift ? wi::rshift (
20755 : : c
20756 : 559 : , n, TYPE_SIGN (type))
20757 : : : wi::div_trunc (
20758 : : c
20759 : : , n, TYPE_SIGN (type)))
20760 : : );
20761 : 559 : res_op->resimplify (lseq, valueize);
20762 : 559 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1132, __FILE__, __LINE__, true);
20763 : 559 : return true;
20764 : : }
20765 : 225171 : next_after_fail2430:;
20766 : : }
20767 : : else
20768 : : {
20769 : 224797 : if (!vr0.undefined_p () && TYPE_UNSIGNED (type) && c.sign_mask () < 0
20770 : 60042 : &&
20771 : 60042 : (shift ? wi::ctz (
20772 : 284854 : -c
20773 : 60042 : ) >= n.to_shwi ()
20774 : : : wi::multiple_of_p (
20775 : : -c
20776 : : , n, TYPE_SIGN (type)))
20777 : 457423 : && wi::geu_p (vr0.lower_bound (), -c)
20778 : : )
20779 : : {
20780 : 780 : gimple_seq *lseq = seq;
20781 : 780 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2431;
20782 : 780 : {
20783 : 780 : res_op->set_op (PLUS_EXPR, type, 2);
20784 : 780 : {
20785 : 780 : tree _o1[2], _r1;
20786 : 780 : _o1[0] = captures[1];
20787 : 780 : _o1[1] = captures[3];
20788 : 780 : gimple_match_op tem_op (res_op->cond.any_else (), RSHIFT_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
20789 : 780 : tem_op.resimplify (lseq, valueize);
20790 : 780 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
20791 : 780 : if (!_r1) goto next_after_fail2431;
20792 : 401 : res_op->ops[0] = _r1;
20793 : : }
20794 : 401 : res_op->ops[1] = wide_int_to_tree (type, -
20795 : 401 : (shift ? wi::rshift (
20796 : 401 : -c
20797 : 401 : , n, TYPE_SIGN (type))
20798 : : : wi::div_trunc (
20799 : : -c
20800 : 401 : , n, TYPE_SIGN (type)))
20801 : : );
20802 : 401 : res_op->resimplify (lseq, valueize);
20803 : 401 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1133, __FILE__, __LINE__, true);
20804 : 401 : return true;
20805 : : }
20806 : 225171 : next_after_fail2431:;
20807 : : }
20808 : : }
20809 : : }
20810 : 226131 : }
20811 : : }
20812 : 225171 : break;
20813 : : }
20814 : : default:;
20815 : : }
20816 : : break;
20817 : : }
20818 : : default:;
20819 : : }
20820 : 3823712 : break;
20821 : : }
20822 : : default:;
20823 : : }
20824 : : }
20825 : : break;
20826 : 3823712 : default:;
20827 : : }
20828 : 3823712 : if (uniform_integer_cst_p (_p1))
20829 : : {
20830 : 3496816 : {
20831 : 3496816 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
20832 : 3496816 : if (gimple_simplify_399 (res_op, seq, valueize, type, captures, RSHIFT_EXPR))
20833 : 75 : return true;
20834 : : }
20835 : : }
20836 : 3823637 : switch (TREE_CODE (_p0))
20837 : : {
20838 : 3694670 : case SSA_NAME:
20839 : 3694670 : if (gimple *_d1 = get_def (valueize, _p0))
20840 : : {
20841 : 2289742 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
20842 : 1979369 : switch (gimple_assign_rhs_code (_a1))
20843 : : {
20844 : 2557 : case NEGATE_EXPR:
20845 : 2557 : {
20846 : 2557 : tree _q20 = gimple_assign_rhs1 (_a1);
20847 : 2557 : _q20 = do_valueize (valueize, _q20);
20848 : 2557 : switch (TREE_CODE (_p1))
20849 : : {
20850 : 2458 : case INTEGER_CST:
20851 : 2458 : {
20852 : 2458 : {
20853 : 2458 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
20854 : 2458 : if (!TYPE_UNSIGNED (type)
20855 : 2458 : && TYPE_OVERFLOW_UNDEFINED (type)
20856 : : )
20857 : : {
20858 : 744 : {
20859 : 744 : tree stype = TREE_TYPE (captures[2]);
20860 : 744 : tree bt = truth_type_for (type);
20861 : 744 : tree zeros = build_zero_cst (type);
20862 : 744 : tree INTEGER_CST = NULL_TREE;
20863 : 744 : if (INTEGRAL_TYPE_P (type)
20864 : : && canonicalize_math_after_vectorization_p ()
20865 : 959 : && wi::eq_p (wi::to_wide (captures[2]), TYPE_PRECISION (type) - 1)
20866 : : )
20867 : : {
20868 : 84 : gimple_seq *lseq = seq;
20869 : 84 : if (lseq
20870 : 42 : && (!single_use (captures[0])))
20871 : 42 : lseq = NULL;
20872 : 84 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2432;
20873 : 84 : {
20874 : 84 : res_op->set_op (NEGATE_EXPR, type, 1);
20875 : 84 : {
20876 : 84 : tree _r1;
20877 : 84 : gimple_match_op tem_op (res_op->cond.any_else (), ERROR_MARK, error_mark_node, 1);
20878 : 84 : {
20879 : 84 : tree _o2[2], _r2;
20880 : 84 : _o2[0] = captures[1];
20881 : 84 : _o2[1] = zeros;
20882 : 84 : tem_op.set_op (GT_EXPR, boolean_type_node, 2);
20883 : 84 : tem_op.ops[0] = _o2[0];
20884 : 84 : tem_op.ops[1] = _o2[1];
20885 : 84 : tem_op.resimplify (lseq, valueize);
20886 : : }
20887 : 84 : if (type != tem_op.type
20888 : 84 : && !useless_type_conversion_p (type, tem_op.type))
20889 : : {
20890 : 84 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
20891 : 84 : if (!_r1) goto next_after_fail2432;
20892 : 42 : tem_op.set_op (NOP_EXPR, type, 1);
20893 : 42 : tem_op.ops[0] = _r1;
20894 : 42 : tem_op.resimplify (lseq, valueize);
20895 : : }
20896 : 42 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
20897 : 42 : if (!_r1) goto next_after_fail2432;
20898 : 42 : res_op->ops[0] = _r1;
20899 : : }
20900 : 42 : res_op->resimplify (lseq, valueize);
20901 : 42 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1152, __FILE__, __LINE__, true);
20902 : 42 : return true;
20903 : : }
20904 : 2414 : next_after_fail2432:;
20905 : : }
20906 : : else
20907 : : {
20908 : 116 : if (VECTOR_INTEGER_TYPE_P (type)
20909 : 116 : && TYPE_MODE (bt) == TYPE_MODE (type)
20910 : 116 : && expand_vec_cmp_expr_p (type, bt, GT_EXPR)
20911 : 116 : && (INTEGER_CST = uniform_integer_cst_p (captures[2])) != NULL
20912 : 776 : && wi::eq_p (wi::to_wide (INTEGER_CST), element_precision (type) - 1)
20913 : : )
20914 : : {
20915 : 7 : gimple_seq *lseq = seq;
20916 : 7 : if (lseq
20917 : 2 : && (!single_use (captures[0])))
20918 : 5 : lseq = NULL;
20919 : 7 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2433;
20920 : 7 : {
20921 : 7 : res_op->set_op (VIEW_CONVERT_EXPR, type, 1);
20922 : 7 : {
20923 : 7 : tree _o1[2], _r1;
20924 : 7 : _o1[0] = captures[1];
20925 : 7 : _o1[1] = zeros;
20926 : 7 : (*res_op).set_op (GT_EXPR, bt, 2);
20927 : 7 : (*res_op).ops[0] = _o1[0];
20928 : 7 : (*res_op).ops[1] = _o1[1];
20929 : 7 : (*res_op).resimplify (lseq, valueize);
20930 : : }
20931 : 7 : if (type != res_op->type
20932 : 7 : && !useless_type_conversion_p (type, res_op->type))
20933 : : {
20934 : 7 : if (!(res_op->ops[0] = maybe_push_res_to_seq (res_op, lseq))) goto next_after_fail2433;
20935 : 2 : res_op->set_op (VIEW_CONVERT_EXPR, type, 1);
20936 : 2 : res_op->resimplify (lseq, valueize);
20937 : : }
20938 : 2 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1153, __FILE__, __LINE__, true);
20939 : 2 : return true;
20940 : : }
20941 : 2414 : next_after_fail2433:;
20942 : : }
20943 : : }
20944 : : }
20945 : : }
20946 : : }
20947 : 2414 : break;
20948 : : }
20949 : 0 : case VECTOR_CST:
20950 : 0 : {
20951 : 0 : {
20952 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
20953 : 0 : if (!TYPE_UNSIGNED (type)
20954 : 0 : && TYPE_OVERFLOW_UNDEFINED (type)
20955 : : )
20956 : : {
20957 : 0 : {
20958 : 0 : tree stype = TREE_TYPE (captures[2]);
20959 : 0 : tree bt = truth_type_for (type);
20960 : 0 : tree zeros = build_zero_cst (type);
20961 : 0 : tree VECTOR_CST = NULL_TREE;
20962 : 0 : if (INTEGRAL_TYPE_P (type)
20963 : : && canonicalize_math_after_vectorization_p ()
20964 : 0 : && wi::eq_p (wi::to_wide (captures[2]), TYPE_PRECISION (type) - 1)
20965 : : )
20966 : : {
20967 : 0 : gimple_seq *lseq = seq;
20968 : 0 : if (lseq
20969 : 0 : && (!single_use (captures[0])))
20970 : 0 : lseq = NULL;
20971 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2434;
20972 : 0 : {
20973 : 0 : res_op->set_op (NEGATE_EXPR, type, 1);
20974 : 0 : {
20975 : 0 : tree _r1;
20976 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), ERROR_MARK, error_mark_node, 1);
20977 : 0 : {
20978 : 0 : tree _o2[2], _r2;
20979 : 0 : _o2[0] = captures[1];
20980 : 0 : _o2[1] = zeros;
20981 : 0 : tem_op.set_op (GT_EXPR, boolean_type_node, 2);
20982 : 0 : tem_op.ops[0] = _o2[0];
20983 : 0 : tem_op.ops[1] = _o2[1];
20984 : 0 : tem_op.resimplify (lseq, valueize);
20985 : : }
20986 : 0 : if (type != tem_op.type
20987 : 0 : && !useless_type_conversion_p (type, tem_op.type))
20988 : : {
20989 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
20990 : 0 : if (!_r1) goto next_after_fail2434;
20991 : 0 : tem_op.set_op (NOP_EXPR, type, 1);
20992 : 0 : tem_op.ops[0] = _r1;
20993 : 0 : tem_op.resimplify (lseq, valueize);
20994 : : }
20995 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
20996 : 0 : if (!_r1) goto next_after_fail2434;
20997 : 0 : res_op->ops[0] = _r1;
20998 : : }
20999 : 0 : res_op->resimplify (lseq, valueize);
21000 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1152, __FILE__, __LINE__, true);
21001 : 0 : return true;
21002 : : }
21003 : 0 : next_after_fail2434:;
21004 : : }
21005 : : else
21006 : : {
21007 : 0 : if (VECTOR_INTEGER_TYPE_P (type)
21008 : 0 : && TYPE_MODE (bt) == TYPE_MODE (type)
21009 : 0 : && expand_vec_cmp_expr_p (type, bt, GT_EXPR)
21010 : 0 : && (VECTOR_CST = uniform_integer_cst_p (captures[2])) != NULL
21011 : 0 : && wi::eq_p (wi::to_wide (VECTOR_CST), element_precision (type) - 1)
21012 : : )
21013 : : {
21014 : 0 : gimple_seq *lseq = seq;
21015 : 0 : if (lseq
21016 : 0 : && (!single_use (captures[0])))
21017 : 0 : lseq = NULL;
21018 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2435;
21019 : 0 : {
21020 : 0 : res_op->set_op (VIEW_CONVERT_EXPR, type, 1);
21021 : 0 : {
21022 : 0 : tree _o1[2], _r1;
21023 : 0 : _o1[0] = captures[1];
21024 : 0 : _o1[1] = zeros;
21025 : 0 : (*res_op).set_op (GT_EXPR, bt, 2);
21026 : 0 : (*res_op).ops[0] = _o1[0];
21027 : 0 : (*res_op).ops[1] = _o1[1];
21028 : 0 : (*res_op).resimplify (lseq, valueize);
21029 : : }
21030 : 0 : if (type != res_op->type
21031 : 0 : && !useless_type_conversion_p (type, res_op->type))
21032 : : {
21033 : 0 : if (!(res_op->ops[0] = maybe_push_res_to_seq (res_op, lseq))) goto next_after_fail2435;
21034 : 0 : res_op->set_op (VIEW_CONVERT_EXPR, type, 1);
21035 : 0 : res_op->resimplify (lseq, valueize);
21036 : : }
21037 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1153, __FILE__, __LINE__, true);
21038 : 0 : return true;
21039 : : }
21040 : 0 : next_after_fail2435:;
21041 : : }
21042 : : }
21043 : : }
21044 : : }
21045 : : }
21046 : 0 : break;
21047 : : }
21048 : : default:;
21049 : : }
21050 : : break;
21051 : : }
21052 : 409231 : case PLUS_EXPR:
21053 : 409231 : {
21054 : 409231 : tree _q20 = gimple_assign_rhs1 (_a1);
21055 : 409231 : _q20 = do_valueize (valueize, _q20);
21056 : 409231 : tree _q21 = gimple_assign_rhs2 (_a1);
21057 : 409231 : _q21 = do_valueize (valueize, _q21);
21058 : 409231 : if (tree_swap_operands_p (_q20, _q21))
21059 : 11962 : std::swap (_q20, _q21);
21060 : 409231 : if (integer_onep (_p1))
21061 : : {
21062 : 50346 : {
21063 : 50346 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q21 };
21064 : 50346 : if (gimple_simplify_410 (res_op, seq, valueize, type, captures))
21065 : 0 : return true;
21066 : : }
21067 : 50346 : {
21068 : 50346 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q21, _q20 };
21069 : 50346 : if (gimple_simplify_410 (res_op, seq, valueize, type, captures))
21070 : 0 : return true;
21071 : : }
21072 : : }
21073 : 3822888 : break;
21074 : : }
21075 : 20366 : case LSHIFT_EXPR:
21076 : 20366 : {
21077 : 20366 : tree _q20 = gimple_assign_rhs1 (_a1);
21078 : 20366 : _q20 = do_valueize (valueize, _q20);
21079 : 20366 : tree _q21 = gimple_assign_rhs2 (_a1);
21080 : 20366 : _q21 = do_valueize (valueize, _q21);
21081 : 20366 : switch (TREE_CODE (_q21))
21082 : : {
21083 : 12357 : case INTEGER_CST:
21084 : 12357 : {
21085 : 12357 : if ((_p1 == _q21 && ! TREE_SIDE_EFFECTS (_p1)) || operand_equal_p (_p1, _q21, 0))
21086 : : {
21087 : 3740 : {
21088 : 3740 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _p1, _q21 };
21089 : 3740 : if (gimple_simplify_411 (res_op, seq, valueize, type, captures))
21090 : 705 : return true;
21091 : : }
21092 : : }
21093 : : break;
21094 : : }
21095 : : default:;
21096 : : }
21097 : : break;
21098 : : }
21099 : : default:;
21100 : : }
21101 : : }
21102 : : break;
21103 : 3822888 : default:;
21104 : : }
21105 : 3822888 : {
21106 : 3822888 : tree _p0_pops[1];
21107 : 3822888 : if (gimple_nop_convert (_p0, _p0_pops, valueize))
21108 : : {
21109 : 133887 : tree _q20 = _p0_pops[0];
21110 : 133887 : switch (TREE_CODE (_q20))
21111 : : {
21112 : 133779 : case SSA_NAME:
21113 : 133779 : if (gimple *_d1 = get_def (valueize, _q20))
21114 : : {
21115 : 128796 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
21116 : 86866 : switch (gimple_assign_rhs_code (_a1))
21117 : : {
21118 : 459 : case LSHIFT_EXPR:
21119 : 459 : {
21120 : 459 : tree _q30 = gimple_assign_rhs1 (_a1);
21121 : 459 : _q30 = do_valueize (valueize, _q30);
21122 : 459 : tree _q31 = gimple_assign_rhs2 (_a1);
21123 : 459 : _q31 = do_valueize (valueize, _q31);
21124 : 459 : switch (TREE_CODE (_q31))
21125 : : {
21126 : 18 : case INTEGER_CST:
21127 : 18 : {
21128 : 18 : if ((_p1 == _q31 && ! TREE_SIDE_EFFECTS (_p1)) || operand_equal_p (_p1, _q31, 0))
21129 : : {
21130 : 13 : {
21131 : 13 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _p1, _q31 };
21132 : 13 : if (gimple_simplify_411 (res_op, seq, valueize, type, captures))
21133 : 4 : return true;
21134 : : }
21135 : : }
21136 : : break;
21137 : : }
21138 : : default:;
21139 : : }
21140 : : break;
21141 : : }
21142 : : default:;
21143 : : }
21144 : : }
21145 : : break;
21146 : : default:;
21147 : : }
21148 : : }
21149 : : }
21150 : 3822884 : if (integer_all_onesp (_p0))
21151 : : {
21152 : 7707 : {
21153 : 7707 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
21154 : 7707 : if (!TYPE_UNSIGNED (type)
21155 : : )
21156 : : {
21157 : 39 : gimple_seq *lseq = seq;
21158 : 39 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2436;
21159 : 39 : {
21160 : 39 : tree tem;
21161 : 39 : tem = captures[0];
21162 : 39 : res_op->set_value (tem);
21163 : 39 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1154, __FILE__, __LINE__, true);
21164 : 39 : return true;
21165 : : }
21166 : 0 : next_after_fail2436:;
21167 : : }
21168 : : }
21169 : : }
21170 : 3822845 : if ((_p1 == _p0 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _p0, 0) && types_match (_p1, _p0)))
21171 : : {
21172 : 15 : {
21173 : 15 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
21174 : 15 : gimple_seq *lseq = seq;
21175 : 15 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2437;
21176 : 15 : {
21177 : 15 : tree tem;
21178 : 15 : tem = build_zero_cst (type);
21179 : 15 : res_op->set_value (tem);
21180 : 15 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1155, __FILE__, __LINE__, true);
21181 : 15 : return true;
21182 : : }
21183 : 0 : next_after_fail2437:;
21184 : : }
21185 : : }
21186 : 3822830 : if (integer_zerop (_p1))
21187 : : {
21188 : 11899 : {
21189 : 11899 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
21190 : 11899 : if (gimple_simplify_402 (res_op, seq, valueize, type, captures, RSHIFT_EXPR))
21191 : 11899 : return true;
21192 : : }
21193 : : }
21194 : 3810931 : if (integer_zerop (_p0))
21195 : : {
21196 : 1974 : {
21197 : 1974 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
21198 : 1974 : if (gimple_simplify_403 (res_op, seq, valueize, type, captures, RSHIFT_EXPR))
21199 : 1974 : return true;
21200 : : }
21201 : : }
21202 : 3808957 : switch (TREE_CODE (_p1))
21203 : : {
21204 : 316379 : case SSA_NAME:
21205 : 316379 : if (gimple *_d1 = get_def (valueize, _p1))
21206 : : {
21207 : 221835 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
21208 : 200833 : switch (gimple_assign_rhs_code (_a1))
21209 : : {
21210 : 96 : case CONSTRUCTOR:
21211 : 96 : {
21212 : 96 : {
21213 : 96 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
21214 : 96 : if (gimple_simplify_405 (res_op, seq, valueize, type, captures, RSHIFT_EXPR))
21215 : 0 : return true;
21216 : : }
21217 : 96 : break;
21218 : : }
21219 : : default:;
21220 : : }
21221 : : }
21222 : 316379 : {
21223 : 316379 : {
21224 : 316379 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
21225 : 316379 : if (gimple_simplify_406 (res_op, seq, valueize, type, captures, RSHIFT_EXPR))
21226 : 6 : return true;
21227 : : }
21228 : : }
21229 : 316373 : break;
21230 : 2923 : case VECTOR_CST:
21231 : 2923 : {
21232 : 2923 : {
21233 : 2923 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
21234 : 2923 : if (gimple_simplify_404 (res_op, seq, valueize, type, captures, RSHIFT_EXPR))
21235 : 320 : return true;
21236 : : }
21237 : 2603 : break;
21238 : : }
21239 : 3808631 : default:;
21240 : : }
21241 : 3808631 : switch (TREE_CODE (_p0))
21242 : : {
21243 : 3681684 : case SSA_NAME:
21244 : 3681684 : if (gimple *_d1 = get_def (valueize, _p0))
21245 : : {
21246 : 2279646 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
21247 : 1969910 : switch (gimple_assign_rhs_code (_a1))
21248 : : {
21249 : 23128 : case RSHIFT_EXPR:
21250 : 23128 : {
21251 : 23128 : tree _q20 = gimple_assign_rhs1 (_a1);
21252 : 23128 : _q20 = do_valueize (valueize, _q20);
21253 : 23128 : tree _q21 = gimple_assign_rhs2 (_a1);
21254 : 23128 : _q21 = do_valueize (valueize, _q21);
21255 : 23128 : switch (TREE_CODE (_q21))
21256 : : {
21257 : 19710 : case INTEGER_CST:
21258 : 19710 : {
21259 : 19710 : switch (TREE_CODE (_p1))
21260 : : {
21261 : 19062 : case INTEGER_CST:
21262 : 19062 : {
21263 : 19062 : {
21264 : 19062 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
21265 : 19062 : if (gimple_simplify_407 (res_op, seq, valueize, type, captures, RSHIFT_EXPR))
21266 : 19062 : return true;
21267 : : }
21268 : 0 : break;
21269 : : }
21270 : : default:;
21271 : : }
21272 : : break;
21273 : : }
21274 : : default:;
21275 : : }
21276 : : break;
21277 : : }
21278 : 236741 : CASE_CONVERT:
21279 : 236741 : {
21280 : 236741 : tree _q20 = gimple_assign_rhs1 (_a1);
21281 : 236741 : _q20 = do_valueize (valueize, _q20);
21282 : 236741 : switch (TREE_CODE (_q20))
21283 : : {
21284 : 236633 : case SSA_NAME:
21285 : 236633 : if (gimple *_d2 = get_def (valueize, _q20))
21286 : : {
21287 : 226480 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
21288 : 180752 : switch (gimple_assign_rhs_code (_a2))
21289 : : {
21290 : 5582 : case BIT_AND_EXPR:
21291 : 5582 : {
21292 : 5582 : tree _q30 = gimple_assign_rhs1 (_a2);
21293 : 5582 : _q30 = do_valueize (valueize, _q30);
21294 : 5582 : tree _q31 = gimple_assign_rhs2 (_a2);
21295 : 5582 : _q31 = do_valueize (valueize, _q31);
21296 : 5582 : if (tree_swap_operands_p (_q30, _q31))
21297 : 63 : std::swap (_q30, _q31);
21298 : 5582 : switch (TREE_CODE (_q31))
21299 : : {
21300 : 4881 : case INTEGER_CST:
21301 : 4881 : {
21302 : 4881 : switch (TREE_CODE (_p1))
21303 : : {
21304 : 1040 : case INTEGER_CST:
21305 : 1040 : {
21306 : 1040 : {
21307 : 1040 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q31, _p1 };
21308 : 1040 : if (gimple_simplify_408 (res_op, seq, valueize, type, captures, BIT_AND_EXPR, RSHIFT_EXPR))
21309 : 0 : return true;
21310 : : }
21311 : 1040 : break;
21312 : : }
21313 : : default:;
21314 : : }
21315 : : break;
21316 : : }
21317 : : default:;
21318 : : }
21319 : 3788468 : break;
21320 : : }
21321 : 432 : case BIT_XOR_EXPR:
21322 : 432 : {
21323 : 432 : tree _q30 = gimple_assign_rhs1 (_a2);
21324 : 432 : _q30 = do_valueize (valueize, _q30);
21325 : 432 : tree _q31 = gimple_assign_rhs2 (_a2);
21326 : 432 : _q31 = do_valueize (valueize, _q31);
21327 : 432 : if (tree_swap_operands_p (_q30, _q31))
21328 : 17 : std::swap (_q30, _q31);
21329 : 432 : switch (TREE_CODE (_q31))
21330 : : {
21331 : 57 : case INTEGER_CST:
21332 : 57 : {
21333 : 57 : switch (TREE_CODE (_p1))
21334 : : {
21335 : 57 : case INTEGER_CST:
21336 : 57 : {
21337 : 57 : {
21338 : 57 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q31, _p1 };
21339 : 57 : if (gimple_simplify_408 (res_op, seq, valueize, type, captures, BIT_XOR_EXPR, RSHIFT_EXPR))
21340 : 1 : return true;
21341 : : }
21342 : 56 : break;
21343 : : }
21344 : : default:;
21345 : : }
21346 : : break;
21347 : : }
21348 : : default:;
21349 : : }
21350 : 3788468 : break;
21351 : : }
21352 : 1043 : case BIT_IOR_EXPR:
21353 : 1043 : {
21354 : 1043 : tree _q30 = gimple_assign_rhs1 (_a2);
21355 : 1043 : _q30 = do_valueize (valueize, _q30);
21356 : 1043 : tree _q31 = gimple_assign_rhs2 (_a2);
21357 : 1043 : _q31 = do_valueize (valueize, _q31);
21358 : 1043 : if (tree_swap_operands_p (_q30, _q31))
21359 : 108 : std::swap (_q30, _q31);
21360 : 1043 : switch (TREE_CODE (_q31))
21361 : : {
21362 : 45 : case INTEGER_CST:
21363 : 45 : {
21364 : 45 : switch (TREE_CODE (_p1))
21365 : : {
21366 : 45 : case INTEGER_CST:
21367 : 45 : {
21368 : 45 : {
21369 : 45 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q30, _q31, _p1 };
21370 : 45 : if (gimple_simplify_408 (res_op, seq, valueize, type, captures, BIT_IOR_EXPR, RSHIFT_EXPR))
21371 : 3 : return true;
21372 : : }
21373 : 42 : break;
21374 : : }
21375 : : default:;
21376 : : }
21377 : : break;
21378 : : }
21379 : : default:;
21380 : : }
21381 : 3788468 : break;
21382 : : }
21383 : : default:;
21384 : : }
21385 : 110309 : else if (gcall *_c2 = dyn_cast <gcall *> (_d2))
21386 : 5457 : switch (gimple_call_combined_fn (_c2))
21387 : : {
21388 : 0 : case CFN_BUILT_IN_BSWAP128:
21389 : 0 : if (gimple_call_num_args (_c2) == 1)
21390 : : {
21391 : 0 : tree _q30 = gimple_call_arg (_c2, 0);
21392 : 0 : _q30 = do_valueize (valueize, _q30);
21393 : 0 : switch (TREE_CODE (_p1))
21394 : : {
21395 : 0 : case INTEGER_CST:
21396 : 0 : {
21397 : 0 : {
21398 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q30, _p1 };
21399 : 0 : if (gimple_simplify_412 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_BSWAP128))
21400 : 0 : return true;
21401 : : }
21402 : 0 : break;
21403 : : }
21404 : : default:;
21405 : : }
21406 : : }
21407 : : break;
21408 : 17 : case CFN_BUILT_IN_BSWAP16:
21409 : 17 : if (gimple_call_num_args (_c2) == 1)
21410 : : {
21411 : 17 : tree _q30 = gimple_call_arg (_c2, 0);
21412 : 17 : _q30 = do_valueize (valueize, _q30);
21413 : 17 : switch (TREE_CODE (_p1))
21414 : : {
21415 : 2 : case INTEGER_CST:
21416 : 2 : {
21417 : 2 : {
21418 : 2 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q30, _p1 };
21419 : 2 : if (gimple_simplify_412 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_BSWAP16))
21420 : 1 : return true;
21421 : : }
21422 : 1 : break;
21423 : : }
21424 : : default:;
21425 : : }
21426 : : }
21427 : : break;
21428 : 0 : case CFN_BUILT_IN_BSWAP32:
21429 : 0 : if (gimple_call_num_args (_c2) == 1)
21430 : : {
21431 : 0 : tree _q30 = gimple_call_arg (_c2, 0);
21432 : 0 : _q30 = do_valueize (valueize, _q30);
21433 : 0 : switch (TREE_CODE (_p1))
21434 : : {
21435 : 0 : case INTEGER_CST:
21436 : 0 : {
21437 : 0 : {
21438 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q30, _p1 };
21439 : 0 : if (gimple_simplify_412 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_BSWAP32))
21440 : 0 : return true;
21441 : : }
21442 : 0 : break;
21443 : : }
21444 : : default:;
21445 : : }
21446 : : }
21447 : : break;
21448 : 0 : case CFN_BUILT_IN_BSWAP64:
21449 : 0 : if (gimple_call_num_args (_c2) == 1)
21450 : : {
21451 : 0 : tree _q30 = gimple_call_arg (_c2, 0);
21452 : 0 : _q30 = do_valueize (valueize, _q30);
21453 : 0 : switch (TREE_CODE (_p1))
21454 : : {
21455 : 0 : case INTEGER_CST:
21456 : 0 : {
21457 : 0 : {
21458 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q30, _p1 };
21459 : 0 : if (gimple_simplify_412 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_BSWAP64))
21460 : 0 : return true;
21461 : : }
21462 : 0 : break;
21463 : : }
21464 : : default:;
21465 : : }
21466 : : }
21467 : : break;
21468 : : default:;
21469 : : }
21470 : : }
21471 : : break;
21472 : : default:;
21473 : : }
21474 : : break;
21475 : : }
21476 : 36659 : case BIT_AND_EXPR:
21477 : 36659 : {
21478 : 36659 : tree _q20 = gimple_assign_rhs1 (_a1);
21479 : 36659 : _q20 = do_valueize (valueize, _q20);
21480 : 36659 : tree _q21 = gimple_assign_rhs2 (_a1);
21481 : 36659 : _q21 = do_valueize (valueize, _q21);
21482 : 36659 : if (tree_swap_operands_p (_q20, _q21))
21483 : 1068 : std::swap (_q20, _q21);
21484 : 36659 : switch (TREE_CODE (_q21))
21485 : : {
21486 : 22180 : case INTEGER_CST:
21487 : 22180 : {
21488 : 22180 : switch (TREE_CODE (_p1))
21489 : : {
21490 : 21223 : case INTEGER_CST:
21491 : 21223 : {
21492 : 21223 : {
21493 : 21223 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _p0, _q20, _q21, _p1 };
21494 : 21223 : if (gimple_simplify_409 (res_op, seq, valueize, type, captures, BIT_AND_EXPR, RSHIFT_EXPR))
21495 : 697 : return true;
21496 : : }
21497 : 20526 : break;
21498 : : }
21499 : : default:;
21500 : : }
21501 : : break;
21502 : : }
21503 : : default:;
21504 : : }
21505 : 3788468 : break;
21506 : : }
21507 : 21236 : case BIT_XOR_EXPR:
21508 : 21236 : {
21509 : 21236 : tree _q20 = gimple_assign_rhs1 (_a1);
21510 : 21236 : _q20 = do_valueize (valueize, _q20);
21511 : 21236 : tree _q21 = gimple_assign_rhs2 (_a1);
21512 : 21236 : _q21 = do_valueize (valueize, _q21);
21513 : 21236 : if (tree_swap_operands_p (_q20, _q21))
21514 : 1600 : std::swap (_q20, _q21);
21515 : 21236 : switch (TREE_CODE (_q21))
21516 : : {
21517 : 1646 : case INTEGER_CST:
21518 : 1646 : {
21519 : 1646 : switch (TREE_CODE (_p1))
21520 : : {
21521 : 1558 : case INTEGER_CST:
21522 : 1558 : {
21523 : 1558 : {
21524 : 1558 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _p0, _q20, _q21, _p1 };
21525 : 1558 : if (gimple_simplify_409 (res_op, seq, valueize, type, captures, BIT_XOR_EXPR, RSHIFT_EXPR))
21526 : 87 : return true;
21527 : : }
21528 : 1471 : break;
21529 : : }
21530 : : default:;
21531 : : }
21532 : : break;
21533 : : }
21534 : : default:;
21535 : : }
21536 : 3788468 : break;
21537 : : }
21538 : 134765 : case BIT_IOR_EXPR:
21539 : 134765 : {
21540 : 134765 : tree _q20 = gimple_assign_rhs1 (_a1);
21541 : 134765 : _q20 = do_valueize (valueize, _q20);
21542 : 134765 : tree _q21 = gimple_assign_rhs2 (_a1);
21543 : 134765 : _q21 = do_valueize (valueize, _q21);
21544 : 134765 : if (tree_swap_operands_p (_q20, _q21))
21545 : 9044 : std::swap (_q20, _q21);
21546 : 134765 : switch (TREE_CODE (_q21))
21547 : : {
21548 : 2257 : case INTEGER_CST:
21549 : 2257 : {
21550 : 2257 : switch (TREE_CODE (_p1))
21551 : : {
21552 : 989 : case INTEGER_CST:
21553 : 989 : {
21554 : 989 : {
21555 : 989 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _p0, _q20, _q21, _p1 };
21556 : 989 : if (gimple_simplify_409 (res_op, seq, valueize, type, captures, BIT_IOR_EXPR, RSHIFT_EXPR))
21557 : 66 : return true;
21558 : : }
21559 : 923 : break;
21560 : : }
21561 : : default:;
21562 : : }
21563 : : break;
21564 : : }
21565 : : default:;
21566 : : }
21567 : 3788468 : break;
21568 : : }
21569 : 279 : case VEC_COND_EXPR:
21570 : 279 : {
21571 : 279 : tree _q20 = gimple_assign_rhs1 (_a1);
21572 : 279 : _q20 = do_valueize (valueize, _q20);
21573 : 279 : tree _q21 = gimple_assign_rhs2 (_a1);
21574 : 279 : _q21 = do_valueize (valueize, _q21);
21575 : 279 : tree _q22 = gimple_assign_rhs3 (_a1);
21576 : 279 : _q22 = do_valueize (valueize, _q22);
21577 : 279 : switch (TREE_CODE (_p1))
21578 : : {
21579 : 24 : case SSA_NAME:
21580 : 24 : if (gimple *_d2 = get_def (valueize, _p1))
21581 : : {
21582 : 24 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
21583 : 24 : switch (gimple_assign_rhs_code (_a2))
21584 : : {
21585 : 0 : case VEC_COND_EXPR:
21586 : 0 : {
21587 : 0 : tree _q60 = gimple_assign_rhs1 (_a2);
21588 : 0 : _q60 = do_valueize (valueize, _q60);
21589 : 0 : tree _q61 = gimple_assign_rhs2 (_a2);
21590 : 0 : _q61 = do_valueize (valueize, _q61);
21591 : 0 : tree _q62 = gimple_assign_rhs3 (_a2);
21592 : 0 : _q62 = do_valueize (valueize, _q62);
21593 : 0 : if ((_q60 == _q20 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _q20, 0) && types_match (_q60, _q20)))
21594 : : {
21595 : 0 : {
21596 : 0 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q22, _p1, _q61, _q62 };
21597 : 0 : if (VECTOR_TYPE_P (type)
21598 : 0 : && (TREE_CODE_CLASS (RSHIFT_EXPR) != tcc_comparison
21599 : : || types_match (type, TREE_TYPE (captures[2]))
21600 : : || expand_vec_cond_expr_p (type, TREE_TYPE (captures[1]))
21601 : : || (optimize_vectors_before_lowering_p ()
21602 : : && !expand_vec_cond_expr_p (TREE_TYPE (captures[2]), TREE_TYPE (captures[1]))))
21603 : : )
21604 : : {
21605 : 0 : gimple_seq *lseq = seq;
21606 : 0 : if (lseq
21607 : 0 : && (!single_use (captures[0])
21608 : 0 : || !single_use (captures[4])))
21609 : 0 : lseq = NULL;
21610 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2438;
21611 : 0 : {
21612 : 0 : res_op->set_op (VEC_COND_EXPR, type, 3);
21613 : 0 : res_op->ops[0] = captures[1];
21614 : 0 : {
21615 : 0 : tree _o1[2], _r1;
21616 : 0 : _o1[0] = captures[2];
21617 : 0 : _o1[1] = captures[5];
21618 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), RSHIFT_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
21619 : 0 : tem_op.resimplify (NULL, valueize);
21620 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
21621 : 0 : if (!_r1) goto next_after_fail2438;
21622 : 0 : res_op->ops[1] = _r1;
21623 : : }
21624 : 0 : {
21625 : 0 : tree _o1[2], _r1;
21626 : 0 : _o1[0] = captures[3];
21627 : 0 : _o1[1] = captures[6];
21628 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), RSHIFT_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
21629 : 0 : tem_op.resimplify (NULL, valueize);
21630 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
21631 : 0 : if (!_r1) goto next_after_fail2438;
21632 : 0 : res_op->ops[2] = _r1;
21633 : : }
21634 : 0 : res_op->resimplify (lseq, valueize);
21635 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1033, __FILE__, __LINE__, true);
21636 : 0 : return true;
21637 : : }
21638 : 0 : next_after_fail2438:;
21639 : : }
21640 : : }
21641 : : }
21642 : : break;
21643 : : }
21644 : : default:;
21645 : : }
21646 : : }
21647 : : break;
21648 : 279 : default:;
21649 : : }
21650 : 279 : {
21651 : 279 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q22, _p1 };
21652 : 279 : if (VECTOR_TYPE_P (type)
21653 : 279 : && (TREE_CODE_CLASS (RSHIFT_EXPR) != tcc_comparison
21654 : : || types_match (type, TREE_TYPE (captures[2]))
21655 : : || expand_vec_cond_expr_p (type, TREE_TYPE (captures[1]))
21656 : : || (optimize_vectors_before_lowering_p ()
21657 : : && !expand_vec_cond_expr_p (TREE_TYPE (captures[2]), TREE_TYPE (captures[1]))))
21658 : : )
21659 : : {
21660 : 279 : gimple_seq *lseq = seq;
21661 : 279 : if (lseq
21662 : 15 : && (!single_use (captures[0])))
21663 : 264 : lseq = NULL;
21664 : 279 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2439;
21665 : 279 : {
21666 : 279 : res_op->set_op (VEC_COND_EXPR, type, 3);
21667 : 279 : res_op->ops[0] = captures[1];
21668 : 279 : {
21669 : 279 : tree _o1[2], _r1;
21670 : 279 : _o1[0] = captures[2];
21671 : 279 : _o1[1] = captures[4];
21672 : 279 : gimple_match_op tem_op (res_op->cond.any_else (), RSHIFT_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
21673 : 279 : tem_op.resimplify (NULL, valueize);
21674 : 279 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
21675 : 279 : if (!_r1) goto next_after_fail2439;
21676 : 255 : res_op->ops[1] = _r1;
21677 : : }
21678 : 255 : {
21679 : 255 : tree _o1[2], _r1;
21680 : 255 : _o1[0] = captures[3];
21681 : 255 : _o1[1] = captures[4];
21682 : 255 : gimple_match_op tem_op (res_op->cond.any_else (), RSHIFT_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
21683 : 255 : tem_op.resimplify (NULL, valueize);
21684 : 255 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
21685 : 255 : if (!_r1) goto next_after_fail2439;
21686 : 246 : res_op->ops[2] = _r1;
21687 : : }
21688 : 246 : res_op->resimplify (lseq, valueize);
21689 : 246 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1034, __FILE__, __LINE__, true);
21690 : 246 : return true;
21691 : : }
21692 : 33 : next_after_fail2439:;
21693 : : }
21694 : : }
21695 : 33 : break;
21696 : : }
21697 : : default:;
21698 : : }
21699 : 642985 : else if (gcall *_c1 = dyn_cast <gcall *> (_d1))
21700 : 23482 : switch (gimple_call_combined_fn (_c1))
21701 : : {
21702 : 0 : case CFN_BUILT_IN_BSWAP128:
21703 : 0 : if (gimple_call_num_args (_c1) == 1)
21704 : : {
21705 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
21706 : 0 : _q20 = do_valueize (valueize, _q20);
21707 : 0 : switch (TREE_CODE (_p1))
21708 : : {
21709 : 0 : case INTEGER_CST:
21710 : 0 : {
21711 : 0 : {
21712 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
21713 : 0 : if (gimple_simplify_412 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_BSWAP128))
21714 : 0 : return true;
21715 : : }
21716 : 0 : break;
21717 : : }
21718 : : default:;
21719 : : }
21720 : : }
21721 : : break;
21722 : 0 : case CFN_BUILT_IN_BSWAP16:
21723 : 0 : if (gimple_call_num_args (_c1) == 1)
21724 : : {
21725 : 0 : tree _q20 = gimple_call_arg (_c1, 0);
21726 : 0 : _q20 = do_valueize (valueize, _q20);
21727 : 0 : switch (TREE_CODE (_p1))
21728 : : {
21729 : 0 : case INTEGER_CST:
21730 : 0 : {
21731 : 0 : {
21732 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
21733 : 0 : if (gimple_simplify_412 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_BSWAP16))
21734 : 0 : return true;
21735 : : }
21736 : 0 : break;
21737 : : }
21738 : : default:;
21739 : : }
21740 : : }
21741 : : break;
21742 : 79 : case CFN_BUILT_IN_BSWAP32:
21743 : 79 : if (gimple_call_num_args (_c1) == 1)
21744 : : {
21745 : 79 : tree _q20 = gimple_call_arg (_c1, 0);
21746 : 79 : _q20 = do_valueize (valueize, _q20);
21747 : 79 : switch (TREE_CODE (_p1))
21748 : : {
21749 : 64 : case INTEGER_CST:
21750 : 64 : {
21751 : 64 : {
21752 : 64 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
21753 : 64 : if (gimple_simplify_412 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_BSWAP32))
21754 : 0 : return true;
21755 : : }
21756 : 64 : break;
21757 : : }
21758 : : default:;
21759 : : }
21760 : : }
21761 : : break;
21762 : 15 : case CFN_BUILT_IN_BSWAP64:
21763 : 15 : if (gimple_call_num_args (_c1) == 1)
21764 : : {
21765 : 15 : tree _q20 = gimple_call_arg (_c1, 0);
21766 : 15 : _q20 = do_valueize (valueize, _q20);
21767 : 15 : switch (TREE_CODE (_p1))
21768 : : {
21769 : 0 : case INTEGER_CST:
21770 : 0 : {
21771 : 0 : {
21772 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _p1 };
21773 : 0 : if (gimple_simplify_412 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_BSWAP64))
21774 : 0 : return true;
21775 : : }
21776 : 0 : break;
21777 : : }
21778 : : default:;
21779 : : }
21780 : : }
21781 : : break;
21782 : : default:;
21783 : : }
21784 : : }
21785 : : break;
21786 : 3788468 : default:;
21787 : : }
21788 : 3788468 : if (integer_onep (_p0))
21789 : : {
21790 : 211 : {
21791 : 211 : tree captures[1] ATTRIBUTE_UNUSED = { _p1 };
21792 : 211 : if (INTEGRAL_TYPE_P (type)
21793 : : )
21794 : : {
21795 : 187 : gimple_seq *lseq = seq;
21796 : 187 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2440;
21797 : 187 : {
21798 : 187 : res_op->set_op (NOP_EXPR, type, 1);
21799 : 187 : {
21800 : 187 : tree _o1[2], _r1;
21801 : 187 : _o1[0] = captures[0];
21802 : 187 : _o1[1] = build_zero_cst (TREE_TYPE (captures[0]));
21803 : 187 : (*res_op).set_op (EQ_EXPR, boolean_type_node, 2);
21804 : 187 : (*res_op).ops[0] = _o1[0];
21805 : 187 : (*res_op).ops[1] = _o1[1];
21806 : 187 : (*res_op).resimplify (lseq, valueize);
21807 : : }
21808 : 187 : if (type != res_op->type
21809 : 187 : && !useless_type_conversion_p (type, res_op->type))
21810 : : {
21811 : 187 : if (!(res_op->ops[0] = maybe_push_res_to_seq (res_op, lseq))) goto next_after_fail2440;
21812 : 108 : res_op->set_op (NOP_EXPR, type, 1);
21813 : 108 : res_op->resimplify (lseq, valueize);
21814 : : }
21815 : 108 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1156, __FILE__, __LINE__, true);
21816 : 108 : return true;
21817 : : }
21818 : : next_after_fail2440:;
21819 : : }
21820 : : }
21821 : : }
21822 : 3788360 : switch (TREE_CODE (_p1))
21823 : : {
21824 : 316272 : case SSA_NAME:
21825 : 316272 : if (gimple *_d1 = get_def (valueize, _p1))
21826 : : {
21827 : 221806 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
21828 : 200810 : switch (gimple_assign_rhs_code (_a1))
21829 : : {
21830 : 159 : case VEC_COND_EXPR:
21831 : 159 : {
21832 : 159 : tree _q30 = gimple_assign_rhs1 (_a1);
21833 : 159 : _q30 = do_valueize (valueize, _q30);
21834 : 159 : tree _q31 = gimple_assign_rhs2 (_a1);
21835 : 159 : _q31 = do_valueize (valueize, _q31);
21836 : 159 : tree _q32 = gimple_assign_rhs3 (_a1);
21837 : 159 : _q32 = do_valueize (valueize, _q32);
21838 : 159 : {
21839 : 159 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _p1, _q30, _q31, _q32 };
21840 : 159 : if (VECTOR_TYPE_P (type)
21841 : 159 : && (TREE_CODE_CLASS (RSHIFT_EXPR) != tcc_comparison
21842 : : || types_match (type, TREE_TYPE (captures[3]))
21843 : : || expand_vec_cond_expr_p (type, TREE_TYPE (captures[2]))
21844 : : || (optimize_vectors_before_lowering_p ()
21845 : : && !expand_vec_cond_expr_p (TREE_TYPE (captures[3]), TREE_TYPE (captures[2]))))
21846 : : )
21847 : : {
21848 : 159 : gimple_seq *lseq = seq;
21849 : 159 : if (lseq
21850 : 69 : && (!single_use (captures[1])))
21851 : 90 : lseq = NULL;
21852 : 159 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2441;
21853 : 159 : {
21854 : 159 : res_op->set_op (VEC_COND_EXPR, type, 3);
21855 : 159 : res_op->ops[0] = captures[2];
21856 : 159 : {
21857 : 159 : tree _o1[2], _r1;
21858 : 159 : _o1[0] = captures[0];
21859 : 159 : _o1[1] = captures[3];
21860 : 159 : gimple_match_op tem_op (res_op->cond.any_else (), RSHIFT_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
21861 : 159 : tem_op.resimplify (NULL, valueize);
21862 : 159 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
21863 : 159 : if (!_r1) goto next_after_fail2441;
21864 : 0 : res_op->ops[1] = _r1;
21865 : : }
21866 : 0 : {
21867 : 0 : tree _o1[2], _r1;
21868 : 0 : _o1[0] = captures[0];
21869 : 0 : _o1[1] = captures[4];
21870 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), RSHIFT_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
21871 : 0 : tem_op.resimplify (NULL, valueize);
21872 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
21873 : 0 : if (!_r1) goto next_after_fail2441;
21874 : 0 : res_op->ops[2] = _r1;
21875 : : }
21876 : 0 : res_op->resimplify (lseq, valueize);
21877 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1035, __FILE__, __LINE__, true);
21878 : 0 : return true;
21879 : : }
21880 : 159 : next_after_fail2441:;
21881 : : }
21882 : : }
21883 : 159 : break;
21884 : : }
21885 : : default:;
21886 : : }
21887 : : }
21888 : : break;
21889 : 3788360 : default:;
21890 : : }
21891 : 3788360 : switch (TREE_CODE (_p0))
21892 : : {
21893 : 3661521 : case SSA_NAME:
21894 : 3661521 : if (gimple *_d1 = get_def (valueize, _p0))
21895 : : {
21896 : 2259483 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
21897 : 1949747 : switch (gimple_assign_rhs_code (_a1))
21898 : : {
21899 : 215079 : case MULT_EXPR:
21900 : 215079 : {
21901 : 215079 : tree _q20 = gimple_assign_rhs1 (_a1);
21902 : 215079 : _q20 = do_valueize (valueize, _q20);
21903 : 215079 : tree _q21 = gimple_assign_rhs2 (_a1);
21904 : 215079 : _q21 = do_valueize (valueize, _q21);
21905 : 215079 : if (tree_swap_operands_p (_q20, _q21))
21906 : 4995 : std::swap (_q20, _q21);
21907 : 215079 : switch (TREE_CODE (_q20))
21908 : : {
21909 : 215079 : case SSA_NAME:
21910 : 215079 : if (gimple *_d2 = get_def (valueize, _q20))
21911 : : {
21912 : 207822 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
21913 : 202248 : switch (gimple_assign_rhs_code (_a2))
21914 : : {
21915 : 59186 : case BIT_AND_EXPR:
21916 : 59186 : {
21917 : 59186 : tree _q30 = gimple_assign_rhs1 (_a2);
21918 : 59186 : _q30 = do_valueize (valueize, _q30);
21919 : 59186 : tree _q31 = gimple_assign_rhs2 (_a2);
21920 : 59186 : _q31 = do_valueize (valueize, _q31);
21921 : 59186 : if (tree_swap_operands_p (_q30, _q31))
21922 : 125 : std::swap (_q30, _q31);
21923 : 59186 : switch (TREE_CODE (_q30))
21924 : : {
21925 : 59186 : case SSA_NAME:
21926 : 59186 : if (gimple *_d3 = get_def (valueize, _q30))
21927 : : {
21928 : 58942 : if (gassign *_a3 = dyn_cast <gassign *> (_d3))
21929 : 84590 : switch (gimple_assign_rhs_code (_a3))
21930 : : {
21931 : 7301 : case PLUS_EXPR:
21932 : 7301 : {
21933 : 7301 : tree _q40 = gimple_assign_rhs1 (_a3);
21934 : 7301 : _q40 = do_valueize (valueize, _q40);
21935 : 7301 : tree _q41 = gimple_assign_rhs2 (_a3);
21936 : 7301 : _q41 = do_valueize (valueize, _q41);
21937 : 7301 : if (tree_swap_operands_p (_q40, _q41))
21938 : 425 : std::swap (_q40, _q41);
21939 : 7301 : switch (TREE_CODE (_q40))
21940 : : {
21941 : 7301 : case SSA_NAME:
21942 : 7301 : if (gimple *_d4 = get_def (valueize, _q40))
21943 : : {
21944 : 7293 : if (gassign *_a4 = dyn_cast <gassign *> (_d4))
21945 : 10602 : switch (gimple_assign_rhs_code (_a4))
21946 : : {
21947 : 1063 : case RSHIFT_EXPR:
21948 : 1063 : {
21949 : 1063 : tree _q50 = gimple_assign_rhs1 (_a4);
21950 : 1063 : _q50 = do_valueize (valueize, _q50);
21951 : 1063 : tree _q51 = gimple_assign_rhs2 (_a4);
21952 : 1063 : _q51 = do_valueize (valueize, _q51);
21953 : 1063 : switch (TREE_CODE (_q51))
21954 : : {
21955 : 1063 : case INTEGER_CST:
21956 : 1063 : {
21957 : 1063 : if ((_q41 == _q50 && ! TREE_SIDE_EFFECTS (_q41)) || (operand_equal_p (_q41, _q50, 0) && types_match (_q41, _q50)))
21958 : : {
21959 : 259 : switch (TREE_CODE (_q41))
21960 : : {
21961 : 259 : case SSA_NAME:
21962 : 259 : if (gimple *_d5 = get_def (valueize, _q41))
21963 : : {
21964 : 216 : if (gassign *_a5 = dyn_cast <gassign *> (_d5))
21965 : 220 : switch (gimple_assign_rhs_code (_a5))
21966 : : {
21967 : 212 : case PLUS_EXPR:
21968 : 212 : {
21969 : 212 : tree _q90 = gimple_assign_rhs1 (_a5);
21970 : 212 : _q90 = do_valueize (valueize, _q90);
21971 : 212 : tree _q91 = gimple_assign_rhs2 (_a5);
21972 : 212 : _q91 = do_valueize (valueize, _q91);
21973 : 212 : if (tree_swap_operands_p (_q90, _q91))
21974 : 14 : std::swap (_q90, _q91);
21975 : 212 : switch (TREE_CODE (_q90))
21976 : : {
21977 : 212 : case SSA_NAME:
21978 : 212 : if (gimple *_d6 = get_def (valueize, _q90))
21979 : : {
21980 : 212 : if (gassign *_a6 = dyn_cast <gassign *> (_d6))
21981 : 212 : switch (gimple_assign_rhs_code (_a6))
21982 : : {
21983 : 212 : case BIT_AND_EXPR:
21984 : 212 : {
21985 : 212 : tree _q100 = gimple_assign_rhs1 (_a6);
21986 : 212 : _q100 = do_valueize (valueize, _q100);
21987 : 212 : tree _q101 = gimple_assign_rhs2 (_a6);
21988 : 212 : _q101 = do_valueize (valueize, _q101);
21989 : 212 : if (tree_swap_operands_p (_q100, _q101))
21990 : 0 : std::swap (_q100, _q101);
21991 : 212 : switch (TREE_CODE (_q101))
21992 : : {
21993 : 212 : case INTEGER_CST:
21994 : 212 : {
21995 : 212 : switch (TREE_CODE (_q91))
21996 : : {
21997 : 212 : case SSA_NAME:
21998 : 212 : if (gimple *_d7 = get_def (valueize, _q91))
21999 : : {
22000 : 212 : if (gassign *_a7 = dyn_cast <gassign *> (_d7))
22001 : 212 : switch (gimple_assign_rhs_code (_a7))
22002 : : {
22003 : 212 : case BIT_AND_EXPR:
22004 : 212 : {
22005 : 212 : tree _q130 = gimple_assign_rhs1 (_a7);
22006 : 212 : _q130 = do_valueize (valueize, _q130);
22007 : 212 : tree _q131 = gimple_assign_rhs2 (_a7);
22008 : 212 : _q131 = do_valueize (valueize, _q131);
22009 : 212 : if (tree_swap_operands_p (_q130, _q131))
22010 : 0 : std::swap (_q130, _q131);
22011 : 212 : switch (TREE_CODE (_q130))
22012 : : {
22013 : 212 : case SSA_NAME:
22014 : 212 : if (gimple *_d8 = get_def (valueize, _q130))
22015 : : {
22016 : 212 : if (gassign *_a8 = dyn_cast <gassign *> (_d8))
22017 : 212 : switch (gimple_assign_rhs_code (_a8))
22018 : : {
22019 : 212 : case RSHIFT_EXPR:
22020 : 212 : {
22021 : 212 : tree _q140 = gimple_assign_rhs1 (_a8);
22022 : 212 : _q140 = do_valueize (valueize, _q140);
22023 : 212 : tree _q141 = gimple_assign_rhs2 (_a8);
22024 : 212 : _q141 = do_valueize (valueize, _q141);
22025 : 212 : if ((_q140 == _q100 && ! TREE_SIDE_EFFECTS (_q140)) || (operand_equal_p (_q140, _q100, 0) && types_match (_q140, _q100)))
22026 : : {
22027 : 212 : switch (TREE_CODE (_q140))
22028 : : {
22029 : 212 : case SSA_NAME:
22030 : 212 : if (gimple *_d9 = get_def (valueize, _q140))
22031 : : {
22032 : 212 : if (gassign *_a9 = dyn_cast <gassign *> (_d9))
22033 : 172 : switch (gimple_assign_rhs_code (_a9))
22034 : : {
22035 : 172 : case MINUS_EXPR:
22036 : 172 : {
22037 : 172 : tree _q160 = gimple_assign_rhs1 (_a9);
22038 : 172 : _q160 = do_valueize (valueize, _q160);
22039 : 172 : tree _q161 = gimple_assign_rhs2 (_a9);
22040 : 172 : _q161 = do_valueize (valueize, _q161);
22041 : 172 : switch (TREE_CODE (_q161))
22042 : : {
22043 : 172 : case SSA_NAME:
22044 : 172 : if (gimple *_d10 = get_def (valueize, _q161))
22045 : : {
22046 : 172 : if (gassign *_a10 = dyn_cast <gassign *> (_d10))
22047 : 172 : switch (gimple_assign_rhs_code (_a10))
22048 : : {
22049 : 172 : case BIT_AND_EXPR:
22050 : 172 : {
22051 : 172 : tree _q180 = gimple_assign_rhs1 (_a10);
22052 : 172 : _q180 = do_valueize (valueize, _q180);
22053 : 172 : tree _q181 = gimple_assign_rhs2 (_a10);
22054 : 172 : _q181 = do_valueize (valueize, _q181);
22055 : 172 : if (tree_swap_operands_p (_q180, _q181))
22056 : 0 : std::swap (_q180, _q181);
22057 : 172 : switch (TREE_CODE (_q180))
22058 : : {
22059 : 172 : case SSA_NAME:
22060 : 172 : if (gimple *_d11 = get_def (valueize, _q180))
22061 : : {
22062 : 172 : if (gassign *_a11 = dyn_cast <gassign *> (_d11))
22063 : 172 : switch (gimple_assign_rhs_code (_a11))
22064 : : {
22065 : 172 : case RSHIFT_EXPR:
22066 : 172 : {
22067 : 172 : tree _q190 = gimple_assign_rhs1 (_a11);
22068 : 172 : _q190 = do_valueize (valueize, _q190);
22069 : 172 : tree _q191 = gimple_assign_rhs2 (_a11);
22070 : 172 : _q191 = do_valueize (valueize, _q191);
22071 : 172 : if ((_q190 == _q160 && ! TREE_SIDE_EFFECTS (_q190)) || (operand_equal_p (_q190, _q160, 0) && types_match (_q190, _q160)))
22072 : : {
22073 : 172 : switch (TREE_CODE (_q191))
22074 : : {
22075 : 172 : case INTEGER_CST:
22076 : 172 : {
22077 : 172 : switch (TREE_CODE (_q181))
22078 : : {
22079 : 172 : case INTEGER_CST:
22080 : 172 : {
22081 : 172 : switch (TREE_CODE (_q141))
22082 : : {
22083 : 172 : case INTEGER_CST:
22084 : 172 : {
22085 : 172 : switch (TREE_CODE (_q131))
22086 : : {
22087 : 172 : case INTEGER_CST:
22088 : 172 : {
22089 : 172 : switch (TREE_CODE (_q31))
22090 : : {
22091 : 172 : case INTEGER_CST:
22092 : 172 : {
22093 : 172 : switch (TREE_CODE (_q21))
22094 : : {
22095 : 172 : case INTEGER_CST:
22096 : 172 : {
22097 : 172 : switch (TREE_CODE (_p1))
22098 : : {
22099 : 172 : case INTEGER_CST:
22100 : 172 : {
22101 : 172 : {
22102 : 172 : tree captures[12] ATTRIBUTE_UNUSED = { _q50, _q51, _q100, _q101, _q160, _q191, _q181, _q141, _q131, _q31, _q21, _p1 };
22103 : 172 : if (gimple_simplify_413 (res_op, seq, valueize, type, captures))
22104 : 0 : return true;
22105 : : }
22106 : 172 : break;
22107 : : }
22108 : : default:;
22109 : : }
22110 : : break;
22111 : : }
22112 : : default:;
22113 : : }
22114 : : break;
22115 : : }
22116 : : default:;
22117 : : }
22118 : : break;
22119 : : }
22120 : : default:;
22121 : : }
22122 : : break;
22123 : : }
22124 : : default:;
22125 : : }
22126 : : break;
22127 : : }
22128 : : default:;
22129 : : }
22130 : : break;
22131 : : }
22132 : : default:;
22133 : : }
22134 : : }
22135 : : break;
22136 : : }
22137 : : default:;
22138 : : }
22139 : : }
22140 : : break;
22141 : : default:;
22142 : : }
22143 : 212 : break;
22144 : : }
22145 : : default:;
22146 : : }
22147 : : }
22148 : : break;
22149 : : default:;
22150 : : }
22151 : : break;
22152 : : }
22153 : : default:;
22154 : : }
22155 : : }
22156 : : break;
22157 : : default:;
22158 : : }
22159 : : }
22160 : : break;
22161 : : }
22162 : : default:;
22163 : : }
22164 : : }
22165 : : break;
22166 : : default:;
22167 : : }
22168 : 212 : break;
22169 : : }
22170 : : default:;
22171 : : }
22172 : : }
22173 : : break;
22174 : : default:;
22175 : : }
22176 : : break;
22177 : : }
22178 : 212 : default:;
22179 : : }
22180 : 212 : switch (TREE_CODE (_q100))
22181 : : {
22182 : 212 : case SSA_NAME:
22183 : 212 : if (gimple *_d7 = get_def (valueize, _q100))
22184 : : {
22185 : 212 : if (gassign *_a7 = dyn_cast <gassign *> (_d7))
22186 : 172 : switch (gimple_assign_rhs_code (_a7))
22187 : : {
22188 : 0 : case RSHIFT_EXPR:
22189 : 0 : {
22190 : 0 : tree _q110 = gimple_assign_rhs1 (_a7);
22191 : 0 : _q110 = do_valueize (valueize, _q110);
22192 : 0 : tree _q111 = gimple_assign_rhs2 (_a7);
22193 : 0 : _q111 = do_valueize (valueize, _q111);
22194 : 0 : switch (TREE_CODE (_q110))
22195 : : {
22196 : 0 : case SSA_NAME:
22197 : 0 : if (gimple *_d8 = get_def (valueize, _q110))
22198 : : {
22199 : 0 : if (gassign *_a8 = dyn_cast <gassign *> (_d8))
22200 : 0 : switch (gimple_assign_rhs_code (_a8))
22201 : : {
22202 : 0 : case MINUS_EXPR:
22203 : 0 : {
22204 : 0 : tree _q120 = gimple_assign_rhs1 (_a8);
22205 : 0 : _q120 = do_valueize (valueize, _q120);
22206 : 0 : tree _q121 = gimple_assign_rhs2 (_a8);
22207 : 0 : _q121 = do_valueize (valueize, _q121);
22208 : 0 : switch (TREE_CODE (_q121))
22209 : : {
22210 : 0 : case SSA_NAME:
22211 : 0 : if (gimple *_d9 = get_def (valueize, _q121))
22212 : : {
22213 : 0 : if (gassign *_a9 = dyn_cast <gassign *> (_d9))
22214 : 0 : switch (gimple_assign_rhs_code (_a9))
22215 : : {
22216 : 0 : case BIT_AND_EXPR:
22217 : 0 : {
22218 : 0 : tree _q140 = gimple_assign_rhs1 (_a9);
22219 : 0 : _q140 = do_valueize (valueize, _q140);
22220 : 0 : tree _q141 = gimple_assign_rhs2 (_a9);
22221 : 0 : _q141 = do_valueize (valueize, _q141);
22222 : 0 : if (tree_swap_operands_p (_q140, _q141))
22223 : 0 : std::swap (_q140, _q141);
22224 : 0 : switch (TREE_CODE (_q140))
22225 : : {
22226 : 0 : case SSA_NAME:
22227 : 0 : if (gimple *_d10 = get_def (valueize, _q140))
22228 : : {
22229 : 0 : if (gassign *_a10 = dyn_cast <gassign *> (_d10))
22230 : 0 : switch (gimple_assign_rhs_code (_a10))
22231 : : {
22232 : 0 : case RSHIFT_EXPR:
22233 : 0 : {
22234 : 0 : tree _q150 = gimple_assign_rhs1 (_a10);
22235 : 0 : _q150 = do_valueize (valueize, _q150);
22236 : 0 : tree _q151 = gimple_assign_rhs2 (_a10);
22237 : 0 : _q151 = do_valueize (valueize, _q151);
22238 : 0 : if ((_q150 == _q120 && ! TREE_SIDE_EFFECTS (_q150)) || (operand_equal_p (_q150, _q120, 0) && types_match (_q150, _q120)))
22239 : : {
22240 : 0 : switch (TREE_CODE (_q151))
22241 : : {
22242 : 0 : case INTEGER_CST:
22243 : 0 : {
22244 : 0 : switch (TREE_CODE (_q141))
22245 : : {
22246 : 0 : case INTEGER_CST:
22247 : 0 : {
22248 : 0 : switch (TREE_CODE (_q111))
22249 : : {
22250 : 0 : case INTEGER_CST:
22251 : 0 : {
22252 : 0 : switch (TREE_CODE (_q101))
22253 : : {
22254 : 0 : case INTEGER_CST:
22255 : 0 : {
22256 : 0 : switch (TREE_CODE (_q91))
22257 : : {
22258 : 0 : case SSA_NAME:
22259 : 0 : if (gimple *_d11 = get_def (valueize, _q91))
22260 : : {
22261 : 0 : if (gassign *_a11 = dyn_cast <gassign *> (_d11))
22262 : 0 : switch (gimple_assign_rhs_code (_a11))
22263 : : {
22264 : 0 : case BIT_AND_EXPR:
22265 : 0 : {
22266 : 0 : tree _q210 = gimple_assign_rhs1 (_a11);
22267 : 0 : _q210 = do_valueize (valueize, _q210);
22268 : 0 : tree _q211 = gimple_assign_rhs2 (_a11);
22269 : 0 : _q211 = do_valueize (valueize, _q211);
22270 : 0 : if (tree_swap_operands_p (_q210, _q211))
22271 : 0 : std::swap (_q210, _q211);
22272 : 0 : if ((_q210 == _q110 && ! TREE_SIDE_EFFECTS (_q210)) || (operand_equal_p (_q210, _q110, 0) && types_match (_q210, _q110)))
22273 : : {
22274 : 0 : switch (TREE_CODE (_q211))
22275 : : {
22276 : 0 : case INTEGER_CST:
22277 : 0 : {
22278 : 0 : switch (TREE_CODE (_q31))
22279 : : {
22280 : 0 : case INTEGER_CST:
22281 : 0 : {
22282 : 0 : switch (TREE_CODE (_q21))
22283 : : {
22284 : 0 : case INTEGER_CST:
22285 : 0 : {
22286 : 0 : switch (TREE_CODE (_p1))
22287 : : {
22288 : 0 : case INTEGER_CST:
22289 : 0 : {
22290 : 0 : {
22291 : 0 : tree captures[12] ATTRIBUTE_UNUSED = { _q50, _q51, _q110, _q211, _q120, _q151, _q141, _q111, _q101, _q31, _q21, _p1 };
22292 : 0 : if (gimple_simplify_413 (res_op, seq, valueize, type, captures))
22293 : 0 : return true;
22294 : : }
22295 : 0 : break;
22296 : : }
22297 : : default:;
22298 : : }
22299 : : break;
22300 : : }
22301 : : default:;
22302 : : }
22303 : : break;
22304 : : }
22305 : : default:;
22306 : : }
22307 : : break;
22308 : : }
22309 : : default:;
22310 : : }
22311 : : }
22312 : 3824780 : break;
22313 : : }
22314 : : default:;
22315 : : }
22316 : : }
22317 : : break;
22318 : : default:;
22319 : : }
22320 : : break;
22321 : : }
22322 : : default:;
22323 : : }
22324 : : break;
22325 : : }
22326 : : default:;
22327 : : }
22328 : : break;
22329 : : }
22330 : : default:;
22331 : : }
22332 : : break;
22333 : : }
22334 : : default:;
22335 : : }
22336 : : }
22337 : : break;
22338 : : }
22339 : : default:;
22340 : : }
22341 : : }
22342 : : break;
22343 : : default:;
22344 : : }
22345 : 3824780 : break;
22346 : : }
22347 : : default:;
22348 : : }
22349 : : }
22350 : : break;
22351 : : default:;
22352 : : }
22353 : : break;
22354 : : }
22355 : : default:;
22356 : : }
22357 : : }
22358 : : break;
22359 : : default:;
22360 : : }
22361 : : break;
22362 : : }
22363 : : default:;
22364 : : }
22365 : : }
22366 : : break;
22367 : : default:;
22368 : : }
22369 : 3824780 : break;
22370 : : }
22371 : : default:;
22372 : : }
22373 : : }
22374 : : break;
22375 : : default:;
22376 : : }
22377 : 3824780 : break;
22378 : : }
22379 : : default:;
22380 : : }
22381 : : }
22382 : : break;
22383 : : default:;
22384 : : }
22385 : : }
22386 : : break;
22387 : : }
22388 : : default:;
22389 : : }
22390 : : break;
22391 : : }
22392 : 1650 : case PLUS_EXPR:
22393 : 1650 : {
22394 : 1650 : tree _q50 = gimple_assign_rhs1 (_a4);
22395 : 1650 : _q50 = do_valueize (valueize, _q50);
22396 : 1650 : tree _q51 = gimple_assign_rhs2 (_a4);
22397 : 1650 : _q51 = do_valueize (valueize, _q51);
22398 : 1650 : if (tree_swap_operands_p (_q50, _q51))
22399 : 30 : std::swap (_q50, _q51);
22400 : 1650 : switch (TREE_CODE (_q50))
22401 : : {
22402 : 1650 : case SSA_NAME:
22403 : 1650 : if (gimple *_d5 = get_def (valueize, _q50))
22404 : : {
22405 : 1650 : if (gassign *_a5 = dyn_cast <gassign *> (_d5))
22406 : 1674 : switch (gimple_assign_rhs_code (_a5))
22407 : : {
22408 : 0 : case BIT_AND_EXPR:
22409 : 0 : {
22410 : 0 : tree _q60 = gimple_assign_rhs1 (_a5);
22411 : 0 : _q60 = do_valueize (valueize, _q60);
22412 : 0 : tree _q61 = gimple_assign_rhs2 (_a5);
22413 : 0 : _q61 = do_valueize (valueize, _q61);
22414 : 0 : if (tree_swap_operands_p (_q60, _q61))
22415 : 0 : std::swap (_q60, _q61);
22416 : 0 : switch (TREE_CODE (_q61))
22417 : : {
22418 : 0 : case INTEGER_CST:
22419 : 0 : {
22420 : 0 : switch (TREE_CODE (_q51))
22421 : : {
22422 : 0 : case SSA_NAME:
22423 : 0 : if (gimple *_d6 = get_def (valueize, _q51))
22424 : : {
22425 : 0 : if (gassign *_a6 = dyn_cast <gassign *> (_d6))
22426 : 0 : switch (gimple_assign_rhs_code (_a6))
22427 : : {
22428 : 0 : case BIT_AND_EXPR:
22429 : 0 : {
22430 : 0 : tree _q90 = gimple_assign_rhs1 (_a6);
22431 : 0 : _q90 = do_valueize (valueize, _q90);
22432 : 0 : tree _q91 = gimple_assign_rhs2 (_a6);
22433 : 0 : _q91 = do_valueize (valueize, _q91);
22434 : 0 : if (tree_swap_operands_p (_q90, _q91))
22435 : 0 : std::swap (_q90, _q91);
22436 : 0 : switch (TREE_CODE (_q90))
22437 : : {
22438 : 0 : case SSA_NAME:
22439 : 0 : if (gimple *_d7 = get_def (valueize, _q90))
22440 : : {
22441 : 0 : if (gassign *_a7 = dyn_cast <gassign *> (_d7))
22442 : 0 : switch (gimple_assign_rhs_code (_a7))
22443 : : {
22444 : 0 : case RSHIFT_EXPR:
22445 : 0 : {
22446 : 0 : tree _q100 = gimple_assign_rhs1 (_a7);
22447 : 0 : _q100 = do_valueize (valueize, _q100);
22448 : 0 : tree _q101 = gimple_assign_rhs2 (_a7);
22449 : 0 : _q101 = do_valueize (valueize, _q101);
22450 : 0 : if ((_q100 == _q60 && ! TREE_SIDE_EFFECTS (_q100)) || (operand_equal_p (_q100, _q60, 0) && types_match (_q100, _q60)))
22451 : : {
22452 : 0 : switch (TREE_CODE (_q100))
22453 : : {
22454 : 0 : case SSA_NAME:
22455 : 0 : if (gimple *_d8 = get_def (valueize, _q100))
22456 : : {
22457 : 0 : if (gassign *_a8 = dyn_cast <gassign *> (_d8))
22458 : 0 : switch (gimple_assign_rhs_code (_a8))
22459 : : {
22460 : 0 : case MINUS_EXPR:
22461 : 0 : {
22462 : 0 : tree _q120 = gimple_assign_rhs1 (_a8);
22463 : 0 : _q120 = do_valueize (valueize, _q120);
22464 : 0 : tree _q121 = gimple_assign_rhs2 (_a8);
22465 : 0 : _q121 = do_valueize (valueize, _q121);
22466 : 0 : switch (TREE_CODE (_q121))
22467 : : {
22468 : 0 : case SSA_NAME:
22469 : 0 : if (gimple *_d9 = get_def (valueize, _q121))
22470 : : {
22471 : 0 : if (gassign *_a9 = dyn_cast <gassign *> (_d9))
22472 : 0 : switch (gimple_assign_rhs_code (_a9))
22473 : : {
22474 : 0 : case BIT_AND_EXPR:
22475 : 0 : {
22476 : 0 : tree _q140 = gimple_assign_rhs1 (_a9);
22477 : 0 : _q140 = do_valueize (valueize, _q140);
22478 : 0 : tree _q141 = gimple_assign_rhs2 (_a9);
22479 : 0 : _q141 = do_valueize (valueize, _q141);
22480 : 0 : if (tree_swap_operands_p (_q140, _q141))
22481 : 0 : std::swap (_q140, _q141);
22482 : 0 : switch (TREE_CODE (_q140))
22483 : : {
22484 : 0 : case SSA_NAME:
22485 : 0 : if (gimple *_d10 = get_def (valueize, _q140))
22486 : : {
22487 : 0 : if (gassign *_a10 = dyn_cast <gassign *> (_d10))
22488 : 0 : switch (gimple_assign_rhs_code (_a10))
22489 : : {
22490 : 0 : case RSHIFT_EXPR:
22491 : 0 : {
22492 : 0 : tree _q150 = gimple_assign_rhs1 (_a10);
22493 : 0 : _q150 = do_valueize (valueize, _q150);
22494 : 0 : tree _q151 = gimple_assign_rhs2 (_a10);
22495 : 0 : _q151 = do_valueize (valueize, _q151);
22496 : 0 : if ((_q150 == _q120 && ! TREE_SIDE_EFFECTS (_q150)) || (operand_equal_p (_q150, _q120, 0) && types_match (_q150, _q120)))
22497 : : {
22498 : 0 : switch (TREE_CODE (_q151))
22499 : : {
22500 : 0 : case INTEGER_CST:
22501 : 0 : {
22502 : 0 : switch (TREE_CODE (_q141))
22503 : : {
22504 : 0 : case INTEGER_CST:
22505 : 0 : {
22506 : 0 : switch (TREE_CODE (_q101))
22507 : : {
22508 : 0 : case INTEGER_CST:
22509 : 0 : {
22510 : 0 : switch (TREE_CODE (_q91))
22511 : : {
22512 : 0 : case INTEGER_CST:
22513 : 0 : {
22514 : 0 : switch (TREE_CODE (_q41))
22515 : : {
22516 : 0 : case SSA_NAME:
22517 : 0 : if (gimple *_d11 = get_def (valueize, _q41))
22518 : : {
22519 : 0 : if (gassign *_a11 = dyn_cast <gassign *> (_d11))
22520 : 0 : switch (gimple_assign_rhs_code (_a11))
22521 : : {
22522 : 0 : case RSHIFT_EXPR:
22523 : 0 : {
22524 : 0 : tree _q210 = gimple_assign_rhs1 (_a11);
22525 : 0 : _q210 = do_valueize (valueize, _q210);
22526 : 0 : tree _q211 = gimple_assign_rhs2 (_a11);
22527 : 0 : _q211 = do_valueize (valueize, _q211);
22528 : 0 : if ((_q210 == _q40 && ! TREE_SIDE_EFFECTS (_q210)) || (operand_equal_p (_q210, _q40, 0) && types_match (_q210, _q40)))
22529 : : {
22530 : 0 : switch (TREE_CODE (_q211))
22531 : : {
22532 : 0 : case INTEGER_CST:
22533 : 0 : {
22534 : 0 : switch (TREE_CODE (_q31))
22535 : : {
22536 : 0 : case INTEGER_CST:
22537 : 0 : {
22538 : 0 : switch (TREE_CODE (_q21))
22539 : : {
22540 : 0 : case INTEGER_CST:
22541 : 0 : {
22542 : 0 : switch (TREE_CODE (_p1))
22543 : : {
22544 : 0 : case INTEGER_CST:
22545 : 0 : {
22546 : 0 : {
22547 : 0 : tree captures[12] ATTRIBUTE_UNUSED = { _q40, _q211, _q60, _q61, _q120, _q151, _q141, _q101, _q91, _q31, _q21, _p1 };
22548 : 0 : if (gimple_simplify_413 (res_op, seq, valueize, type, captures))
22549 : 0 : return true;
22550 : : }
22551 : 0 : break;
22552 : : }
22553 : : default:;
22554 : : }
22555 : : break;
22556 : : }
22557 : : default:;
22558 : : }
22559 : : break;
22560 : : }
22561 : : default:;
22562 : : }
22563 : : break;
22564 : : }
22565 : : default:;
22566 : : }
22567 : : }
22568 : : break;
22569 : : }
22570 : : default:;
22571 : : }
22572 : : }
22573 : : break;
22574 : : default:;
22575 : : }
22576 : : break;
22577 : : }
22578 : : default:;
22579 : : }
22580 : : break;
22581 : : }
22582 : : default:;
22583 : : }
22584 : : break;
22585 : : }
22586 : : default:;
22587 : : }
22588 : : break;
22589 : : }
22590 : : default:;
22591 : : }
22592 : : }
22593 : : break;
22594 : : }
22595 : : default:;
22596 : : }
22597 : : }
22598 : : break;
22599 : : default:;
22600 : : }
22601 : 0 : break;
22602 : : }
22603 : : default:;
22604 : : }
22605 : : }
22606 : : break;
22607 : : default:;
22608 : : }
22609 : : break;
22610 : : }
22611 : : default:;
22612 : : }
22613 : : }
22614 : : break;
22615 : : default:;
22616 : : }
22617 : : }
22618 : : break;
22619 : : }
22620 : : default:;
22621 : : }
22622 : : }
22623 : : break;
22624 : : default:;
22625 : : }
22626 : 0 : break;
22627 : : }
22628 : : default:;
22629 : : }
22630 : : }
22631 : : break;
22632 : : default:;
22633 : : }
22634 : : break;
22635 : : }
22636 : 0 : default:;
22637 : : }
22638 : 0 : switch (TREE_CODE (_q60))
22639 : : {
22640 : 0 : case SSA_NAME:
22641 : 0 : if (gimple *_d6 = get_def (valueize, _q60))
22642 : : {
22643 : 0 : if (gassign *_a6 = dyn_cast <gassign *> (_d6))
22644 : 0 : switch (gimple_assign_rhs_code (_a6))
22645 : : {
22646 : 0 : case RSHIFT_EXPR:
22647 : 0 : {
22648 : 0 : tree _q70 = gimple_assign_rhs1 (_a6);
22649 : 0 : _q70 = do_valueize (valueize, _q70);
22650 : 0 : tree _q71 = gimple_assign_rhs2 (_a6);
22651 : 0 : _q71 = do_valueize (valueize, _q71);
22652 : 0 : switch (TREE_CODE (_q70))
22653 : : {
22654 : 0 : case SSA_NAME:
22655 : 0 : if (gimple *_d7 = get_def (valueize, _q70))
22656 : : {
22657 : 0 : if (gassign *_a7 = dyn_cast <gassign *> (_d7))
22658 : 0 : switch (gimple_assign_rhs_code (_a7))
22659 : : {
22660 : 0 : case MINUS_EXPR:
22661 : 0 : {
22662 : 0 : tree _q80 = gimple_assign_rhs1 (_a7);
22663 : 0 : _q80 = do_valueize (valueize, _q80);
22664 : 0 : tree _q81 = gimple_assign_rhs2 (_a7);
22665 : 0 : _q81 = do_valueize (valueize, _q81);
22666 : 0 : switch (TREE_CODE (_q81))
22667 : : {
22668 : 0 : case SSA_NAME:
22669 : 0 : if (gimple *_d8 = get_def (valueize, _q81))
22670 : : {
22671 : 0 : if (gassign *_a8 = dyn_cast <gassign *> (_d8))
22672 : 0 : switch (gimple_assign_rhs_code (_a8))
22673 : : {
22674 : 0 : case BIT_AND_EXPR:
22675 : 0 : {
22676 : 0 : tree _q100 = gimple_assign_rhs1 (_a8);
22677 : 0 : _q100 = do_valueize (valueize, _q100);
22678 : 0 : tree _q101 = gimple_assign_rhs2 (_a8);
22679 : 0 : _q101 = do_valueize (valueize, _q101);
22680 : 0 : if (tree_swap_operands_p (_q100, _q101))
22681 : 0 : std::swap (_q100, _q101);
22682 : 0 : switch (TREE_CODE (_q100))
22683 : : {
22684 : 0 : case SSA_NAME:
22685 : 0 : if (gimple *_d9 = get_def (valueize, _q100))
22686 : : {
22687 : 0 : if (gassign *_a9 = dyn_cast <gassign *> (_d9))
22688 : 0 : switch (gimple_assign_rhs_code (_a9))
22689 : : {
22690 : 0 : case RSHIFT_EXPR:
22691 : 0 : {
22692 : 0 : tree _q110 = gimple_assign_rhs1 (_a9);
22693 : 0 : _q110 = do_valueize (valueize, _q110);
22694 : 0 : tree _q111 = gimple_assign_rhs2 (_a9);
22695 : 0 : _q111 = do_valueize (valueize, _q111);
22696 : 0 : if ((_q110 == _q80 && ! TREE_SIDE_EFFECTS (_q110)) || (operand_equal_p (_q110, _q80, 0) && types_match (_q110, _q80)))
22697 : : {
22698 : 0 : switch (TREE_CODE (_q111))
22699 : : {
22700 : 0 : case INTEGER_CST:
22701 : 0 : {
22702 : 0 : switch (TREE_CODE (_q101))
22703 : : {
22704 : 0 : case INTEGER_CST:
22705 : 0 : {
22706 : 0 : switch (TREE_CODE (_q71))
22707 : : {
22708 : 0 : case INTEGER_CST:
22709 : 0 : {
22710 : 0 : switch (TREE_CODE (_q61))
22711 : : {
22712 : 0 : case INTEGER_CST:
22713 : 0 : {
22714 : 0 : switch (TREE_CODE (_q51))
22715 : : {
22716 : 0 : case SSA_NAME:
22717 : 0 : if (gimple *_d10 = get_def (valueize, _q51))
22718 : : {
22719 : 0 : if (gassign *_a10 = dyn_cast <gassign *> (_d10))
22720 : 0 : switch (gimple_assign_rhs_code (_a10))
22721 : : {
22722 : 0 : case BIT_AND_EXPR:
22723 : 0 : {
22724 : 0 : tree _q170 = gimple_assign_rhs1 (_a10);
22725 : 0 : _q170 = do_valueize (valueize, _q170);
22726 : 0 : tree _q171 = gimple_assign_rhs2 (_a10);
22727 : 0 : _q171 = do_valueize (valueize, _q171);
22728 : 0 : if (tree_swap_operands_p (_q170, _q171))
22729 : 0 : std::swap (_q170, _q171);
22730 : 0 : if ((_q170 == _q70 && ! TREE_SIDE_EFFECTS (_q170)) || (operand_equal_p (_q170, _q70, 0) && types_match (_q170, _q70)))
22731 : : {
22732 : 0 : switch (TREE_CODE (_q171))
22733 : : {
22734 : 0 : case INTEGER_CST:
22735 : 0 : {
22736 : 0 : switch (TREE_CODE (_q41))
22737 : : {
22738 : 0 : case SSA_NAME:
22739 : 0 : if (gimple *_d11 = get_def (valueize, _q41))
22740 : : {
22741 : 0 : if (gassign *_a11 = dyn_cast <gassign *> (_d11))
22742 : 0 : switch (gimple_assign_rhs_code (_a11))
22743 : : {
22744 : 0 : case RSHIFT_EXPR:
22745 : 0 : {
22746 : 0 : tree _q200 = gimple_assign_rhs1 (_a11);
22747 : 0 : _q200 = do_valueize (valueize, _q200);
22748 : 0 : tree _q201 = gimple_assign_rhs2 (_a11);
22749 : 0 : _q201 = do_valueize (valueize, _q201);
22750 : 0 : if ((_q200 == _q40 && ! TREE_SIDE_EFFECTS (_q200)) || (operand_equal_p (_q200, _q40, 0) && types_match (_q200, _q40)))
22751 : : {
22752 : 0 : switch (TREE_CODE (_q201))
22753 : : {
22754 : 0 : case INTEGER_CST:
22755 : 0 : {
22756 : 0 : switch (TREE_CODE (_q31))
22757 : : {
22758 : 0 : case INTEGER_CST:
22759 : 0 : {
22760 : 0 : switch (TREE_CODE (_q21))
22761 : : {
22762 : 0 : case INTEGER_CST:
22763 : 0 : {
22764 : 0 : switch (TREE_CODE (_p1))
22765 : : {
22766 : 0 : case INTEGER_CST:
22767 : 0 : {
22768 : 0 : {
22769 : 0 : tree captures[12] ATTRIBUTE_UNUSED = { _q40, _q201, _q70, _q171, _q80, _q111, _q101, _q71, _q61, _q31, _q21, _p1 };
22770 : 0 : if (gimple_simplify_413 (res_op, seq, valueize, type, captures))
22771 : 0 : return true;
22772 : : }
22773 : 0 : break;
22774 : : }
22775 : : default:;
22776 : : }
22777 : : break;
22778 : : }
22779 : : default:;
22780 : : }
22781 : : break;
22782 : : }
22783 : : default:;
22784 : : }
22785 : : break;
22786 : : }
22787 : : default:;
22788 : : }
22789 : : }
22790 : : break;
22791 : : }
22792 : : default:;
22793 : : }
22794 : : }
22795 : : break;
22796 : : default:;
22797 : : }
22798 : : break;
22799 : : }
22800 : : default:;
22801 : : }
22802 : : }
22803 : 3824780 : break;
22804 : : }
22805 : : default:;
22806 : : }
22807 : : }
22808 : : break;
22809 : : default:;
22810 : : }
22811 : : break;
22812 : : }
22813 : : default:;
22814 : : }
22815 : : break;
22816 : : }
22817 : : default:;
22818 : : }
22819 : : break;
22820 : : }
22821 : : default:;
22822 : : }
22823 : : break;
22824 : : }
22825 : : default:;
22826 : : }
22827 : : }
22828 : : break;
22829 : : }
22830 : : default:;
22831 : : }
22832 : : }
22833 : : break;
22834 : : default:;
22835 : : }
22836 : 3824780 : break;
22837 : : }
22838 : : default:;
22839 : : }
22840 : : }
22841 : : break;
22842 : : default:;
22843 : : }
22844 : : break;
22845 : : }
22846 : : default:;
22847 : : }
22848 : : }
22849 : : break;
22850 : : default:;
22851 : : }
22852 : : break;
22853 : : }
22854 : : default:;
22855 : : }
22856 : : }
22857 : : break;
22858 : : default:;
22859 : : }
22860 : 3824780 : break;
22861 : : }
22862 : : default:;
22863 : : }
22864 : : }
22865 : : break;
22866 : : default:;
22867 : : }
22868 : 3824780 : break;
22869 : : }
22870 : : default:;
22871 : : }
22872 : : }
22873 : : break;
22874 : : default:;
22875 : : }
22876 : 3824780 : break;
22877 : : }
22878 : : default:;
22879 : : }
22880 : : }
22881 : : break;
22882 : : default:;
22883 : : }
22884 : 3824780 : break;
22885 : : }
22886 : : default:;
22887 : : }
22888 : : }
22889 : : break;
22890 : : default:;
22891 : : }
22892 : 3824780 : break;
22893 : : }
22894 : 576 : case VEC_PERM_EXPR:
22895 : 576 : {
22896 : 576 : tree _q20 = gimple_assign_rhs1 (_a1);
22897 : 576 : _q20 = do_valueize (valueize, _q20);
22898 : 576 : tree _q21 = gimple_assign_rhs2 (_a1);
22899 : 576 : _q21 = do_valueize (valueize, _q21);
22900 : 576 : tree _q22 = gimple_assign_rhs3 (_a1);
22901 : 576 : _q22 = do_valueize (valueize, _q22);
22902 : 576 : if ((_q21 == _q20 && ! TREE_SIDE_EFFECTS (_q21)) || (operand_equal_p (_q21, _q20, 0) && types_match (_q21, _q20)))
22903 : : {
22904 : 158 : switch (TREE_CODE (_p1))
22905 : : {
22906 : 62 : case SSA_NAME:
22907 : 62 : if (gimple *_d2 = get_def (valueize, _p1))
22908 : : {
22909 : 54 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
22910 : 42 : switch (gimple_assign_rhs_code (_a2))
22911 : : {
22912 : 2 : case VEC_PERM_EXPR:
22913 : 2 : {
22914 : 2 : tree _q60 = gimple_assign_rhs1 (_a2);
22915 : 2 : _q60 = do_valueize (valueize, _q60);
22916 : 2 : tree _q61 = gimple_assign_rhs2 (_a2);
22917 : 2 : _q61 = do_valueize (valueize, _q61);
22918 : 2 : tree _q62 = gimple_assign_rhs3 (_a2);
22919 : 2 : _q62 = do_valueize (valueize, _q62);
22920 : 2 : if ((_q61 == _q60 && ! TREE_SIDE_EFFECTS (_q61)) || (operand_equal_p (_q61, _q60, 0) && types_match (_q61, _q60)))
22921 : : {
22922 : 2 : if ((_q62 == _q22 && ! TREE_SIDE_EFFECTS (_q62)) || (operand_equal_p (_q62, _q22, 0) && types_match (_q62, _q22)))
22923 : : {
22924 : 2 : {
22925 : 2 : tree captures[4] ATTRIBUTE_UNUSED = { _q20, _q22, _q60 };
22926 : 2 : if (VECTOR_INTEGER_TYPE_P (type)
22927 : : )
22928 : : {
22929 : 2 : gimple_seq *lseq = seq;
22930 : 2 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2442;
22931 : 2 : {
22932 : 2 : res_op->set_op (VEC_PERM_EXPR, type, 3);
22933 : 2 : {
22934 : 2 : tree _o1[2], _r1;
22935 : 2 : _o1[0] = captures[0];
22936 : 2 : _o1[1] = captures[2];
22937 : 2 : gimple_match_op tem_op (res_op->cond.any_else (), RSHIFT_EXPR, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
22938 : 2 : tem_op.resimplify (lseq, valueize);
22939 : 2 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
22940 : 2 : if (!_r1) goto next_after_fail2442;
22941 : 1 : captures[3] = _r1;
22942 : : }
22943 : 1 : res_op->ops[0] = captures[3];
22944 : 1 : res_op->ops[1] = captures[3];
22945 : 1 : res_op->ops[2] = captures[1];
22946 : 1 : res_op->resimplify (lseq, valueize);
22947 : 1 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1036, __FILE__, __LINE__, true);
22948 : 1 : return true;
22949 : : }
22950 : : next_after_fail2442:;
22951 : : }
22952 : : }
22953 : : }
22954 : : }
22955 : : break;
22956 : : }
22957 : : default:;
22958 : : }
22959 : : }
22960 : : break;
22961 : : default:;
22962 : : }
22963 : : }
22964 : : break;
22965 : : }
22966 : : default:;
22967 : : }
22968 : : }
22969 : : break;
22970 : : default:;
22971 : : }
22972 : : return false;
22973 : : }
22974 : :
22975 : : bool
22976 : 44 : gimple_simplify_CFN_BUILT_IN_FMAXF128 (gimple_match_op *res_op, gimple_seq *seq,
22977 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
22978 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1)
22979 : : {
22980 : 44 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
22981 : 44 : if ((_p1 == _p0 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _p0, 0) && types_match (_p1, _p0)))
22982 : : {
22983 : 0 : {
22984 : 0 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
22985 : 0 : if (gimple_simplify_605 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAXF128))
22986 : 0 : return true;
22987 : : }
22988 : : }
22989 : 44 : switch (TREE_CODE (_p1))
22990 : : {
22991 : 0 : case REAL_CST:
22992 : 0 : {
22993 : 0 : {
22994 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
22995 : 0 : if (gimple_simplify_606 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAXF128))
22996 : 0 : return true;
22997 : : }
22998 : 0 : break;
22999 : : }
23000 : 44 : default:;
23001 : : }
23002 : 44 : switch (TREE_CODE (_p0))
23003 : : {
23004 : 0 : case REAL_CST:
23005 : 0 : {
23006 : 0 : {
23007 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p1, _p0 };
23008 : 0 : if (gimple_simplify_606 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAXF128))
23009 : 0 : return true;
23010 : : }
23011 : 0 : break;
23012 : : }
23013 : 44 : default:;
23014 : : }
23015 : 44 : {
23016 : 44 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
23017 : 44 : if (gimple_simplify_608 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAXF128))
23018 : 0 : return true;
23019 : : }
23020 : 44 : switch (TREE_CODE (_p0))
23021 : : {
23022 : 42 : case SSA_NAME:
23023 : 42 : if (gimple *_d1 = get_def (valueize, _p0))
23024 : : {
23025 : 28 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
23026 : 44 : switch (gimple_assign_rhs_code (_a1))
23027 : : {
23028 : 0 : case NEGATE_EXPR:
23029 : 0 : {
23030 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
23031 : 0 : _q20 = do_valueize (valueize, _q20);
23032 : 0 : switch (TREE_CODE (_p1))
23033 : : {
23034 : 0 : case SSA_NAME:
23035 : 0 : if (gimple *_d2 = get_def (valueize, _p1))
23036 : : {
23037 : 0 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
23038 : 0 : switch (gimple_assign_rhs_code (_a2))
23039 : : {
23040 : 0 : case NEGATE_EXPR:
23041 : 0 : {
23042 : 0 : tree _q40 = gimple_assign_rhs1 (_a2);
23043 : 0 : _q40 = do_valueize (valueize, _q40);
23044 : 0 : {
23045 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _p1, _q40 };
23046 : 0 : if (FLOAT_TYPE_P (TREE_TYPE (captures[1]))
23047 : 0 : || (ANY_INTEGRAL_TYPE_P (TREE_TYPE (captures[1]))
23048 : 0 : && TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (captures[1])))
23049 : : )
23050 : : {
23051 : 0 : gimple_seq *lseq = seq;
23052 : 0 : if (lseq
23053 : 0 : && (!single_use (captures[0])
23054 : 0 : || !single_use (captures[2])))
23055 : 0 : lseq = NULL;
23056 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2608;
23057 : 0 : {
23058 : 0 : res_op->set_op (NEGATE_EXPR, type, 1);
23059 : 0 : {
23060 : 0 : tree _o1[2], _r1;
23061 : 0 : _o1[0] = captures[1];
23062 : 0 : _o1[1] = captures[3];
23063 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), CFN_BUILT_IN_FMINF128, TREE_TYPE (_o1[0]), _o1[0], _o1[1]);
23064 : 0 : tem_op.resimplify (lseq, valueize);
23065 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
23066 : 0 : if (!_r1) goto next_after_fail2608;
23067 : 0 : res_op->ops[0] = _r1;
23068 : : }
23069 : 0 : res_op->resimplify (lseq, valueize);
23070 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1191, __FILE__, __LINE__, true);
23071 : 0 : return true;
23072 : : }
23073 : 0 : next_after_fail2608:;
23074 : : }
23075 : : }
23076 : 0 : break;
23077 : : }
23078 : : default:;
23079 : : }
23080 : : }
23081 : : break;
23082 : : default:;
23083 : : }
23084 : : break;
23085 : : }
23086 : : default:;
23087 : : }
23088 : : }
23089 : : break;
23090 : : default:;
23091 : : }
23092 : : return false;
23093 : : }
23094 : :
23095 : : bool
23096 : 24536 : gimple_simplify_LROTATE_EXPR (gimple_match_op *res_op, gimple_seq *seq,
23097 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
23098 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1)
23099 : : {
23100 : 24536 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
23101 : 24536 : if (integer_all_onesp (_p0))
23102 : : {
23103 : 0 : {
23104 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
23105 : 0 : if (gimple_simplify_609 (res_op, seq, valueize, type, captures, LROTATE_EXPR))
23106 : 0 : return true;
23107 : : }
23108 : : }
23109 : 24536 : if (integer_zerop (_p1))
23110 : : {
23111 : 30 : {
23112 : 30 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
23113 : 30 : if (gimple_simplify_402 (res_op, seq, valueize, type, captures, LROTATE_EXPR))
23114 : 30 : return true;
23115 : : }
23116 : : }
23117 : 24506 : if (integer_zerop (_p0))
23118 : : {
23119 : 0 : {
23120 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
23121 : 0 : if (gimple_simplify_403 (res_op, seq, valueize, type, captures, LROTATE_EXPR))
23122 : 0 : return true;
23123 : : }
23124 : : }
23125 : 24506 : switch (TREE_CODE (_p1))
23126 : : {
23127 : 21453 : case SSA_NAME:
23128 : 21453 : if (gimple *_d1 = get_def (valueize, _p1))
23129 : : {
23130 : 19842 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
23131 : 15729 : switch (gimple_assign_rhs_code (_a1))
23132 : : {
23133 : 0 : case CONSTRUCTOR:
23134 : 0 : {
23135 : 0 : {
23136 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
23137 : 0 : if (gimple_simplify_405 (res_op, seq, valueize, type, captures, LROTATE_EXPR))
23138 : 0 : return true;
23139 : : }
23140 : 0 : break;
23141 : : }
23142 : 100 : case MINUS_EXPR:
23143 : 100 : {
23144 : 100 : tree _q30 = gimple_assign_rhs1 (_a1);
23145 : 100 : _q30 = do_valueize (valueize, _q30);
23146 : 100 : tree _q31 = gimple_assign_rhs2 (_a1);
23147 : 100 : _q31 = do_valueize (valueize, _q31);
23148 : 100 : switch (TREE_CODE (_q30))
23149 : : {
23150 : 100 : case INTEGER_CST:
23151 : 100 : {
23152 : 100 : {
23153 : 100 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _p1, _q30, _q31 };
23154 : 100 : if (gimple_simplify_610 (res_op, seq, valueize, type, captures, LROTATE_EXPR, RROTATE_EXPR))
23155 : 7 : return true;
23156 : : }
23157 : 93 : break;
23158 : : }
23159 : : default:;
23160 : : }
23161 : : break;
23162 : : }
23163 : : default:;
23164 : : }
23165 : : }
23166 : : break;
23167 : 0 : case VECTOR_CST:
23168 : 0 : {
23169 : 0 : {
23170 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
23171 : 0 : if (gimple_simplify_404 (res_op, seq, valueize, type, captures, LROTATE_EXPR))
23172 : 0 : return true;
23173 : : }
23174 : 0 : break;
23175 : : }
23176 : 2612 : case INTEGER_CST:
23177 : 2612 : {
23178 : 2612 : {
23179 : 2612 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
23180 : 2612 : gimple_seq *lseq = seq;
23181 : 2612 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2613;
23182 : 2612 : {
23183 : 2612 : res_op->set_op (RROTATE_EXPR, type, 2);
23184 : 2612 : res_op->ops[0] = captures[0];
23185 : 2612 : res_op->ops[1] = const_binop (MINUS_EXPR, TREE_TYPE (captures[1]),
23186 : 2612 : build_int_cst (TREE_TYPE (captures[1]),
23187 : 2612 : element_precision (type)), captures[1]);
23188 : 2612 : res_op->resimplify (lseq, valueize);
23189 : 2612 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1196, __FILE__, __LINE__, true);
23190 : 2612 : return true;
23191 : : }
23192 : 0 : next_after_fail2613:;
23193 : : }
23194 : 0 : break;
23195 : : }
23196 : 21887 : default:;
23197 : : }
23198 : 21887 : switch (TREE_CODE (_p0))
23199 : : {
23200 : 20244 : case SSA_NAME:
23201 : 20244 : if (gimple *_d1 = get_def (valueize, _p0))
23202 : : {
23203 : 18736 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
23204 : 3514 : switch (gimple_assign_rhs_code (_a1))
23205 : : {
23206 : 0 : case LROTATE_EXPR:
23207 : 0 : {
23208 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
23209 : 0 : _q20 = do_valueize (valueize, _q20);
23210 : 0 : tree _q21 = gimple_assign_rhs2 (_a1);
23211 : 0 : _q21 = do_valueize (valueize, _q21);
23212 : 0 : switch (TREE_CODE (_q21))
23213 : : {
23214 : 0 : case INTEGER_CST:
23215 : 0 : {
23216 : 0 : switch (TREE_CODE (_p1))
23217 : : {
23218 : 0 : case INTEGER_CST:
23219 : 0 : {
23220 : 0 : {
23221 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _q21, _p1 };
23222 : 0 : if (gimple_simplify_407 (res_op, seq, valueize, type, captures, LROTATE_EXPR))
23223 : 0 : return true;
23224 : : }
23225 : 0 : break;
23226 : : }
23227 : : default:;
23228 : : }
23229 : : break;
23230 : : }
23231 : : default:;
23232 : : }
23233 : : break;
23234 : : }
23235 : : default:;
23236 : : }
23237 : : }
23238 : : break;
23239 : : default:;
23240 : : }
23241 : : return false;
23242 : : }
23243 : :
23244 : : bool
23245 : 272269 : gimple_simplify_UNGE_EXPR (gimple_match_op *res_op, gimple_seq *seq,
23246 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
23247 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1)
23248 : : {
23249 : 272269 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
23250 : 272269 : switch (TREE_CODE (_p0))
23251 : : {
23252 : 260272 : case SSA_NAME:
23253 : 260272 : if (gimple *_d1 = get_def (valueize, _p0))
23254 : : {
23255 : 123289 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
23256 : 120265 : switch (gimple_assign_rhs_code (_a1))
23257 : : {
23258 : 0 : case VEC_COND_EXPR:
23259 : 0 : {
23260 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
23261 : 0 : _q20 = do_valueize (valueize, _q20);
23262 : 0 : tree _q21 = gimple_assign_rhs2 (_a1);
23263 : 0 : _q21 = do_valueize (valueize, _q21);
23264 : 0 : tree _q22 = gimple_assign_rhs3 (_a1);
23265 : 0 : _q22 = do_valueize (valueize, _q22);
23266 : 0 : switch (TREE_CODE (_p1))
23267 : : {
23268 : 0 : case SSA_NAME:
23269 : 0 : if (gimple *_d2 = get_def (valueize, _p1))
23270 : : {
23271 : 0 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
23272 : 0 : switch (gimple_assign_rhs_code (_a2))
23273 : : {
23274 : 0 : case VEC_COND_EXPR:
23275 : 0 : {
23276 : 0 : tree _q60 = gimple_assign_rhs1 (_a2);
23277 : 0 : _q60 = do_valueize (valueize, _q60);
23278 : 0 : tree _q61 = gimple_assign_rhs2 (_a2);
23279 : 0 : _q61 = do_valueize (valueize, _q61);
23280 : 0 : tree _q62 = gimple_assign_rhs3 (_a2);
23281 : 0 : _q62 = do_valueize (valueize, _q62);
23282 : 0 : if ((_q60 == _q20 && ! TREE_SIDE_EFFECTS (_q60)) || (operand_equal_p (_q60, _q20, 0) && types_match (_q60, _q20)))
23283 : : {
23284 : 0 : {
23285 : 0 : tree captures[7] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q22, _p1, _q61, _q62 };
23286 : 0 : if (VECTOR_TYPE_P (type)
23287 : 0 : && (TREE_CODE_CLASS (UNGE_EXPR) != tcc_comparison
23288 : 0 : || types_match (type, TREE_TYPE (captures[2]))
23289 : 0 : || expand_vec_cond_expr_p (type, TREE_TYPE (captures[1]))
23290 : : || (optimize_vectors_before_lowering_p ()
23291 : 0 : && !expand_vec_cond_expr_p (TREE_TYPE (captures[2]), TREE_TYPE (captures[1]))))
23292 : : )
23293 : : {
23294 : 0 : gimple_seq *lseq = seq;
23295 : 0 : if (lseq
23296 : 0 : && (!single_use (captures[0])
23297 : 0 : || !single_use (captures[4])))
23298 : 0 : lseq = NULL;
23299 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2634;
23300 : 0 : {
23301 : 0 : res_op->set_op (VEC_COND_EXPR, type, 3);
23302 : 0 : res_op->ops[0] = captures[1];
23303 : 0 : {
23304 : 0 : tree _o1[2], _r1;
23305 : 0 : _o1[0] = captures[2];
23306 : 0 : _o1[1] = captures[5];
23307 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), UNGE_EXPR, type, _o1[0], _o1[1]);
23308 : 0 : tem_op.resimplify (NULL, valueize);
23309 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
23310 : 0 : if (!_r1) goto next_after_fail2634;
23311 : 0 : res_op->ops[1] = _r1;
23312 : : }
23313 : 0 : {
23314 : 0 : tree _o1[2], _r1;
23315 : 0 : _o1[0] = captures[3];
23316 : 0 : _o1[1] = captures[6];
23317 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), UNGE_EXPR, type, _o1[0], _o1[1]);
23318 : 0 : tem_op.resimplify (NULL, valueize);
23319 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
23320 : 0 : if (!_r1) goto next_after_fail2634;
23321 : 0 : res_op->ops[2] = _r1;
23322 : : }
23323 : 0 : res_op->resimplify (lseq, valueize);
23324 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1033, __FILE__, __LINE__, true);
23325 : 0 : return true;
23326 : : }
23327 : 0 : next_after_fail2634:;
23328 : : }
23329 : : }
23330 : : }
23331 : : break;
23332 : : }
23333 : : default:;
23334 : : }
23335 : : }
23336 : : break;
23337 : 0 : default:;
23338 : : }
23339 : 0 : {
23340 : 0 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _q22, _p1 };
23341 : 0 : if (VECTOR_TYPE_P (type)
23342 : 0 : && (TREE_CODE_CLASS (UNGE_EXPR) != tcc_comparison
23343 : 0 : || types_match (type, TREE_TYPE (captures[2]))
23344 : 0 : || expand_vec_cond_expr_p (type, TREE_TYPE (captures[1]))
23345 : : || (optimize_vectors_before_lowering_p ()
23346 : 0 : && !expand_vec_cond_expr_p (TREE_TYPE (captures[2]), TREE_TYPE (captures[1]))))
23347 : : )
23348 : : {
23349 : 0 : gimple_seq *lseq = seq;
23350 : 0 : if (lseq
23351 : 0 : && (!single_use (captures[0])))
23352 : 0 : lseq = NULL;
23353 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2635;
23354 : 0 : {
23355 : 0 : res_op->set_op (VEC_COND_EXPR, type, 3);
23356 : 0 : res_op->ops[0] = captures[1];
23357 : 0 : {
23358 : 0 : tree _o1[2], _r1;
23359 : 0 : _o1[0] = captures[2];
23360 : 0 : _o1[1] = captures[4];
23361 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), UNGE_EXPR, type, _o1[0], _o1[1]);
23362 : 0 : tem_op.resimplify (NULL, valueize);
23363 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
23364 : 0 : if (!_r1) goto next_after_fail2635;
23365 : 0 : res_op->ops[1] = _r1;
23366 : : }
23367 : 0 : {
23368 : 0 : tree _o1[2], _r1;
23369 : 0 : _o1[0] = captures[3];
23370 : 0 : _o1[1] = captures[4];
23371 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), UNGE_EXPR, type, _o1[0], _o1[1]);
23372 : 0 : tem_op.resimplify (NULL, valueize);
23373 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
23374 : 0 : if (!_r1) goto next_after_fail2635;
23375 : 0 : res_op->ops[2] = _r1;
23376 : : }
23377 : 0 : res_op->resimplify (lseq, valueize);
23378 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1034, __FILE__, __LINE__, true);
23379 : 0 : return true;
23380 : : }
23381 : 0 : next_after_fail2635:;
23382 : : }
23383 : : }
23384 : 0 : break;
23385 : : }
23386 : : default:;
23387 : : }
23388 : : }
23389 : : break;
23390 : 272269 : default:;
23391 : : }
23392 : 272269 : switch (TREE_CODE (_p1))
23393 : : {
23394 : 26367 : case SSA_NAME:
23395 : 26367 : if (gimple *_d1 = get_def (valueize, _p1))
23396 : : {
23397 : 12315 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
23398 : 11914 : switch (gimple_assign_rhs_code (_a1))
23399 : : {
23400 : 0 : case VEC_COND_EXPR:
23401 : 0 : {
23402 : 0 : tree _q30 = gimple_assign_rhs1 (_a1);
23403 : 0 : _q30 = do_valueize (valueize, _q30);
23404 : 0 : tree _q31 = gimple_assign_rhs2 (_a1);
23405 : 0 : _q31 = do_valueize (valueize, _q31);
23406 : 0 : tree _q32 = gimple_assign_rhs3 (_a1);
23407 : 0 : _q32 = do_valueize (valueize, _q32);
23408 : 0 : {
23409 : 0 : tree captures[5] ATTRIBUTE_UNUSED = { _p0, _p1, _q30, _q31, _q32 };
23410 : 0 : if (VECTOR_TYPE_P (type)
23411 : 0 : && (TREE_CODE_CLASS (UNGE_EXPR) != tcc_comparison
23412 : 0 : || types_match (type, TREE_TYPE (captures[3]))
23413 : 0 : || expand_vec_cond_expr_p (type, TREE_TYPE (captures[2]))
23414 : : || (optimize_vectors_before_lowering_p ()
23415 : 0 : && !expand_vec_cond_expr_p (TREE_TYPE (captures[3]), TREE_TYPE (captures[2]))))
23416 : : )
23417 : : {
23418 : 0 : gimple_seq *lseq = seq;
23419 : 0 : if (lseq
23420 : 0 : && (!single_use (captures[1])))
23421 : 0 : lseq = NULL;
23422 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2636;
23423 : 0 : {
23424 : 0 : res_op->set_op (VEC_COND_EXPR, type, 3);
23425 : 0 : res_op->ops[0] = captures[2];
23426 : 0 : {
23427 : 0 : tree _o1[2], _r1;
23428 : 0 : _o1[0] = captures[0];
23429 : 0 : _o1[1] = captures[3];
23430 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), UNGE_EXPR, type, _o1[0], _o1[1]);
23431 : 0 : tem_op.resimplify (NULL, valueize);
23432 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
23433 : 0 : if (!_r1) goto next_after_fail2636;
23434 : 0 : res_op->ops[1] = _r1;
23435 : : }
23436 : 0 : {
23437 : 0 : tree _o1[2], _r1;
23438 : 0 : _o1[0] = captures[0];
23439 : 0 : _o1[1] = captures[4];
23440 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), UNGE_EXPR, type, _o1[0], _o1[1]);
23441 : 0 : tem_op.resimplify (NULL, valueize);
23442 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, NULL);
23443 : 0 : if (!_r1) goto next_after_fail2636;
23444 : 0 : res_op->ops[2] = _r1;
23445 : : }
23446 : 0 : res_op->resimplify (lseq, valueize);
23447 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1035, __FILE__, __LINE__, true);
23448 : 0 : return true;
23449 : : }
23450 : 0 : next_after_fail2636:;
23451 : : }
23452 : : }
23453 : 0 : break;
23454 : : }
23455 : : default:;
23456 : : }
23457 : : }
23458 : : break;
23459 : 272269 : default:;
23460 : : }
23461 : 272269 : if ((_p1 == _p0 && ! TREE_SIDE_EFFECTS (_p1)) || (operand_equal_p (_p1, _p0, 0) && types_match (_p1, _p0)))
23462 : : {
23463 : 15 : {
23464 : 15 : tree captures[1] ATTRIBUTE_UNUSED = { _p0 };
23465 : 15 : if (gimple_simplify_638 (res_op, seq, valueize, type, captures, UNGE_EXPR))
23466 : 15 : return true;
23467 : : }
23468 : : }
23469 : 272254 : switch (TREE_CODE (_p0))
23470 : : {
23471 : 260257 : case SSA_NAME:
23472 : 260257 : if (gimple *_d1 = get_def (valueize, _p0))
23473 : : {
23474 : 123279 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
23475 : 120265 : switch (gimple_assign_rhs_code (_a1))
23476 : : {
23477 : 609 : case FLOAT_EXPR:
23478 : 609 : {
23479 : 609 : tree _q20 = gimple_assign_rhs1 (_a1);
23480 : 609 : _q20 = do_valueize (valueize, _q20);
23481 : 609 : switch (TREE_CODE (_p1))
23482 : : {
23483 : 0 : case SSA_NAME:
23484 : 0 : if (gimple *_d2 = get_def (valueize, _p1))
23485 : : {
23486 : 0 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
23487 : 0 : switch (gimple_assign_rhs_code (_a2))
23488 : : {
23489 : 0 : case FLOAT_EXPR:
23490 : 0 : {
23491 : 0 : tree _q40 = gimple_assign_rhs1 (_a2);
23492 : 0 : _q40 = do_valueize (valueize, _q40);
23493 : 0 : {
23494 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _q20, _q40 };
23495 : 0 : if (gimple_simplify_276 (res_op, seq, valueize, type, captures, UNGE_EXPR, GE_EXPR))
23496 : 0 : return true;
23497 : : }
23498 : 0 : break;
23499 : : }
23500 : : default:;
23501 : : }
23502 : : }
23503 : : break;
23504 : : default:;
23505 : : }
23506 : : break;
23507 : : }
23508 : 43 : case NEGATE_EXPR:
23509 : 43 : {
23510 : 43 : tree _q20 = gimple_assign_rhs1 (_a1);
23511 : 43 : _q20 = do_valueize (valueize, _q20);
23512 : 43 : switch (TREE_CODE (_p1))
23513 : : {
23514 : 30 : case SSA_NAME:
23515 : 30 : if (gimple *_d2 = get_def (valueize, _p1))
23516 : : {
23517 : 30 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
23518 : 30 : switch (gimple_assign_rhs_code (_a2))
23519 : : {
23520 : 30 : case NEGATE_EXPR:
23521 : 30 : {
23522 : 30 : tree _q40 = gimple_assign_rhs1 (_a2);
23523 : 30 : _q40 = do_valueize (valueize, _q40);
23524 : 30 : {
23525 : 30 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _q40 };
23526 : 30 : if (gimple_simplify_279 (res_op, seq, valueize, type, captures, UNGE_EXPR, UNLE_EXPR))
23527 : 30 : return true;
23528 : : }
23529 : 0 : break;
23530 : : }
23531 : : default:;
23532 : : }
23533 : : }
23534 : : break;
23535 : 13 : default:;
23536 : : }
23537 : 13 : if (CONSTANT_CLASS_P (_p1))
23538 : : {
23539 : 13 : {
23540 : 13 : tree captures[2] ATTRIBUTE_UNUSED = { _q20, _p1 };
23541 : 13 : if (gimple_simplify_280 (res_op, seq, valueize, type, captures, UNGE_EXPR, UNLE_EXPR))
23542 : 13 : return true;
23543 : : }
23544 : : }
23545 : : break;
23546 : : }
23547 : : default:;
23548 : : }
23549 : : }
23550 : : break;
23551 : 272211 : default:;
23552 : : }
23553 : 272211 : switch (TREE_CODE (_p1))
23554 : : {
23555 : 243137 : case REAL_CST:
23556 : 243137 : {
23557 : 243137 : {
23558 : 243137 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
23559 : 243137 : if (gimple_simplify_636 (res_op, seq, valueize, type, captures, UNGE_EXPR))
23560 : 0 : return true;
23561 : : }
23562 : 243137 : break;
23563 : : }
23564 : : default:;
23565 : : }
23566 : : return false;
23567 : : }
23568 : :
23569 : : bool
23570 : 0 : gimple_simplify_CFN_BUILT_IN_POWF64 (gimple_match_op *res_op, gimple_seq *seq,
23571 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
23572 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1)
23573 : : {
23574 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
23575 : 0 : switch (TREE_CODE (_p0))
23576 : : {
23577 : 0 : case SSA_NAME:
23578 : 0 : if (gimple *_d1 = get_def (valueize, _p0))
23579 : : {
23580 : 0 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
23581 : 0 : switch (gimple_assign_rhs_code (_a1))
23582 : : {
23583 : 0 : case RDIV_EXPR:
23584 : 0 : {
23585 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
23586 : 0 : _q20 = do_valueize (valueize, _q20);
23587 : 0 : tree _q21 = gimple_assign_rhs2 (_a1);
23588 : 0 : _q21 = do_valueize (valueize, _q21);
23589 : 0 : if (real_onep (_q20))
23590 : : {
23591 : 0 : {
23592 : 0 : tree captures[4] ATTRIBUTE_UNUSED = { _p0, _q20, _q21, _p1 };
23593 : 0 : if (gimple_simplify_430 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_POWF64))
23594 : 0 : return true;
23595 : : }
23596 : : }
23597 : : break;
23598 : : }
23599 : : default:;
23600 : : }
23601 : : }
23602 : : break;
23603 : 0 : default:;
23604 : : }
23605 : 0 : if (real_zerop (_p0))
23606 : : {
23607 : 0 : {
23608 : 0 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
23609 : 0 : if (gimple_simplify_431 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_POWF64))
23610 : 0 : return true;
23611 : : }
23612 : : }
23613 : : return false;
23614 : : }
23615 : :
23616 : : bool
23617 : 1944 : gimple_simplify_CFN_BUILT_IN_LDEXPL (gimple_match_op *res_op, gimple_seq *seq,
23618 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
23619 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1)
23620 : : {
23621 : 1944 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
23622 : 1944 : if (real_zerop (_p0))
23623 : : {
23624 : 28 : {
23625 : 28 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
23626 : 28 : if (gimple_simplify_652 (res_op, seq, valueize, type, captures))
23627 : 28 : return true;
23628 : : }
23629 : : }
23630 : 1916 : if (integer_zerop (_p1))
23631 : : {
23632 : 9 : {
23633 : 9 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
23634 : 9 : if (gimple_simplify_653 (res_op, seq, valueize, type, captures))
23635 : 9 : return true;
23636 : : }
23637 : : }
23638 : 1907 : switch (TREE_CODE (_p0))
23639 : : {
23640 : 1092 : case REAL_CST:
23641 : 1092 : {
23642 : 1092 : {
23643 : 1092 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
23644 : 1092 : if (!real_isfinite (TREE_REAL_CST_PTR (captures[0]))
23645 : : )
23646 : : {
23647 : 56 : gimple_seq *lseq = seq;
23648 : 56 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2646;
23649 : 56 : {
23650 : 56 : tree tem;
23651 : 56 : tem = captures[0];
23652 : 56 : res_op->set_value (tem);
23653 : 56 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1203, __FILE__, __LINE__, true);
23654 : 56 : return true;
23655 : : }
23656 : 0 : next_after_fail2646:;
23657 : : }
23658 : : }
23659 : 1036 : break;
23660 : : }
23661 : : default:;
23662 : : }
23663 : : return false;
23664 : : }
23665 : :
23666 : : bool
23667 : 975 : gimple_simplify_CFN_BUILT_IN_SCALBLNL (gimple_match_op *res_op, gimple_seq *seq,
23668 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
23669 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1)
23670 : : {
23671 : 975 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
23672 : 975 : if (real_zerop (_p0))
23673 : : {
23674 : 28 : {
23675 : 28 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
23676 : 28 : if (gimple_simplify_652 (res_op, seq, valueize, type, captures))
23677 : 28 : return true;
23678 : : }
23679 : : }
23680 : 947 : if (integer_zerop (_p1))
23681 : : {
23682 : 7 : {
23683 : 7 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
23684 : 7 : if (gimple_simplify_653 (res_op, seq, valueize, type, captures))
23685 : 7 : return true;
23686 : : }
23687 : : }
23688 : 940 : switch (TREE_CODE (_p0))
23689 : : {
23690 : 880 : case REAL_CST:
23691 : 880 : {
23692 : 880 : {
23693 : 880 : tree captures[2] ATTRIBUTE_UNUSED = { _p0, _p1 };
23694 : 880 : if (!real_isfinite (TREE_REAL_CST_PTR (captures[0]))
23695 : : )
23696 : : {
23697 : 56 : gimple_seq *lseq = seq;
23698 : 56 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2653;
23699 : 56 : {
23700 : 56 : tree tem;
23701 : 56 : tem = captures[0];
23702 : 56 : res_op->set_value (tem);
23703 : 56 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1203, __FILE__, __LINE__, true);
23704 : 56 : return true;
23705 : : }
23706 : 0 : next_after_fail2653:;
23707 : : }
23708 : : }
23709 : 824 : break;
23710 : : }
23711 : : default:;
23712 : : }
23713 : : return false;
23714 : : }
23715 : :
23716 : : bool
23717 : 13629 : gimple_simplify_BIT_INSERT_EXPR (gimple_match_op *res_op, gimple_seq *seq,
23718 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
23719 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1, tree _p2)
23720 : : {
23721 : 13629 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
23722 : 13629 : switch (TREE_CODE (_p1))
23723 : : {
23724 : 8526 : case SSA_NAME:
23725 : 8526 : if (gimple *_d1 = get_def (valueize, _p1))
23726 : : {
23727 : 7790 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
23728 : 8131 : switch (gimple_assign_rhs_code (_a1))
23729 : : {
23730 : 196 : case BIT_FIELD_REF:
23731 : 196 : {
23732 : 196 : tree _q30 = TREE_OPERAND (gimple_assign_rhs1 (_a1), 0);
23733 : 196 : if ((TREE_CODE (_q30) == SSA_NAME
23734 : 196 : || is_gimple_min_invariant (_q30)))
23735 : : {
23736 : 191 : _q30 = do_valueize (valueize, _q30);
23737 : 191 : tree _q31 = TREE_OPERAND (gimple_assign_rhs1 (_a1), 1);
23738 : 191 : if ((TREE_CODE (_q31) == SSA_NAME
23739 : 191 : || is_gimple_min_invariant (_q31)))
23740 : : {
23741 : 191 : _q31 = do_valueize (valueize, _q31);
23742 : 191 : tree _q32 = TREE_OPERAND (gimple_assign_rhs1 (_a1), 2);
23743 : 191 : if ((TREE_CODE (_q32) == SSA_NAME
23744 : 191 : || is_gimple_min_invariant (_q32)))
23745 : : {
23746 : 191 : _q32 = do_valueize (valueize, _q32);
23747 : 191 : {
23748 : 191 : tree captures[6] ATTRIBUTE_UNUSED = { _p0, _p1, _q30, _q31, _q32, _p2 };
23749 : 191 : if (VECTOR_TYPE_P (type)
23750 : 99 : && (VECTOR_MODE_P (TYPE_MODE (type))
23751 : : || optimize_vectors_before_lowering_p ())
23752 : 99 : && operand_equal_p (TYPE_SIZE (TREE_TYPE (captures[0])),
23753 : 99 : TYPE_SIZE (TREE_TYPE (captures[2])), 0)
23754 : 69 : && types_match (TREE_TYPE (TREE_TYPE (captures[0])), TREE_TYPE (captures[1]))
23755 : 69 : && TYPE_VECTOR_SUBPARTS (type).is_constant ()
23756 : 260 : && multiple_p (wi::to_poly_offset (captures[4]),
23757 : 213 : wi::to_poly_offset (TYPE_SIZE (TREE_TYPE (type))))
23758 : : )
23759 : : {
23760 : 47 : {
23761 : 47 : unsigned HOST_WIDE_INT elsz
23762 : 47 : = tree_to_uhwi (TYPE_SIZE (TREE_TYPE (TREE_TYPE (captures[0]))));
23763 : 47 : poly_uint64 relt = exact_div (tree_to_poly_uint64 (captures[4]), elsz);
23764 : 47 : poly_uint64 ielt = exact_div (tree_to_poly_uint64 (captures[5]), elsz);
23765 : 47 : unsigned nunits = TYPE_VECTOR_SUBPARTS (type).to_constant ();
23766 : 47 : vec_perm_builder builder;
23767 : 47 : builder.new_vector (nunits, nunits, 1);
23768 : 1063 : for (unsigned i = 0; i < nunits; ++i)
23769 : 1016 : builder.quick_push (known_eq (ielt, i) ? nunits + relt : i);
23770 : 47 : vec_perm_indices sel (builder, 2, nunits);
23771 : 94 : if (!VECTOR_MODE_P (TYPE_MODE (type))
23772 : 94 : || can_vec_perm_const_p (TYPE_MODE (type),
23773 : 47 : TYPE_MODE (type), sel, false)
23774 : : )
23775 : : {
23776 : 33 : gimple_seq *lseq = seq;
23777 : 33 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2870;
23778 : 33 : {
23779 : 33 : res_op->set_op (VEC_PERM_EXPR, type, 3);
23780 : 33 : res_op->ops[0] = captures[0];
23781 : 33 : {
23782 : 33 : tree _o1[1], _r1;
23783 : 33 : _o1[0] = captures[2];
23784 : 33 : if (type != TREE_TYPE (_o1[0]) /* XXX */
23785 : 33 : && !useless_type_conversion_p (type, TREE_TYPE (_o1[0])))
23786 : : {
23787 : 0 : gimple_match_op tem_op (res_op->cond.any_else (), VIEW_CONVERT_EXPR, type, _o1[0]);
23788 : 0 : tem_op.resimplify (lseq, valueize);
23789 : 0 : _r1 = maybe_push_res_to_seq (&tem_op, lseq);
23790 : 0 : if (!_r1) goto next_after_fail2870;
23791 : : }
23792 : : else
23793 : : _r1 = _o1[0];
23794 : 33 : res_op->ops[1] = _r1;
23795 : : }
23796 : 33 : res_op->ops[2] = vec_perm_indices_to_tree (build_vector_type (ssizetype, nunits),
23797 : : sel);
23798 : 33 : res_op->resimplify (lseq, valueize);
23799 : 33 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1264, __FILE__, __LINE__, true);
23800 : 33 : return true;
23801 : : }
23802 : 14 : next_after_fail2870:;
23803 : : }
23804 : 47 : }
23805 : : }
23806 : : }
23807 : : }
23808 : : }
23809 : : }
23810 : : break;
23811 : : }
23812 : : default:;
23813 : : }
23814 : : }
23815 : : break;
23816 : : default:;
23817 : : }
23818 : : return false;
23819 : : }
23820 : :
23821 : : bool
23822 : 2649 : gimple_simplify_CFN_BUILT_IN_FMAF (gimple_match_op *res_op, gimple_seq *seq,
23823 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
23824 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1, tree _p2)
23825 : : {
23826 : 2649 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
23827 : 2649 : switch (TREE_CODE (_p0))
23828 : : {
23829 : 2390 : case SSA_NAME:
23830 : 2390 : if (gimple *_d1 = get_def (valueize, _p0))
23831 : : {
23832 : 1174 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
23833 : 1261 : switch (gimple_assign_rhs_code (_a1))
23834 : : {
23835 : 209 : case NEGATE_EXPR:
23836 : 209 : {
23837 : 209 : tree _q20 = gimple_assign_rhs1 (_a1);
23838 : 209 : _q20 = do_valueize (valueize, _q20);
23839 : 209 : {
23840 : 209 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _p1, _p2 };
23841 : 209 : if (gimple_simplify_663 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAF))
23842 : 40 : return true;
23843 : : }
23844 : 169 : switch (TREE_CODE (_p2))
23845 : : {
23846 : 169 : case SSA_NAME:
23847 : 169 : if (gimple *_d2 = get_def (valueize, _p2))
23848 : : {
23849 : 169 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
23850 : 66 : switch (gimple_assign_rhs_code (_a2))
23851 : : {
23852 : 66 : case NEGATE_EXPR:
23853 : 66 : {
23854 : 66 : tree _q50 = gimple_assign_rhs1 (_a2);
23855 : 66 : _q50 = do_valueize (valueize, _q50);
23856 : 66 : {
23857 : 66 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _p1, _q50 };
23858 : 66 : if (gimple_simplify_664 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAF))
23859 : 0 : return true;
23860 : : }
23861 : 66 : break;
23862 : : }
23863 : : default:;
23864 : : }
23865 : : }
23866 : : break;
23867 : : default:;
23868 : : }
23869 : : break;
23870 : : }
23871 : : default:;
23872 : : }
23873 : : }
23874 : : break;
23875 : 2609 : default:;
23876 : : }
23877 : 2609 : switch (TREE_CODE (_p1))
23878 : : {
23879 : 1442 : case SSA_NAME:
23880 : 1442 : if (gimple *_d1 = get_def (valueize, _p1))
23881 : : {
23882 : 786 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
23883 : 687 : switch (gimple_assign_rhs_code (_a1))
23884 : : {
23885 : 183 : case NEGATE_EXPR:
23886 : 183 : {
23887 : 183 : tree _q30 = gimple_assign_rhs1 (_a1);
23888 : 183 : _q30 = do_valueize (valueize, _q30);
23889 : 183 : {
23890 : 183 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _p0, _p2 };
23891 : 183 : if (gimple_simplify_663 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAF))
23892 : 0 : return true;
23893 : : }
23894 : 183 : break;
23895 : : }
23896 : : default:;
23897 : : }
23898 : : }
23899 : : break;
23900 : 2609 : default:;
23901 : : }
23902 : 2609 : switch (TREE_CODE (_p2))
23903 : : {
23904 : 2378 : case SSA_NAME:
23905 : 2378 : if (gimple *_d1 = get_def (valueize, _p2))
23906 : : {
23907 : 1364 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
23908 : 1342 : switch (gimple_assign_rhs_code (_a1))
23909 : : {
23910 : 308 : case NEGATE_EXPR:
23911 : 308 : {
23912 : 308 : tree _q40 = gimple_assign_rhs1 (_a1);
23913 : 308 : _q40 = do_valueize (valueize, _q40);
23914 : 308 : {
23915 : 308 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p1, _q40 };
23916 : 308 : if (gimple_simplify_665 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAF))
23917 : 12 : return true;
23918 : : }
23919 : 296 : break;
23920 : : }
23921 : : default:;
23922 : : }
23923 : : }
23924 : : break;
23925 : 2597 : default:;
23926 : : }
23927 : 2597 : switch (TREE_CODE (_p1))
23928 : : {
23929 : 1430 : case SSA_NAME:
23930 : 1430 : if (gimple *_d1 = get_def (valueize, _p1))
23931 : : {
23932 : 774 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
23933 : 687 : switch (gimple_assign_rhs_code (_a1))
23934 : : {
23935 : 183 : case NEGATE_EXPR:
23936 : 183 : {
23937 : 183 : tree _q30 = gimple_assign_rhs1 (_a1);
23938 : 183 : _q30 = do_valueize (valueize, _q30);
23939 : 183 : switch (TREE_CODE (_p2))
23940 : : {
23941 : 183 : case SSA_NAME:
23942 : 183 : if (gimple *_d2 = get_def (valueize, _p2))
23943 : : {
23944 : 177 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
23945 : 231 : switch (gimple_assign_rhs_code (_a2))
23946 : : {
23947 : 91 : case NEGATE_EXPR:
23948 : 91 : {
23949 : 91 : tree _q50 = gimple_assign_rhs1 (_a2);
23950 : 91 : _q50 = do_valueize (valueize, _q50);
23951 : 91 : {
23952 : 91 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _p0, _q50 };
23953 : 91 : if (gimple_simplify_664 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAF))
23954 : 0 : return true;
23955 : : }
23956 : 91 : break;
23957 : : }
23958 : : default:;
23959 : : }
23960 : : }
23961 : : break;
23962 : : default:;
23963 : : }
23964 : : break;
23965 : : }
23966 : : default:;
23967 : : }
23968 : : }
23969 : : break;
23970 : : default:;
23971 : : }
23972 : : return false;
23973 : : }
23974 : :
23975 : : bool
23976 : 1082 : gimple_simplify_CFN_BUILT_IN_FMAL (gimple_match_op *res_op, gimple_seq *seq,
23977 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
23978 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1, tree _p2)
23979 : : {
23980 : 1082 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
23981 : 1082 : switch (TREE_CODE (_p0))
23982 : : {
23983 : 865 : case SSA_NAME:
23984 : 865 : if (gimple *_d1 = get_def (valueize, _p0))
23985 : : {
23986 : 360 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
23987 : 247 : switch (gimple_assign_rhs_code (_a1))
23988 : : {
23989 : 2 : case NEGATE_EXPR:
23990 : 2 : {
23991 : 2 : tree _q20 = gimple_assign_rhs1 (_a1);
23992 : 2 : _q20 = do_valueize (valueize, _q20);
23993 : 2 : {
23994 : 2 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _p1, _p2 };
23995 : 2 : if (gimple_simplify_663 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAL))
23996 : 0 : return true;
23997 : : }
23998 : 2 : switch (TREE_CODE (_p2))
23999 : : {
24000 : 2 : case SSA_NAME:
24001 : 2 : if (gimple *_d2 = get_def (valueize, _p2))
24002 : : {
24003 : 2 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
24004 : 0 : switch (gimple_assign_rhs_code (_a2))
24005 : : {
24006 : 0 : case NEGATE_EXPR:
24007 : 0 : {
24008 : 0 : tree _q50 = gimple_assign_rhs1 (_a2);
24009 : 0 : _q50 = do_valueize (valueize, _q50);
24010 : 0 : {
24011 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _p1, _q50 };
24012 : 0 : if (gimple_simplify_664 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAL))
24013 : 0 : return true;
24014 : : }
24015 : 0 : break;
24016 : : }
24017 : : default:;
24018 : : }
24019 : : }
24020 : : break;
24021 : : default:;
24022 : : }
24023 : : break;
24024 : : }
24025 : : default:;
24026 : : }
24027 : : }
24028 : : break;
24029 : 1082 : default:;
24030 : : }
24031 : 1082 : switch (TREE_CODE (_p1))
24032 : : {
24033 : 65 : case SSA_NAME:
24034 : 65 : if (gimple *_d1 = get_def (valueize, _p1))
24035 : : {
24036 : 40 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
24037 : 36 : switch (gimple_assign_rhs_code (_a1))
24038 : : {
24039 : 2 : case NEGATE_EXPR:
24040 : 2 : {
24041 : 2 : tree _q30 = gimple_assign_rhs1 (_a1);
24042 : 2 : _q30 = do_valueize (valueize, _q30);
24043 : 2 : {
24044 : 2 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _p0, _p2 };
24045 : 2 : if (gimple_simplify_663 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAL))
24046 : 0 : return true;
24047 : : }
24048 : 2 : break;
24049 : : }
24050 : : default:;
24051 : : }
24052 : : }
24053 : : break;
24054 : 1082 : default:;
24055 : : }
24056 : 1082 : switch (TREE_CODE (_p2))
24057 : : {
24058 : 877 : case SSA_NAME:
24059 : 877 : if (gimple *_d1 = get_def (valueize, _p2))
24060 : : {
24061 : 548 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
24062 : 545 : switch (gimple_assign_rhs_code (_a1))
24063 : : {
24064 : 0 : case NEGATE_EXPR:
24065 : 0 : {
24066 : 0 : tree _q40 = gimple_assign_rhs1 (_a1);
24067 : 0 : _q40 = do_valueize (valueize, _q40);
24068 : 0 : {
24069 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p1, _q40 };
24070 : 0 : if (gimple_simplify_665 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAL))
24071 : 0 : return true;
24072 : : }
24073 : 0 : break;
24074 : : }
24075 : : default:;
24076 : : }
24077 : : }
24078 : : break;
24079 : 1082 : default:;
24080 : : }
24081 : 1082 : switch (TREE_CODE (_p1))
24082 : : {
24083 : 65 : case SSA_NAME:
24084 : 65 : if (gimple *_d1 = get_def (valueize, _p1))
24085 : : {
24086 : 40 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
24087 : 36 : switch (gimple_assign_rhs_code (_a1))
24088 : : {
24089 : 2 : case NEGATE_EXPR:
24090 : 2 : {
24091 : 2 : tree _q30 = gimple_assign_rhs1 (_a1);
24092 : 2 : _q30 = do_valueize (valueize, _q30);
24093 : 2 : switch (TREE_CODE (_p2))
24094 : : {
24095 : 2 : case SSA_NAME:
24096 : 2 : if (gimple *_d2 = get_def (valueize, _p2))
24097 : : {
24098 : 2 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
24099 : 0 : switch (gimple_assign_rhs_code (_a2))
24100 : : {
24101 : 0 : case NEGATE_EXPR:
24102 : 0 : {
24103 : 0 : tree _q50 = gimple_assign_rhs1 (_a2);
24104 : 0 : _q50 = do_valueize (valueize, _q50);
24105 : 0 : {
24106 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _p0, _q50 };
24107 : 0 : if (gimple_simplify_664 (res_op, seq, valueize, type, captures, CFN_BUILT_IN_FMAL))
24108 : 0 : return true;
24109 : : }
24110 : 0 : break;
24111 : : }
24112 : : default:;
24113 : : }
24114 : : }
24115 : : break;
24116 : : default:;
24117 : : }
24118 : : break;
24119 : : }
24120 : : default:;
24121 : : }
24122 : : }
24123 : : break;
24124 : : default:;
24125 : : }
24126 : : return false;
24127 : : }
24128 : :
24129 : : bool
24130 : 2745 : gimple_simplify_CFN_FMS (gimple_match_op *res_op, gimple_seq *seq,
24131 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
24132 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1, tree _p2)
24133 : : {
24134 : 2745 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
24135 : 2745 : switch (TREE_CODE (_p0))
24136 : : {
24137 : 2745 : case SSA_NAME:
24138 : 2745 : if (gimple *_d1 = get_def (valueize, _p0))
24139 : : {
24140 : 2726 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
24141 : 4568 : switch (gimple_assign_rhs_code (_a1))
24142 : : {
24143 : 0 : case NEGATE_EXPR:
24144 : 0 : {
24145 : 0 : tree _q20 = gimple_assign_rhs1 (_a1);
24146 : 0 : _q20 = do_valueize (valueize, _q20);
24147 : 0 : {
24148 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _p1, _p2 };
24149 : 0 : if (gimple_simplify_666 (res_op, seq, valueize, type, captures))
24150 : 0 : return true;
24151 : : }
24152 : 0 : switch (TREE_CODE (_p2))
24153 : : {
24154 : 0 : case SSA_NAME:
24155 : 0 : if (gimple *_d2 = get_def (valueize, _p2))
24156 : : {
24157 : 0 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
24158 : 0 : switch (gimple_assign_rhs_code (_a2))
24159 : : {
24160 : 0 : case NEGATE_EXPR:
24161 : 0 : {
24162 : 0 : tree _q50 = gimple_assign_rhs1 (_a2);
24163 : 0 : _q50 = do_valueize (valueize, _q50);
24164 : 0 : {
24165 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q20, _p1, _q50 };
24166 : 0 : if (gimple_simplify_667 (res_op, seq, valueize, type, captures))
24167 : 0 : return true;
24168 : : }
24169 : 0 : break;
24170 : : }
24171 : : default:;
24172 : : }
24173 : : }
24174 : : break;
24175 : : default:;
24176 : : }
24177 : : break;
24178 : : }
24179 : : default:;
24180 : : }
24181 : : }
24182 : : break;
24183 : 2745 : default:;
24184 : : }
24185 : 2745 : switch (TREE_CODE (_p1))
24186 : : {
24187 : 2729 : case SSA_NAME:
24188 : 2729 : if (gimple *_d1 = get_def (valueize, _p1))
24189 : : {
24190 : 2706 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
24191 : 2238 : switch (gimple_assign_rhs_code (_a1))
24192 : : {
24193 : 0 : case NEGATE_EXPR:
24194 : 0 : {
24195 : 0 : tree _q30 = gimple_assign_rhs1 (_a1);
24196 : 0 : _q30 = do_valueize (valueize, _q30);
24197 : 0 : {
24198 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _p0, _p2 };
24199 : 0 : if (gimple_simplify_666 (res_op, seq, valueize, type, captures))
24200 : 0 : return true;
24201 : : }
24202 : 0 : break;
24203 : : }
24204 : : default:;
24205 : : }
24206 : : }
24207 : : break;
24208 : 2745 : default:;
24209 : : }
24210 : 2745 : switch (TREE_CODE (_p2))
24211 : : {
24212 : 2745 : case SSA_NAME:
24213 : 2745 : if (gimple *_d1 = get_def (valueize, _p2))
24214 : : {
24215 : 2731 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
24216 : 4520 : switch (gimple_assign_rhs_code (_a1))
24217 : : {
24218 : 0 : case NEGATE_EXPR:
24219 : 0 : {
24220 : 0 : tree _q40 = gimple_assign_rhs1 (_a1);
24221 : 0 : _q40 = do_valueize (valueize, _q40);
24222 : 0 : {
24223 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _p0, _p1, _q40 };
24224 : 0 : if (canonicalize_math_after_vectorization_p ()
24225 : : )
24226 : : {
24227 : 0 : gimple_seq *lseq = seq;
24228 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2871;
24229 : 0 : {
24230 : 0 : res_op->set_op (CFN_FMA, type, 3);
24231 : 0 : res_op->ops[0] = captures[0];
24232 : 0 : res_op->ops[1] = captures[1];
24233 : 0 : res_op->ops[2] = captures[2];
24234 : 0 : res_op->resimplify (lseq, valueize);
24235 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1265, __FILE__, __LINE__, true);
24236 : 0 : return true;
24237 : : }
24238 : 0 : next_after_fail2871:;
24239 : : }
24240 : : }
24241 : 0 : break;
24242 : : }
24243 : : default:;
24244 : : }
24245 : : }
24246 : : break;
24247 : 2745 : default:;
24248 : : }
24249 : 2745 : switch (TREE_CODE (_p1))
24250 : : {
24251 : 2729 : case SSA_NAME:
24252 : 2729 : if (gimple *_d1 = get_def (valueize, _p1))
24253 : : {
24254 : 2706 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
24255 : 2238 : switch (gimple_assign_rhs_code (_a1))
24256 : : {
24257 : 0 : case NEGATE_EXPR:
24258 : 0 : {
24259 : 0 : tree _q30 = gimple_assign_rhs1 (_a1);
24260 : 0 : _q30 = do_valueize (valueize, _q30);
24261 : 0 : switch (TREE_CODE (_p2))
24262 : : {
24263 : 0 : case SSA_NAME:
24264 : 0 : if (gimple *_d2 = get_def (valueize, _p2))
24265 : : {
24266 : 0 : if (gassign *_a2 = dyn_cast <gassign *> (_d2))
24267 : 0 : switch (gimple_assign_rhs_code (_a2))
24268 : : {
24269 : 0 : case NEGATE_EXPR:
24270 : 0 : {
24271 : 0 : tree _q50 = gimple_assign_rhs1 (_a2);
24272 : 0 : _q50 = do_valueize (valueize, _q50);
24273 : 0 : {
24274 : 0 : tree captures[3] ATTRIBUTE_UNUSED = { _q30, _p0, _q50 };
24275 : 0 : if (gimple_simplify_667 (res_op, seq, valueize, type, captures))
24276 : 0 : return true;
24277 : : }
24278 : 0 : break;
24279 : : }
24280 : : default:;
24281 : : }
24282 : : }
24283 : : break;
24284 : : default:;
24285 : : }
24286 : : break;
24287 : : }
24288 : : default:;
24289 : : }
24290 : : }
24291 : : break;
24292 : : default:;
24293 : : }
24294 : : return false;
24295 : : }
24296 : :
24297 : : bool
24298 : 0 : gimple_simplify_CFN_VCOND_MASK_LEN (gimple_match_op *res_op, gimple_seq *seq,
24299 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
24300 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1, tree _p2)
24301 : : {
24302 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
24303 : 0 : switch (TREE_CODE (_p2))
24304 : : {
24305 : 0 : case SSA_NAME:
24306 : 0 : if (gimple *_d1 = get_def (valueize, _p2))
24307 : : {
24308 : 0 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
24309 : 0 : switch (gimple_assign_rhs_code (_a1))
24310 : : {
24311 : 0 : case VIEW_CONVERT_EXPR:
24312 : 0 : {
24313 : 0 : tree _q40 = TREE_OPERAND (gimple_assign_rhs1 (_a1), 0);
24314 : 0 : if ((TREE_CODE (_q40) == SSA_NAME
24315 : 0 : || is_gimple_min_invariant (_q40)))
24316 : : {
24317 : 0 : _q40 = do_valueize (valueize, _q40);
24318 : 0 : switch (TREE_CODE (_q40))
24319 : : {
24320 : 0 : case SSA_NAME:
24321 : 0 : if (gimple *_d2 = get_def (valueize, _q40))
24322 : : {
24323 : 0 : if (gcall *_c2 = dyn_cast <gcall *> (_d2))
24324 : 0 : switch (gimple_call_combined_fn (_c2))
24325 : : {
24326 : 0 : case CFN_FMA:
24327 : 0 : if (gimple_call_num_args (_c2) == 5)
24328 : : {
24329 : 0 : tree _q50 = gimple_call_arg (_c2, 0);
24330 : 0 : _q50 = do_valueize (valueize, _q50);
24331 : 0 : tree _q51 = gimple_call_arg (_c2, 1);
24332 : 0 : _q51 = do_valueize (valueize, _q51);
24333 : 0 : tree _q52 = gimple_call_arg (_c2, 2);
24334 : 0 : _q52 = do_valueize (valueize, _q52);
24335 : 0 : tree _q53 = gimple_call_arg (_c2, 3);
24336 : 0 : _q53 = do_valueize (valueize, _q53);
24337 : 0 : tree _q54 = gimple_call_arg (_c2, 4);
24338 : 0 : _q54 = do_valueize (valueize, _q54);
24339 : 0 : if (tree_swap_operands_p (_q50, _q51))
24340 : 0 : std::swap (_q50, _q51);
24341 : 0 : {
24342 : 0 : tree captures[8] ATTRIBUTE_UNUSED = { _p0, _p1, _q40, _q50, _q51, _q52, _q53, _q54 };
24343 : 0 : if (gimple_simplify_692 (res_op, seq, valueize, type, captures, CFN_FMA, CFN_COND_LEN_FMA))
24344 : 0 : return true;
24345 : : }
24346 : : }
24347 : : break;
24348 : 0 : case CFN_FMS:
24349 : 0 : if (gimple_call_num_args (_c2) == 5)
24350 : : {
24351 : 0 : tree _q50 = gimple_call_arg (_c2, 0);
24352 : 0 : _q50 = do_valueize (valueize, _q50);
24353 : 0 : tree _q51 = gimple_call_arg (_c2, 1);
24354 : 0 : _q51 = do_valueize (valueize, _q51);
24355 : 0 : tree _q52 = gimple_call_arg (_c2, 2);
24356 : 0 : _q52 = do_valueize (valueize, _q52);
24357 : 0 : tree _q53 = gimple_call_arg (_c2, 3);
24358 : 0 : _q53 = do_valueize (valueize, _q53);
24359 : 0 : tree _q54 = gimple_call_arg (_c2, 4);
24360 : 0 : _q54 = do_valueize (valueize, _q54);
24361 : 0 : if (tree_swap_operands_p (_q50, _q51))
24362 : 0 : std::swap (_q50, _q51);
24363 : 0 : {
24364 : 0 : tree captures[8] ATTRIBUTE_UNUSED = { _p0, _p1, _q40, _q50, _q51, _q52, _q53, _q54 };
24365 : 0 : if (gimple_simplify_692 (res_op, seq, valueize, type, captures, CFN_FMS, CFN_COND_LEN_FMS))
24366 : 0 : return true;
24367 : : }
24368 : : }
24369 : : break;
24370 : 0 : case CFN_FNMA:
24371 : 0 : if (gimple_call_num_args (_c2) == 5)
24372 : : {
24373 : 0 : tree _q50 = gimple_call_arg (_c2, 0);
24374 : 0 : _q50 = do_valueize (valueize, _q50);
24375 : 0 : tree _q51 = gimple_call_arg (_c2, 1);
24376 : 0 : _q51 = do_valueize (valueize, _q51);
24377 : 0 : tree _q52 = gimple_call_arg (_c2, 2);
24378 : 0 : _q52 = do_valueize (valueize, _q52);
24379 : 0 : tree _q53 = gimple_call_arg (_c2, 3);
24380 : 0 : _q53 = do_valueize (valueize, _q53);
24381 : 0 : tree _q54 = gimple_call_arg (_c2, 4);
24382 : 0 : _q54 = do_valueize (valueize, _q54);
24383 : 0 : if (tree_swap_operands_p (_q50, _q51))
24384 : 0 : std::swap (_q50, _q51);
24385 : 0 : {
24386 : 0 : tree captures[8] ATTRIBUTE_UNUSED = { _p0, _p1, _q40, _q50, _q51, _q52, _q53, _q54 };
24387 : 0 : if (gimple_simplify_692 (res_op, seq, valueize, type, captures, CFN_FNMA, CFN_COND_LEN_FNMA))
24388 : 0 : return true;
24389 : : }
24390 : : }
24391 : : break;
24392 : 0 : case CFN_FNMS:
24393 : 0 : if (gimple_call_num_args (_c2) == 5)
24394 : : {
24395 : 0 : tree _q50 = gimple_call_arg (_c2, 0);
24396 : 0 : _q50 = do_valueize (valueize, _q50);
24397 : 0 : tree _q51 = gimple_call_arg (_c2, 1);
24398 : 0 : _q51 = do_valueize (valueize, _q51);
24399 : 0 : tree _q52 = gimple_call_arg (_c2, 2);
24400 : 0 : _q52 = do_valueize (valueize, _q52);
24401 : 0 : tree _q53 = gimple_call_arg (_c2, 3);
24402 : 0 : _q53 = do_valueize (valueize, _q53);
24403 : 0 : tree _q54 = gimple_call_arg (_c2, 4);
24404 : 0 : _q54 = do_valueize (valueize, _q54);
24405 : 0 : if (tree_swap_operands_p (_q50, _q51))
24406 : 0 : std::swap (_q50, _q51);
24407 : 0 : {
24408 : 0 : tree captures[8] ATTRIBUTE_UNUSED = { _p0, _p1, _q40, _q50, _q51, _q52, _q53, _q54 };
24409 : 0 : if (gimple_simplify_692 (res_op, seq, valueize, type, captures, CFN_FNMS, CFN_COND_LEN_FNMS))
24410 : 0 : return true;
24411 : : }
24412 : : }
24413 : : break;
24414 : : default:;
24415 : : }
24416 : : }
24417 : : break;
24418 : : default:;
24419 : : }
24420 : : }
24421 : : break;
24422 : : }
24423 : : default:;
24424 : : }
24425 : 0 : else if (gcall *_c1 = dyn_cast <gcall *> (_d1))
24426 : 0 : switch (gimple_call_combined_fn (_c1))
24427 : : {
24428 : 0 : case CFN_FMA:
24429 : 0 : if (gimple_call_num_args (_c1) == 5)
24430 : : {
24431 : 0 : tree _q40 = gimple_call_arg (_c1, 0);
24432 : 0 : _q40 = do_valueize (valueize, _q40);
24433 : 0 : tree _q41 = gimple_call_arg (_c1, 1);
24434 : 0 : _q41 = do_valueize (valueize, _q41);
24435 : 0 : tree _q42 = gimple_call_arg (_c1, 2);
24436 : 0 : _q42 = do_valueize (valueize, _q42);
24437 : 0 : tree _q43 = gimple_call_arg (_c1, 3);
24438 : 0 : _q43 = do_valueize (valueize, _q43);
24439 : 0 : tree _q44 = gimple_call_arg (_c1, 4);
24440 : 0 : _q44 = do_valueize (valueize, _q44);
24441 : 0 : if (tree_swap_operands_p (_q40, _q41))
24442 : 0 : std::swap (_q40, _q41);
24443 : 0 : {
24444 : 0 : tree captures[8] ATTRIBUTE_UNUSED = { _p0, _p1, _p2, _q40, _q41, _q42, _q43, _q44 };
24445 : 0 : if (gimple_simplify_692 (res_op, seq, valueize, type, captures, CFN_FMA, CFN_COND_LEN_FMA))
24446 : 0 : return true;
24447 : : }
24448 : : }
24449 : : break;
24450 : 0 : case CFN_FMS:
24451 : 0 : if (gimple_call_num_args (_c1) == 5)
24452 : : {
24453 : 0 : tree _q40 = gimple_call_arg (_c1, 0);
24454 : 0 : _q40 = do_valueize (valueize, _q40);
24455 : 0 : tree _q41 = gimple_call_arg (_c1, 1);
24456 : 0 : _q41 = do_valueize (valueize, _q41);
24457 : 0 : tree _q42 = gimple_call_arg (_c1, 2);
24458 : 0 : _q42 = do_valueize (valueize, _q42);
24459 : 0 : tree _q43 = gimple_call_arg (_c1, 3);
24460 : 0 : _q43 = do_valueize (valueize, _q43);
24461 : 0 : tree _q44 = gimple_call_arg (_c1, 4);
24462 : 0 : _q44 = do_valueize (valueize, _q44);
24463 : 0 : if (tree_swap_operands_p (_q40, _q41))
24464 : 0 : std::swap (_q40, _q41);
24465 : 0 : {
24466 : 0 : tree captures[8] ATTRIBUTE_UNUSED = { _p0, _p1, _p2, _q40, _q41, _q42, _q43, _q44 };
24467 : 0 : if (gimple_simplify_692 (res_op, seq, valueize, type, captures, CFN_FMS, CFN_COND_LEN_FMS))
24468 : 0 : return true;
24469 : : }
24470 : : }
24471 : : break;
24472 : 0 : case CFN_FNMA:
24473 : 0 : if (gimple_call_num_args (_c1) == 5)
24474 : : {
24475 : 0 : tree _q40 = gimple_call_arg (_c1, 0);
24476 : 0 : _q40 = do_valueize (valueize, _q40);
24477 : 0 : tree _q41 = gimple_call_arg (_c1, 1);
24478 : 0 : _q41 = do_valueize (valueize, _q41);
24479 : 0 : tree _q42 = gimple_call_arg (_c1, 2);
24480 : 0 : _q42 = do_valueize (valueize, _q42);
24481 : 0 : tree _q43 = gimple_call_arg (_c1, 3);
24482 : 0 : _q43 = do_valueize (valueize, _q43);
24483 : 0 : tree _q44 = gimple_call_arg (_c1, 4);
24484 : 0 : _q44 = do_valueize (valueize, _q44);
24485 : 0 : if (tree_swap_operands_p (_q40, _q41))
24486 : 0 : std::swap (_q40, _q41);
24487 : 0 : {
24488 : 0 : tree captures[8] ATTRIBUTE_UNUSED = { _p0, _p1, _p2, _q40, _q41, _q42, _q43, _q44 };
24489 : 0 : if (gimple_simplify_692 (res_op, seq, valueize, type, captures, CFN_FNMA, CFN_COND_LEN_FNMA))
24490 : 0 : return true;
24491 : : }
24492 : : }
24493 : : break;
24494 : 0 : case CFN_FNMS:
24495 : 0 : if (gimple_call_num_args (_c1) == 5)
24496 : : {
24497 : 0 : tree _q40 = gimple_call_arg (_c1, 0);
24498 : 0 : _q40 = do_valueize (valueize, _q40);
24499 : 0 : tree _q41 = gimple_call_arg (_c1, 1);
24500 : 0 : _q41 = do_valueize (valueize, _q41);
24501 : 0 : tree _q42 = gimple_call_arg (_c1, 2);
24502 : 0 : _q42 = do_valueize (valueize, _q42);
24503 : 0 : tree _q43 = gimple_call_arg (_c1, 3);
24504 : 0 : _q43 = do_valueize (valueize, _q43);
24505 : 0 : tree _q44 = gimple_call_arg (_c1, 4);
24506 : 0 : _q44 = do_valueize (valueize, _q44);
24507 : 0 : if (tree_swap_operands_p (_q40, _q41))
24508 : 0 : std::swap (_q40, _q41);
24509 : 0 : {
24510 : 0 : tree captures[8] ATTRIBUTE_UNUSED = { _p0, _p1, _p2, _q40, _q41, _q42, _q43, _q44 };
24511 : 0 : if (gimple_simplify_692 (res_op, seq, valueize, type, captures, CFN_FNMS, CFN_COND_LEN_FNMS))
24512 : 0 : return true;
24513 : : }
24514 : : }
24515 : : break;
24516 : : default:;
24517 : : }
24518 : : }
24519 : : break;
24520 : : default:;
24521 : : }
24522 : : return false;
24523 : : }
24524 : :
24525 : : bool
24526 : 25656 : gimple_simplify (gimple_match_op *res_op, gimple_seq *seq,
24527 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
24528 : : code_helper code, const tree type, tree _p0, tree _p1, tree _p2, tree _p3, tree _p4)
24529 : : {
24530 : 25656 : switch (code.get_rep())
24531 : : {
24532 : 0 : case -CFN_VCOND_MASK_LEN:
24533 : 0 : return gimple_simplify_CFN_VCOND_MASK_LEN (res_op, seq, valueize, code, type, _p0, _p1, _p2, _p3, _p4);
24534 : : default:;
24535 : : }
24536 : : return false;
24537 : : }
24538 : :
24539 : : bool
24540 : 0 : gimple_simplify_CFN_COND_LEN_ADD (gimple_match_op *res_op, gimple_seq *seq,
24541 : : tree (*valueize)(tree) ATTRIBUTE_UNUSED,
24542 : : code_helper ARG_UNUSED (code), tree ARG_UNUSED (type), tree _p0, tree _p1, tree _p2, tree _p3, tree _p4, tree _p5)
24543 : : {
24544 : 0 : const bool debug_dump = dump_file && (dump_flags & TDF_FOLDING);
24545 : 0 : if (integer_truep (_p0))
24546 : : {
24547 : 0 : switch (TREE_CODE (_p2))
24548 : : {
24549 : 0 : case SSA_NAME:
24550 : 0 : if (gimple *_d1 = get_def (valueize, _p2))
24551 : : {
24552 : 0 : if (gassign *_a1 = dyn_cast <gassign *> (_d1))
24553 : 0 : switch (gimple_assign_rhs_code (_a1))
24554 : : {
24555 : 0 : case VEC_COND_EXPR:
24556 : 0 : {
24557 : 0 : tree _q40 = gimple_assign_rhs1 (_a1);
24558 : 0 : _q40 = do_valueize (valueize, _q40);
24559 : 0 : tree _q41 = gimple_assign_rhs2 (_a1);
24560 : 0 : _q41 = do_valueize (valueize, _q41);
24561 : 0 : tree _q42 = gimple_assign_rhs3 (_a1);
24562 : 0 : _q42 = do_valueize (valueize, _q42);
24563 : 0 : if (zerop (_q42))
24564 : : {
24565 : 0 : if ((_p3 == _p1 && ! TREE_SIDE_EFFECTS (_p3)) || (operand_equal_p (_p3, _p1, 0) && types_match (_p3, _p1)))
24566 : : {
24567 : 0 : {
24568 : 0 : tree captures[6] ATTRIBUTE_UNUSED = { _p1, _q40, _q41, _q42, _p4, _p5 };
24569 : 0 : if (ANY_INTEGRAL_TYPE_P (type)
24570 : 0 : || (FLOAT_TYPE_P (type)
24571 : 0 : && fold_real_zero_addition_p (type, NULL_TREE, captures[3], 0))
24572 : : )
24573 : : {
24574 : 0 : gimple_seq *lseq = seq;
24575 : 0 : if (UNLIKELY (!dbg_cnt (match))) goto next_after_fail2962;
24576 : 0 : {
24577 : 0 : res_op->set_op (CFN_COND_LEN_ADD, type, 6);
24578 : 0 : res_op->ops[0] = captures[1];
24579 : 0 : res_op->ops[1] = captures[0];
24580 : 0 : res_op->ops[2] = captures[2];
24581 : 0 : res_op->ops[3] = captures[0];
24582 : 0 : res_op->ops[4] = captures[4];
24583 : 0 : res_op->ops[5] = captures[5];
24584 : 0 : res_op->resimplify (lseq, valueize);
24585 : 0 : if (UNLIKELY (debug_dump)) gimple_dump_logs ("match.pd", 1286, __FILE__, __LINE__, true);
24586 : 0 : return true;
24587 : : }
24588 : 0 : next_after_fail2962:;
24589 : : }
24590 : : }
24591 : : }
24592 : : }
24593 : : break;
24594 : : }
24595 : : default:;
24596 : : }
24597 : : }
24598 : : break;
24599 : : default:;
24600 : : }
24601 : : }
24602 : : return false;
24603 : : }
24604 : : #pragma GCC diagnostic pop
|